Author: sletellier Date: 2012-07-02 17:05:33 +0200 (Mon, 02 Jul 2012) New Revision: 2367 Url: http://nuiton.org/repositories/revision/jaxx/2367 Log: Allow to set own ListSelectorModel Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/ComboToListSelector.jaxx trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/ListSelector.jaxx trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/ListSelectorModel.java trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/ListToListSelector.jaxx Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/ComboToListSelector.jaxx =================================================================== --- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/ComboToListSelector.jaxx 2012-07-02 14:09:34 UTC (rev 2366) +++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/ComboToListSelector.jaxx 2012-07-02 15:05:33 UTC (rev 2367) @@ -22,10 +22,39 @@ #L% --> <ListSelector genericType='B' superGenericType='B'> + + <import> + java.util.Set + java.beans.PropertyChangeEvent + java.beans.PropertyChangeListener + </import> + + <ListSelectorModel id='model' + genericType='B' + javaBean='new ListSelectorModel()'/> + + <script><![CDATA[ + +protected void $afterCompleteSetup() { + + addPropertyChangeListener(PROPERTY_MODEL, new PropertyChangeListener() { + + @Override + public void propertyChange(PropertyChangeEvent evt) { + + Set<String> bindings = $bindings.keySet(); + JAXXUtil.applyDataBinding(ComboToListSelector.this, bindings); + JAXXUtil.processDataBinding( + ComboToListSelector.this, bindings.toArray(new String[bindings.size()])); + } + }); +} +]]></script> + <row> <cell fill='horizontal' weightx='1' anchor="west"> <JComboBox id='from' - model='{fromModel}' + model='{model.getFromModel()}' renderer='{getRenderer()}'/> </cell> <cell anchor='east'> @@ -33,14 +62,14 @@ <JButton id="add" toolTipText='{getAddToolTip()}' actionIcon='add' - enabled='{isAddEnabled()}' - onActionPerformed='add()'/> + enabled='{model.isAddEnabled()}' + onActionPerformed='model.add()'/> <JButton id="remove" toolTipText='{getRemoveToolTip()}' actionIcon='remove' - enabled='{isRemoveEnabled()}' - onActionPerformed='remove()'/> + enabled='{model.isRemoveEnabled()}' + onActionPerformed='model.remove()'/> </JToolBar> </cell> @@ -49,10 +78,10 @@ <cell columns='2' fill='both' weightx='1' weighty='1'> <JScrollPane id='listPane'> <JList id='to' - model='{toModel}' - selectionModel='{toModel}' + model='{model.getToModel()}' + selectionModel='{model.getToModel()}' font-size='11' - onMouseClicked='if (event.getClickCount()==2) { remove(); }' + onMouseClicked='if (event.getClickCount()==2) { model.remove(); }' cellRenderer='{getRenderer()}'/> </JScrollPane> </cell> Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/ListSelector.jaxx =================================================================== --- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/ListSelector.jaxx 2012-07-02 14:09:34 UTC (rev 2366) +++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/ListSelector.jaxx 2012-07-02 15:05:33 UTC (rev 2367) @@ -36,6 +36,7 @@ jaxx.runtime.swing.model.GenericListModel jaxx.runtime.swing.model.GenericListListener java.util.Collection + java.util.Set </import> <String id='addToolTip' javaBean='"+"'/> @@ -46,92 +47,32 @@ genericType='B' javaBean='null'/> - <GenericListModel id='fromModel' - elements='{model.getValues()}' - genericType='B'/> - - <GenericListModel id='toModel' - elements='{model.getSelectedValues()}' - genericType='B'/> - - <Boolean id='addEnabled' javaBean='Boolean.FALSE'/> - <Boolean id='removeEnabled' javaBean='Boolean.FALSE'/> - <ListCellRenderer id='renderer' javaBean='new DefaultListCellRenderer()'/> <script><![CDATA[ -protected void $afterCompleteSetup() { - toModel.addPropertyChangeListener(GenericListModel.PROPERTY_SELECTED_VALUE, new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - setRemoveEnabled(toModel.hasSelectedIndex()); - } - }); - fromModel.addPropertyChangeListener(GenericListModel.PROPERTY_SELECTED_VALUE, new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - setAddEnabled(fromModel.hasSelectedIndex()); - } - }); -} - -public void addValues(Collection<B> values) { - toModel.removeElements(values); - fromModel.removeElements(values); - fromModel.addElements(values); -} - -public void removeValues(Collection<B> values) { - toModel.removeElements(values); - fromModel.removeElements(values); -} - public void setValues(Collection<B> values) { - toModel.clearElements(); - fromModel.setElements(values); + model.setValues(values); } public Collection<B> getValues() { - return fromModel.getElements(); + return model.getValues(); } public void setSelectedValues(Collection<B> selectedValues) { - fromModel.removeElements(selectedValues); - toModel.setElements(selectedValues); + model.setSelectedValues(selectedValues); } public Collection<B> getSelectedValues() { - return toModel.getElements(); + return model.getSelectedValues(); } -public void add() { - Collection<B> selectedValues = moveSelect(fromModel, toModel); - if (model != null) { - model.add(selectedValues); - } -} - -public void remove() { - Collection<B> selectedValues = moveSelect(toModel, fromModel); - if (model != null) { - model.remove(selectedValues); - } -} - -protected Collection<B> moveSelect(GenericListModel<B> from, GenericListModel<B> to) { - Collection<B> selectedValues = Lists.newArrayList(from.getSelectedValues()); - from.removeElements(selectedValues); - to.addElements(selectedValues); - return selectedValues; -} - public void addGenericListListener(GenericListListener l) { - toModel.addGenericListListener(l); + model.addGenericListListener(l); } public void removeGenericListListener(GenericListListener l) { - toModel.removeGenericListListener(l); + model.removeGenericListListener(l); } ]]> </script> Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/ListSelectorModel.java =================================================================== --- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/ListSelectorModel.java 2012-07-02 14:09:34 UTC (rev 2366) +++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/ListSelectorModel.java 2012-07-02 15:05:33 UTC (rev 2367) @@ -23,47 +23,144 @@ */ package jaxx.runtime.swing; +import com.google.common.collect.Lists; +import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.util.Collection; +import jaxx.runtime.swing.model.GenericListListener; +import jaxx.runtime.swing.model.GenericListModel; /** * @author sletellier <letellier@codelutin.com> */ -public abstract class ListSelectorModel<B> { +public class ListSelectorModel<B> { protected final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + public static final String PROPERTY_ADD_ENABLED = "addEnabled"; + public static final String PROPERTY_REMOVE_ENABLED = "removeEnabled"; + public static final String PROPERTY_SELECTED_VALUES = "selectedValues"; public static final String PROPERTY_VALUES = "values"; - protected Collection<B> values; - protected Collection<B> selectedValues; + protected boolean addEnabled; + protected boolean removeEnabled; + protected GenericListModel<B> fromModel; + protected GenericListModel<B> toModel; + + protected ListSelectorModel() { + + fromModel = new GenericListModel<B>(); + fromModel.addPropertyChangeListener(GenericListModel.PROPERTY_SELECTED_VALUE, new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + setAddEnabled(fromModel.hasSelectedIndex()); + } + }); + + toModel = new GenericListModel<B>(); + toModel.addPropertyChangeListener(GenericListModel.PROPERTY_SELECTED_VALUE, new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + setRemoveEnabled(toModel.hasSelectedIndex()); + } + }); + } + + public boolean isAddEnabled() { + return addEnabled; + } + + public void setAddEnabled(boolean addEnabled) { + boolean oldValue = isAddEnabled(); + this.addEnabled = addEnabled; + firePropertyChange(PROPERTY_ADD_ENABLED, oldValue, addEnabled); + } + + public boolean isRemoveEnabled() { + return removeEnabled; + } + + public void setRemoveEnabled(boolean removeEnabled) { + boolean oldValue = isRemoveEnabled(); + this.removeEnabled = removeEnabled; + firePropertyChange(PROPERTY_REMOVE_ENABLED, oldValue, removeEnabled); + } + + public GenericListModel<B> getFromModel() { + return fromModel; + } + + public GenericListModel<B> getToModel() { + return toModel; + } + public Collection<B> getValues() { - return values; + return fromModel.getElements(); } public void setValues(Collection<B> values) { Collection<B> oldValues = getValues(); - this.values = values; + toModel.clearElements(); + fromModel.setElements(values); firePropertyChange(PROPERTY_VALUES, oldValues, values); } + public void addValues(Collection<B> values) { + Collection<B> oldValues = getValues(); + toModel.removeElements(values); + fromModel.removeElements(values); + fromModel.addElements(values); + firePropertyChange(PROPERTY_VALUES, oldValues, values); + } + + public void removeValues(Collection<B> values) { + Collection<B> oldValues = getValues(); + toModel.removeElements(values); + fromModel.removeElements(values); + firePropertyChange(PROPERTY_VALUES, oldValues, values); + } + public Collection<B> getSelectedValues() { - return selectedValues; + return toModel.getElements(); } public void setSelectedValues(Collection<B> selectedValues) { Collection<B> oldValue = getSelectedValues(); - this.selectedValues = selectedValues; + fromModel.removeElements(selectedValues); + toModel.removeElements(selectedValues); + toModel.setElements(selectedValues); firePropertyChange(PROPERTY_SELECTED_VALUES, oldValue, selectedValues); } - public abstract void add(Collection<B> values); + public void add() { + Collection<B> oldValues = getValues(); + Collection<B> oldSelectedValue = getSelectedValues(); + moveSelect(fromModel, toModel); + firePropertyChange(PROPERTY_VALUES, oldValues, getValues()); + firePropertyChange(PROPERTY_SELECTED_VALUES, oldSelectedValue, getSelectedValues()); + } - public abstract void remove(Collection<B> values); + public void remove() { + moveSelect(toModel, fromModel); + } + protected void moveSelect(GenericListModel<B> from, GenericListModel<B> to) { + Collection<B> selectedValues = Lists.newArrayList(from.getSelectedValues()); + from.removeElements(selectedValues); + to.addElements(selectedValues); + } + + public void addGenericListListener(GenericListListener l) { + toModel.addGenericListListener(l); + } + + public void removeGenericListListener(GenericListListener l) { + toModel.removeGenericListListener(l); + } + public void addPropertyChangeListener(PropertyChangeListener listener) { pcs.addPropertyChangeListener(listener); } Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/ListToListSelector.jaxx =================================================================== --- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/ListToListSelector.jaxx 2012-07-02 14:09:34 UTC (rev 2366) +++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/ListToListSelector.jaxx 2012-07-02 15:05:33 UTC (rev 2367) @@ -24,14 +24,38 @@ <ListSelector genericType='B' superGenericType='B'> <import> javax.swing.SwingConstants + java.util.Set + java.beans.PropertyChangeEvent + java.beans.PropertyChangeListener </import> + <script><![CDATA[ + +protected void $afterCompleteSetup() { + + addPropertyChangeListener(PROPERTY_MODEL, new PropertyChangeListener() { + + @Override + public void propertyChange(PropertyChangeEvent evt) { + + Set<String> bindings = $bindings.keySet(); + JAXXUtil.applyDataBinding(ListToListSelector.this, bindings); + JAXXUtil.processDataBinding( + ListToListSelector.this, bindings.toArray(new String[bindings.size()])); + } + }); +} +]]></script> + + <ListSelectorModel id='model' + genericType='B' + initializer='new ListSelectorModel()'/> <row> <cell fill='both' weightx='0.5' weighty='1'> <JList id='from' - model='{fromModel}' - selectionModel='{fromModel}' - onMouseClicked='if (event.getClickCount()==2) { add(); }' + model='{model.getFromModel()}' + selectionModel='{model.getFromModel()}' + onMouseClicked='if (event.getClickCount()==2) { model.add(); }' cellRenderer='{getRenderer()}'/> </cell> <cell anchor='north'> @@ -41,22 +65,22 @@ <JButton id="add" toolTipText='{getAddToolTip()}' actionIcon='select' - enabled='{isAddEnabled()}' - onActionPerformed='add()'/> + enabled='{model.isAddEnabled()}' + onActionPerformed='model.add()'/> <JButton id="remove" toolTipText='{getRemoveToolTip()}' actionIcon='unselect' - enabled='{isRemoveEnabled()}' - onActionPerformed='remove()'/> + enabled='{model.isRemoveEnabled()}' + onActionPerformed='model.remove()'/> </JToolBar> </cell> <cell fill='both' weightx='0.5' weighty='1'> <JList id='to' - model='{toModel}' - selectionModel='{toModel}' - onMouseClicked='if (event.getClickCount()==2) { remove(); }' + model='{model.getToModel()}' + selectionModel='{model.getToModel()}' + onMouseClicked='if (event.getClickCount()==2) { model.remove(); }' cellRenderer='{getRenderer()}'/> </cell> </row>
participants (1)
-
sletellier@users.nuiton.org