Author: tchemit Date: 2012-12-14 10:22:33 +0100 (Fri, 14 Dec 2012) New Revision: 2536 Url: http://nuiton.org/projects/jaxx/repository/revisions/2536 Log: fixes #2474: Create a double list widget Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListHandler.java Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListHandler.java =================================================================== --- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListHandler.java 2012-12-13 15:37:20 UTC (rev 2535) +++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListHandler.java 2012-12-14 09:22:33 UTC (rev 2536) @@ -32,6 +32,8 @@ import javax.swing.JList; import javax.swing.ListSelectionModel; +import javax.swing.event.ListDataEvent; +import javax.swing.event.ListDataListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import java.awt.event.MouseEvent; @@ -75,6 +77,8 @@ public void init(JXPathDecorator<O> decorator, List<O> universe, List<O> selected) { this.decorator = BeanUIUtil.createDecorator(decorator); + mutator = BeanUIUtil.getMutator(ui.getBean(), ui.getProperty()); + ui.getModel().setUniverse(universe); ui.getModel().setSelected(selected); @@ -84,6 +88,7 @@ universeList.setCellRenderer(new DecoratorListCellRenderer(this.decorator)); selectedList.setCellRenderer(new DecoratorListCellRenderer(this.decorator)); + // When universe list selection model changed, update the add button enabled property universeList.getSelectionModel().addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { @@ -92,6 +97,7 @@ } }); + // When selected list selection model changed, update the add button enabled property selectedList.getSelectionModel().addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { @@ -99,8 +105,28 @@ ui.getModel().setRemoveEnabled(!source.isSelectionEmpty()); } }); + + // When selected list model changed, push back selected list to bean + selectedList.getModel().addListDataListener(new ListDataListener() { + public void intervalAdded(ListDataEvent e) { + fireSelectionUpdate(); + } + + public void intervalRemoved(ListDataEvent e) { + fireSelectionUpdate(); + } + + public void contentsChanged(ListDataEvent e) { + fireSelectionUpdate(); + } + }); } + /** + * When universe list was double clicked, move selected items to selected list. + * + * @param event mouse event + */ public void onUniverseListClicked(MouseEvent event) { JList universeList = ui.getUniverseList(); if (event.getClickCount() == 2) { @@ -110,6 +136,12 @@ } } + + /** + * When selected list was double clicked, move selected items to universe list. + * + * @param event mouse event + */ public void onSelectedListClicked(MouseEvent event) { JList selectedList = ui.getSelectedList(); @@ -121,11 +153,13 @@ } } + /** When add button was hit, move selected items (from universe list) to selected list. */ public void select() { List<O> selection = (List<O>) Arrays.asList(ui.getUniverseList().getSelectedValues()); ui.getModel().addToSelected(selection); } + /** When remove button was hit, move selected items (from selected list) to universe list. */ public void unselect() { List<O> selection = (List<O>) Arrays.asList(ui.getSelectedList().getSelectedValues()); ui.getModel().removeFromSelected(selection); @@ -136,20 +170,10 @@ return; } try { - Method mut = getMutator(); - if (mut != null) { - mut.invoke(ui.getBean(), ui.getModel().getSelected()); - } + mutator.invoke(ui.getBean(), ui.getModel().getSelected()); } catch (Exception e) { throw new RuntimeException(e); } } - /** @return le mutateur a utiliser pour modifier le bean associé. */ - protected Method getMutator() { - if (mutator == null) { - mutator = BeanUIUtil.getMutator(ui.getBean(), ui.getProperty()); - } - return mutator; - } }