r2541 - trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean
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/BeanComboBox.css trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBox.jaxx trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBoxHandler.java Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBox.css =================================================================== --- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBox.css 2012-12-29 11:28:37 UTC (rev 2540) +++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBox.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()}; } Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBox.jaxx =================================================================== --- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBox.jaxx 2012-12-29 11:28:37 UTC (rev 2540) +++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBox.jaxx 2012-12-29 13:29:17 UTC (rev 2541) @@ -96,6 +96,9 @@ </JPopupMenu> <script><![CDATA[ + +public static final String PROPERTY_EMPTY = "empty"; + public void init(JXPathDecorator<O> decorator, List<O> data) { handler.init(decorator, data); } @@ -105,6 +108,13 @@ popup.setVisible(false); } } + +public boolean isEmpty() { return handler.isEmpty(); } + +public void addItem(O item) { handler.addItem(item); } + +public void removeItem(O item) { handler.removeItem(item); } + ]]> </script> <row> Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBoxHandler.java =================================================================== --- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBoxHandler.java 2012-12-29 11:28:37 UTC (rev 2540) +++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBoxHandler.java 2012-12-29 13:29:17 UTC (rev 2541) @@ -26,16 +26,17 @@ package jaxx.runtime.swing.editor.bean; 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; +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; @@ -53,11 +53,11 @@ * <p/> * Note: ce handler n'est pas stateless et n'est donc pas partageable entre plusieurs ui. * + * @param <O> le type des objet contenus dans le modèle du composant. * @author tchemit <chemit@codelutin.com> - * @param <O> le type des objet contenus dans le modèle du composant. * @see BeanComboBox */ -public class BeanComboBoxHandler<O> implements PropertyChangeListener { +public class BeanComboBoxHandler<O> implements PropertyChangeListener {//}, ListDataListener { public static final Log log = LogFactory.getLog(BeanComboBoxHandler.class); @@ -127,29 +127,33 @@ this.decorator = BeanUIUtil.createDecorator(decorator); + JComboBox combobox = ui.getCombobox(); + // init combobox renderer base on given decorator - ui.getCombobox().setRenderer(new DecoratorListCellRenderer(this.decorator)); + combobox.setRenderer(new DecoratorListCellRenderer(this.decorator)); convertor = BeanUIUtil.newDecoratedObjectToStringConverter(this.decorator); // keep a trace of original document (to make possible reverse autom-complete) - JTextComponent editorComponent = (JTextComponent) ui.getCombobox().getEditor().getEditorComponent(); + JTextComponent editorComponent = (JTextComponent) combobox.getEditor().getEditorComponent(); originalDocument = editorComponent.getDocument(); // 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); ui.autoComplete = true; +// combobox.getModel().addListDataListener(this); + ui.addPropertyChangeListener(this); // set datas @@ -164,6 +168,44 @@ popupHandler.togglePopup(); } + public boolean isEmpty() { + boolean result = CollectionUtils.isEmpty(ui.getData()); + return result; + } + + public void addItem(O item) { + + List<O> data = ui.getData(); + boolean wasEmpty = CollectionUtils.isEmpty(data); + data.add(item); + + updateUI(ui.getIndex(), ui.isReverseSort()); + + fireEmpty(wasEmpty); + } + + public void removeItem(O item) { + + List<O> data = ui.getData(); + + boolean remove = data.remove(item); + + if (remove) { + + // item was found in data + + Object selectedItem = ui.getSelectedItem(); + if (item == selectedItem) { + + // item was selected item, reset selected item then + ui.setSelectedItem(null); + } + + updateUI(ui.getIndex(), ui.isReverseSort()); + fireEmpty(false); + } + } + /** * Modifie l'état autoComplete de l'ui. * @@ -225,7 +267,6 @@ updateUI(ui.getIndex(), newValue); } - @SuppressWarnings({"unchecked"}) protected void updateUI(int index, boolean reversesort) { // change decorator context @@ -339,7 +380,7 @@ String propertyName = evt.getPropertyName(); if (BeanComboBox.PROPERTY_SELECTED_ITEM.equals(propertyName)) { - setSelectedItem((O)evt.getOldValue(), (O)evt.getNewValue()); + setSelectedItem((O) evt.getOldValue(), (O) evt.getNewValue()); return; } @@ -369,6 +410,15 @@ // list has changed, force reload of index setIndex(-1, ui.getIndex()); + + // list has changed, fire empty property + List list = (List) evt.getOldValue(); + fireEmpty(CollectionUtils.isEmpty(list)); } } + + protected void fireEmpty(boolean wasEmpty) { + ui.firePropertyChange(BeanComboBox.PROPERTY_EMPTY, wasEmpty, isEmpty()); + } + }
participants (1)
-
tchemit@users.nuiton.org