This is an automated email from the git hooks/post-receive script. New commit to branch feature/3931 in repository jaxx. See https://gitlab.nuiton.org/nuiton/jaxx.git commit 59f28c485b4d99b1660120079458033bb6186150 Author: Kevin Morin <morin@codelutin.com> Date: Fri Apr 22 15:42:03 2016 +0200 add predicates to handle the removeEnabled state (fixes #3931) --- .../swing/editor/bean/BeanDoubleListHandler.java | 38 ++++++++++++++-------- .../swing/editor/bean/BeanDoubleListModel.java | 19 +++++++++++ 2 files changed, 43 insertions(+), 14 deletions(-) diff --git a/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListHandler.java b/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListHandler.java index 2daea7c..ac3c6b3 100644 --- a/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListHandler.java +++ b/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListHandler.java @@ -23,6 +23,7 @@ package jaxx.runtime.swing.editor.bean; */ import com.google.common.base.Predicate; +import com.google.common.collect.Lists; import jaxx.runtime.SwingUtil; import jaxx.runtime.swing.JAXXButtonGroup; import jaxx.runtime.swing.model.JaxxDefaultListModel; @@ -131,14 +132,24 @@ public class BeanDoubleListHandler<O> implements PropertyChangeListener { this.decorator = BeanUIUtil.createDecorator(decorator); + final BeanDoubleListModel<O> uiModel = ui.getModel(); + // make sure useMultiSelect is set before filling universe and select lists - ui.getModel().setUseMultiSelect(ui.getUseMultiSelect()); + uiModel.setUseMultiSelect(ui.getUseMultiSelect()); - ui.getModel().setUniverse(universe); - ui.getModel().setSelected(selected); + uiModel.setUniverse(universe); + uiModel.setSelected(selected); JList universeList = ui.getUniverseList(); - JList selectedList = ui.getSelectedList(); + final JList selectedList = ui.getSelectedList(); + + uiModel.addCanRemoveItemsPredicate(new Predicate<List<O>>() { + + @Override + public boolean apply(List<O> o) { + return !o.isEmpty(); + } + }); final FilteredDecoratorListCellRenderer universeListCellRenderer = new FilteredDecoratorListCellRenderer(this.decorator); @@ -156,7 +167,7 @@ public class BeanDoubleListHandler<O> implements PropertyChangeListener { @Override public void valueChanged(ListSelectionEvent e) { ListSelectionModel source = (ListSelectionModel) e.getSource(); - ui.getModel().setAddEnabled(!source.isSelectionEmpty()); + uiModel.setAddEnabled(!source.isSelectionEmpty()); } }); @@ -165,10 +176,10 @@ public class BeanDoubleListHandler<O> implements PropertyChangeListener { @Override public void valueChanged(ListSelectionEvent e) { ListSelectionModel source = (ListSelectionModel) e.getSource(); - BeanDoubleListModel<O> model = ui.getModel(); if (!e.getValueIsAdjusting()) { - boolean removeEnabled = !source.isSelectionEmpty(); - model.setRemoveEnabled(removeEnabled); + + List<O> selectedItems = (List<O>) Lists.newArrayList(selectedList.getSelectedValues()); + boolean removeEnabled = uiModel.computeRemoveEnabled(selectedItems); int minSelectionIndex = source.getMinSelectionIndex(); int maxSelectionIndex = source.getMaxSelectionIndex(); @@ -178,12 +189,12 @@ public class BeanDoubleListHandler<O> implements PropertyChangeListener { boolean upEnabled = removeEnabled && oneSelection && minSelectionIndex > 0; - model.setSelectedUpEnabled(upEnabled); + uiModel.setSelectedUpEnabled(upEnabled); boolean downEnabled = removeEnabled && oneSelection && - minSelectionIndex + 1 < model.getSelectedListSize(); - model.setSelectedDownEnabled(downEnabled); + minSelectionIndex + 1 < uiModel.getSelectedListSize(); + uiModel.setSelectedDownEnabled(downEnabled); } } }); @@ -223,8 +234,7 @@ public class BeanDoubleListHandler<O> implements PropertyChangeListener { ui.addPropertyChangeListener(this); - final JaxxFilterableListModel<O> filterModel = - (JaxxFilterableListModel) ui.getModel().getUniverseModel(); + final JaxxFilterableListModel<O> filterModel = (JaxxFilterableListModel) uiModel.getUniverseModel(); filterModel.setDecorator(this.decorator); @@ -433,7 +443,7 @@ public class BeanDoubleListHandler<O> implements PropertyChangeListener { List<O> selection = (List<O>) Arrays.asList(ui.getSelectedList().getSelectedValues()); ui.getModel().removeFromSelected(selection); ui.getSelectedList().clearSelection(); - + sortData(); } diff --git a/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListModel.java b/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListModel.java index 631f2b2..43e650c 100644 --- a/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListModel.java +++ b/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListModel.java @@ -22,6 +22,7 @@ package jaxx.runtime.swing.editor.bean; * #L% */ +import com.google.common.base.Predicate; import com.google.common.collect.Lists; import jaxx.runtime.swing.model.JaxxDefaultListModel; import jaxx.runtime.swing.model.JaxxFilterableListModel; @@ -31,6 +32,8 @@ import org.jdesktop.beans.AbstractSerializableBean; import javax.swing.ListModel; import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; import java.util.List; /** @@ -79,6 +82,8 @@ public class BeanDoubleListModel<O> extends AbstractSerializableBean { protected boolean useMultiSelect; + protected Collection<Predicate<List<O>>> canRemoveItemsPredicates = new ArrayList<Predicate<List<O>>>(); + /** * To get the selected items. * @@ -324,4 +329,18 @@ public class BeanDoubleListModel<O> extends AbstractSerializableBean { public int getSelectedListSize() { return selected.size(); } + + public void addCanRemoveItemsPredicate(Predicate<List<O>> canRemoveItemsPredicate) { + canRemoveItemsPredicates.add(canRemoveItemsPredicate); + } + + public boolean computeRemoveEnabled(List<O> toRemoveItems) { + boolean result = true; + Iterator<Predicate<List<O>>> iterator = canRemoveItemsPredicates.iterator(); + while (result && iterator.hasNext()) { + result &= iterator.next().apply(toRemoveItems); + } + setRemoveEnabled(result); + return result; + } } -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.