This is an automated email from the git hooks/post-receive script. New commit to branch develop-2.x in repository jaxx. See https://gitlab.nuiton.org/nuiton/jaxx.git commit 1d1e99f5d948edac056ef4146edcfbc3bcd091c4 Author: Tony CHEMIT <dev@tchemit.fr> Date: Fri Mar 3 11:54:54 2017 +0100 Add a force option in BeanComboBox to set selectedItem value (Fixes #4157) --- .../runtime/swing/editor/bean/BeanComboBox.jaxx | 2 + .../swing/editor/bean/BeanComboBoxHandler.java | 45 +++++++++++----------- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBox.jaxx b/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBox.jaxx index 1a1b5cc..f3fd545 100644 --- a/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBox.jaxx +++ b/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBox.jaxx @@ -89,6 +89,8 @@ <String id='i18nPrefix' javaBean='"entitycombobox.common."'/> + <Boolean id='force' javaBean='false'/> + <!-- popup to change sorted property--> <JPopupMenu id='popup' onPopupMenuWillBecomeInvisible='getChangeDecorator().setSelected(false)' diff --git a/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBoxHandler.java b/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBoxHandler.java index efa1aa2..fd5a3d4 100644 --- a/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBoxHandler.java +++ b/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanComboBoxHandler.java @@ -34,9 +34,7 @@ import org.nuiton.decorator.JXPathDecorator; import org.nuiton.decorator.MultiJXPathDecorator; import org.nuiton.util.beans.BeanUtil; -import javax.swing.JComboBox; -import javax.swing.JComponent; -import javax.swing.JPopupMenu; +import javax.swing.*; import javax.swing.event.PopupMenuEvent; import javax.swing.event.PopupMenuListener; import javax.swing.text.Document; @@ -48,14 +46,15 @@ import java.beans.PropertyChangeListener; import java.lang.reflect.Method; import java.util.Collections; import java.util.List; +import java.util.Objects; /** * Le handler d'un {@link BeanComboBox}. - * + * <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 Tony Chemit - chemit@codelutin.com + * @author Tony Chemit - dev@tchemit.fr * @see BeanComboBox */ public class BeanComboBoxHandler<O> implements PropertyChangeListener { @@ -148,13 +147,17 @@ public class BeanComboBoxHandler<O> implements PropertyChangeListener { public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { O newSelectedItem = (O) combobox.getSelectedItem(); + log.debug(String.format("old ui value: %s, new value: %s :: %s", ui.getSelectedItem(), newSelectedItem, Objects.equals(ui.getSelectedItem(), newSelectedItem))); + log.debug(String.format("old value: %s, new value: %s :: %s", selectedItem, newSelectedItem, Objects.equals(selectedItem, newSelectedItem))); if (canceled) { ui.setSelectedItem(null); - } else if ((newSelectedItem == null ^ selectedItem == null) - || (newSelectedItem != null - && !selectedItem.equals(newSelectedItem))) { - ui.setSelectedItem(newSelectedItem); + } else { + + if (ui.isForce()) { + ui.setSelectedItem(null); + } + setSelectedItem(selectedItem, newSelectedItem); } selectedItem = null; canceled = false; @@ -210,7 +213,7 @@ public class BeanComboBoxHandler<O> implements PropertyChangeListener { /** * Add the given items into the comboBox. - * + * <p> * <strong>Note:</strong> The item will be inserted at his correct following * the selected ordering. * @@ -234,7 +237,7 @@ public class BeanComboBoxHandler<O> implements PropertyChangeListener { /** * Remove the given items from the comboBox model. - * + * <p> * <strong>Note:</strong> If this item was selected, then selection will be * cleared. * @@ -275,7 +278,7 @@ public class BeanComboBoxHandler<O> implements PropertyChangeListener { /** * Add the given item into the comboBox. - * + * <p> * <strong>Note:</strong> The item will be inserted at his correct following * the selected ordering. * @@ -289,7 +292,7 @@ public class BeanComboBoxHandler<O> implements PropertyChangeListener { /** * Remove the given item from the comboBox model. - * + * <p> * <strong>Note:</strong> If this item was selected, then selection will be * cleared. * @@ -407,10 +410,7 @@ public class BeanComboBoxHandler<O> implements PropertyChangeListener { if (ui.isSortable()) { try { // Sort data with the decorator jxpath tokens. - DecoratorUtil.sort(decorator, - data, - index, - reversesort); + DecoratorUtil.sort(decorator, data, index, reversesort); } catch (Exception eee) { log.warn(eee.getMessage(), eee); @@ -438,10 +438,12 @@ public class BeanComboBoxHandler<O> implements PropertyChangeListener { * @param newValue la nouvelle valeur */ protected void setSelectedItem(O oldValue, O newValue) { + log.debug(String.format("old value: %s, new value: %s", oldValue, newValue)); if (ui.getBean() == null) { return; } + if (newValue == null) { if (ui.getCombobox().getSelectedItem() == null) { return; @@ -508,7 +510,6 @@ public class BeanComboBoxHandler<O> implements PropertyChangeListener { @Override public void propertyChange(PropertyChangeEvent evt) { String propertyName = evt.getPropertyName(); - if (BeanComboBox.PROPERTY_SELECTED_ITEM.equals(propertyName)) { setSelectedItem((O) evt.getOldValue(), (O) evt.getNewValue()); return; @@ -517,7 +518,7 @@ public class BeanComboBoxHandler<O> implements PropertyChangeListener { if (BeanComboBox.PROPERTY_AUTO_COMPLETE.equals(propertyName)) { setAutoComplete((Boolean) evt.getOldValue(), - (Boolean) evt.getNewValue()); + (Boolean) evt.getNewValue()); return; } @@ -525,7 +526,7 @@ public class BeanComboBoxHandler<O> implements PropertyChangeListener { // decorator index has changed, force reload of data in ui setIndex((Integer) evt.getOldValue(), - (Integer) evt.getNewValue()); + (Integer) evt.getNewValue()); return; } @@ -533,7 +534,7 @@ public class BeanComboBoxHandler<O> implements PropertyChangeListener { // sort order has changed, force reload of data in ui setSortOrder((Boolean) evt.getOldValue(), - (Boolean) evt.getNewValue()); + (Boolean) evt.getNewValue()); return; } @@ -550,7 +551,7 @@ public class BeanComboBoxHandler<O> implements PropertyChangeListener { protected void fireEmpty(boolean wasEmpty) { ui.firePropertyChange(BeanComboBox.PROPERTY_EMPTY, wasEmpty, - isEmpty()); + isEmpty()); } } -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.