From tchemit@users.nuiton.org Sat Dec 29 14:29:17 2012 From: tchemit@users.nuiton.org To: jaxx-commits@list.nuiton.org Subject: [Jaxx-commits] r2541 - trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean Date: Sat, 29 Dec 2012 14:29:17 +0100 Message-ID: <20121229132917.61F8F15845@nuiton.codelutin.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0617831913861611722==" --===============0617831913861611722== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Author: tchemit Date: 2012-12-29 14:29:17 +0100 (Sat, 29 Dec 2012) New Revision: 2541 Url: http://nuiton.org/projects/jaxx/repository/revisions/2541 Log: fixes #2491: [BeanComboBox] add method to add and remove items from comboBox fixes #2492: [BeanComboBox] add empty property Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboB= ox.css trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboB= ox.jaxx trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboB= oxHandler.java Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/Bea= nComboBox.css =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanCombo= Box.css 2012-12-29 11:28:37 UTC (rev 2540) +++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanCombo= Box.css 2012-12-29 13:29:17 UTC (rev 2541) @@ -87,6 +87,7 @@ toolTipText:"beancombobox.action.sort.tip"; focusable:false; focusPainted:false; + enabled:{isShowDecorator() && isEnabled()}; } =20 =20 Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/Bea= nComboBox.jaxx =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanCombo= Box.jaxx 2012-12-29 11:28:37 UTC (rev 2540) +++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanCombo= Box.jaxx 2012-12-29 13:29:17 UTC (rev 2541) @@ -96,6 +96,9 @@ =20 Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/Bea= nComboBoxHandler.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanCombo= BoxHandler.java 2012-12-29 11:28:37 UTC (rev 2540) +++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanCombo= BoxHandler.java 2012-12-29 13:29:17 UTC (rev 2541) @@ -26,16 +26,17 @@ package jaxx.runtime.swing.editor.bean; =20 import jaxx.runtime.SwingUtil; -import org.nuiton.util.decorator.DecoratorUtil; -import org.nuiton.util.decorator.JXPathDecorator; -import org.nuiton.util.decorator.MultiJXPathDecorator; import jaxx.runtime.swing.JAXXButtonGroup; import jaxx.runtime.swing.renderer.DecoratorListCellRenderer; -import org.apache.commons.beanutils.PropertyUtils; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.autocomplete.ObjectToStringConverter; +import org.nuiton.util.decorator.DecoratorUtil; +import org.nuiton.util.decorator.JXPathDecorator; +import org.nuiton.util.decorator.MultiJXPathDecorator; =20 +import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JPopupMenu; import javax.swing.text.Document; @@ -44,7 +45,6 @@ import java.awt.event.FocusListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; -import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.util.List; =20 @@ -53,11 +53,11 @@ *

* Note: ce handler n'est pas stateless et n'est donc pas partageable entre = plusieurs ui. * + * @param le type des objet contenus dans le mod=C3=A8le du composant. * @author tchemit - * @param le type des objet contenus dans le mod=C3=A8le du composant. * @see BeanComboBox */ -public class BeanComboBoxHandler implements PropertyChangeListener { +public class BeanComboBoxHandler implements PropertyChangeListener {//}, = ListDataListener { =20 public static final Log log =3D LogFactory.getLog(BeanComboBoxHandler.cl= ass); =20 @@ -127,29 +127,33 @@ =20 this.decorator =3D BeanUIUtil.createDecorator(decorator); =20 + JComboBox combobox =3D ui.getCombobox(); + // init combobox renderer base on given decorator - ui.getCombobox().setRenderer(new DecoratorListCellRenderer(this.deco= rator)); + combobox.setRenderer(new DecoratorListCellRenderer(this.decorator)); =20 convertor =3D BeanUIUtil.newDecoratedObjectToStringConverter(this.de= corator); =20 // keep a trace of original document (to make possible reverse autom= -complete)=20 - JTextComponent editorComponent =3D (JTextComponent) ui.getCombobox()= .getEditor().getEditorComponent(); + JTextComponent editorComponent =3D (JTextComponent) combobox.getEdit= or().getEditorComponent(); originalDocument =3D editorComponent.getDocument(); =20 // build popup popupHandler.preparePopup(ui.getSelectedToolTipText(), - ui.getNotSelectedToolTipText(), - ui.getI18nPrefix(), - ui.getPopupTitleText(), - indexes, - ui.getPopupSeparator(), - ui.getPopupLabel(), - ui.getSortUp(), - ui.getSortDown(), - this.decorator); + ui.getNotSelectedToolTipText(), + ui.getI18nPrefix(), + ui.getPopupTitleText(), + indexes, + ui.getPopupSeparator(), + ui.getPopupLabel(), + ui.getSortUp(), + ui.getSortDown(), + this.decorator); =20 ui.autoComplete =3D true; =20 +// combobox.getModel().addListDataListener(this); + ui.addPropertyChangeListener(this); =20 // set datas @@ -164,6 +168,44 @@ popupHandler.togglePopup(); } =20 + public boolean isEmpty() { + boolean result =3D CollectionUtils.isEmpty(ui.getData()); + return result; + } + + public void addItem(O item) { + + List data =3D ui.getData(); + boolean wasEmpty =3D CollectionUtils.isEmpty(data); + data.add(item); + + updateUI(ui.getIndex(), ui.isReverseSort()); + + fireEmpty(wasEmpty); + } + + public void removeItem(O item) { + + List data =3D ui.getData(); + + boolean remove =3D data.remove(item); + + if (remove) { + + // item was found in data + + Object selectedItem =3D ui.getSelectedItem(); + if (item =3D=3D selectedItem) { + + // item was selected item, reset selected item then + ui.setSelectedItem(null); + } + + updateUI(ui.getIndex(), ui.isReverseSort()); + fireEmpty(false); + } + } + /** * Modifie l'=C3=A9tat autoComplete de l'ui. * @@ -225,7 +267,6 @@ updateUI(ui.getIndex(), newValue); } =20 - @SuppressWarnings({"unchecked"}) protected void updateUI(int index, boolean reversesort) { =20 // change decorator context @@ -339,7 +380,7 @@ String propertyName =3D evt.getPropertyName(); =20 if (BeanComboBox.PROPERTY_SELECTED_ITEM.equals(propertyName)) { - setSelectedItem((O)evt.getOldValue(), (O)evt.getNewValue()); + setSelectedItem((O) evt.getOldValue(), (O) evt.getNewValue()); return; } =20 @@ -369,6 +410,15 @@ =20 // list has changed, force reload of index setIndex(-1, ui.getIndex()); + + // list has changed, fire empty property + List list =3D (List) evt.getOldValue(); + fireEmpty(CollectionUtils.isEmpty(list)); } } + + protected void fireEmpty(boolean wasEmpty) { + ui.firePropertyChange(BeanComboBox.PROPERTY_EMPTY, wasEmpty, isEmpty= ()); + } + } --===============0617831913861611722==--