Jaxx-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
December 2012
- 2 participants
- 23 discussions
r2529 - trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean
by kmorin@users.nuiton.org 11 Dec '12
by kmorin@users.nuiton.org 11 Dec '12
11 Dec '12
Author: kmorin
Date: 2012-12-11 17:51:04 +0100 (Tue, 11 Dec 2012)
New Revision: 2529
Url: http://nuiton.org/projects/jaxx/repository/revisions/2529
Log:
refs #2474 Create a double list widget
Modified:
trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleList.jaxx
trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListHandler.java
trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListModel.java
Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleList.jaxx
===================================================================
--- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleList.jaxx 2012-12-10 17:58:51 UTC (rev 2528)
+++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleList.jaxx 2012-12-11 16:51:04 UTC (rev 2529)
@@ -11,16 +11,20 @@
<!-- label -->
<String id='labelText' javaBean='null'/>
+ <!-- model -->
<BeanDoubleListModel id='model' genericType='O'
universeModel='{universeList.getModel()}'
selectedModel='{selectedList.getModel()}'/>
-
+
+ <!-- handler -->
<BeanDoubleListHandler id='handler' genericType='O' constructorParams='this'/>
<row weightx='1' fill='both'>
<cell weightx='0.5' weighty='1' fill='both'>
- <JScrollPane>
+ <JScrollPane columnHeaderView="{universeListHeader}">
+ <!-- List of all the remaining available elements -->
<JList id='universeList' model='{new DefaultListModel()}'/>
+<!-- <BeanListHeader id='universeListHeader' genericType='O' list='{universeList}'/>-->
</JScrollPane>
</cell>
<cell weighty='1'>
@@ -30,25 +34,20 @@
</VBox>
</cell>
<cell weightx='0.5' weighty='1' fill='both'>
- <JScrollPane>
+ <JScrollPane columnHeaderView="{selectedListHeader}">
+ <!-- List of the selected elements -->
<JList id='selectedList' model='{new DefaultListModel()}'/>
+<!-- <BeanListHeader id='selectedListHeader' genericType='O' list='{selectedList}'/>-->
</JScrollPane>
</cell>
</row>
-
-<!-- <BeanListHeader id='doubleListHeader' genericType='O' list='{firstList}'/>-->
-
<script><![CDATA[
-public void init(JXPathDecorator<O> decorator, List<O> data) {
- handler.init(decorator, data);
+public void init(JXPathDecorator<O> decorator, List<O> universe, List<O> selected) {
+ handler.init(decorator, universe, selected);
}
-public O getSelectedValue() {
- return handler.getSelectedValue();
-}
-
]]></script>
</Table>
\ No newline at end of file
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-10 17:58:51 UTC (rev 2528)
+++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListHandler.java 2012-12-11 16:51:04 UTC (rev 2529)
@@ -4,8 +4,6 @@
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-import javax.swing.event.ListSelectionEvent;
import org.nuiton.util.decorator.JXPathDecorator;
import org.nuiton.util.decorator.MultiJXPathDecorator;
import jaxx.runtime.swing.renderer.DecoratorListCellRenderer;
@@ -15,86 +13,71 @@
import javax.swing.JList;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import javax.swing.DefaultListModel;
-import javax.swing.ListModel;
-import javax.swing.event.ListSelectionListener;
-import jaxx.runtime.SwingUtil;
/**
- * Le handler d'un {@link BeanDoubleList}.
+ * The handler of a {@link BeanDoubleList}.
* <p/>
*
* @author kmorin <morin(a)codelutin.com>
- * @param <O> le type des objet contenus dans le modèle du composant.
+ * @param <O> the type of the objects contained in the list.
* @see BeanDoubleList
* @since 2.5.8
*/
public class BeanDoubleListHandler<O> implements PropertyChangeListener {
- public static final Log log = LogFactory.getLog(BeanDoubleListHandler.class);
+ private static final Log log = LogFactory.getLog(BeanDoubleListHandler.class);
- /** ui if the handler */
+ /** ui of the handler */
protected BeanDoubleList<O> ui;
/** the decorator of data */
protected MultiJXPathDecorator<O> decorator;
- /** flag to mark when handler was init (it can be init only once). */
- protected boolean init;
-
public BeanDoubleListHandler(BeanDoubleList<O> ui) {
this.ui = ui;
}
/**
- * Initialise le handler de l'ui
- *
- * @param decorator le decorateur a utiliser
- * @param data la liste des données a gérer
+ * Initializes the handler of the UI
+ * @param decorator the decorator to use to display the data nicely
+ * @param universe the list of all the available items
+ * @param selected the list of selected items
*/
- public void init(JXPathDecorator<O> decorator, List<O> data) {
- if (init) {
- throw new IllegalStateException("can not init the handler twice");
- }
- init = true;
-
- ui.getModel().setUniverse(data);
-
-// // set datas
-// ui.getDoubleListHeader().setBeanType(ui.getBeanType());
-// ui.getDoubleListHeader().setLabelText(ui.getLabelText());
-// ui.getDoubleListHeader().init(decorator, data);
-
-// // list could have changed and the complex binding is not registred...
-// ui.removeDataBinding(BeanDoubleListHandler.BINDING_RESET_SELECTION_ENABLED);
-// ui.applyDataBinding(BeanDoubleListHandler.BINDING_RESET_SELECTION_ENABLED);
-
+ public void init(JXPathDecorator<O> decorator, List<O> universe, List<O> selected) {
this.decorator = BeanUIUtil.createDecorator(decorator);
-//
- // init combobox renderer base on given decorator
+
+ initModel(universe, selected);
+
final JList universeList = ui.getUniverseList();
universeList.setCellRenderer(new DecoratorListCellRenderer(this.decorator));
- SwingUtil.fillList(universeList, data, null);
-
final JList selectedList = ui.getSelectedList();
selectedList.setCellRenderer(new DecoratorListCellRenderer(this.decorator));
-// // build popup
-// popupHandler.preparePopup(ui.getSelectedToolTipText(),
-// ui.getNotSelectedToolTipText(),
-// ui.getI18nPrefix(),
-// ui.getPopupTitleText(),
-// indexes,
-// ui.getPopupSeparator(),
-// ui.getPopupLabel(),
-// ui.getSortUp(),
-// ui.getSortDown(),
-// this.decorator);
-//
+ initListeners();
+ ui.addPropertyChangeListener(this);
+
+ }
+
+ /**
+ * Initialize the model of the {@link BeanDoubleList}
+ * @param universe the list of all the available items
+ * @param selected the selected items
+ */
+ protected void initModel(List<O> universe, List<O> selected) {
+ ui.getModel().setUniverse(universe);
+ ui.getModel().setSelected(selected);
+ }
+
+ /**
+ * Initializes the listeners.
+ */
+ protected void initListeners() {
+ final JList universeList = ui.getUniverseList();
+ final JList selectedList = ui.getSelectedList();
+
universeList.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent event) {
@@ -132,26 +115,10 @@
ui.getModel().removeFromSelected(selection);
}
});
-
- ui.addPropertyChangeListener(this);
-
}
-
- protected void switchElement(MouseEvent event, JList container, JList receiver) {
- int index = container.locationToIndex(event.getPoint());
- DefaultListModel containerModel = (DefaultListModel)container.getModel();
- Object item = containerModel.remove(index);
- DefaultListModel receiverModel = (DefaultListModel)receiver.getModel();
- receiverModel.addElement(item);
- }
-
@Override
public void propertyChange(PropertyChangeEvent evt) {
}
- public O getSelectedValue() {
- JList list = ui.getUniverseList();
- return list == null ? null : (O) list.getSelectedValue();
- }
}
Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListModel.java
===================================================================
--- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListModel.java 2012-12-10 17:58:51 UTC (rev 2528)
+++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListModel.java 2012-12-11 16:51:04 UTC (rev 2529)
@@ -4,36 +4,80 @@
import java.util.List;
import javax.swing.DefaultListModel;
import javax.swing.ListModel;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
/**
- * The model of the BeanDoubleList widget
+ * The model of the {@link BeanDoubleList} widget
+ * @param <O> the type of the object in the list
* @author kmorin <morin(a)codelutin.com>
- * @since 2.5.8
+ * @see BeanDoubleList
+ * @since 2.5.8
*/
public class BeanDoubleListModel<O> {
+ private static final Log log = LogFactory.getLog(BeanDoubleListModel.class);
+
+ /** List of all the available items */
protected List<O> universe = new ArrayList<O>();
+ /** Model containing the remaining available items */
protected ListModel universeModel = new DefaultListModel();
+ /** List of the selected items */
protected List<O> selected = new ArrayList<O>();
+ /** Model containing the selected items */
protected ListModel selectedModel = new DefaultListModel();
-
+
+ /**
+ * To get the selected items.
+ * @return a list of O
+ */
public List<O> getSelected() {
return selected;
}
+ /**
+ * Sets the list of selected items.
+ * It fills the model of the list of the selected items with these items
+ * and removes them from the model of list of the universe.
+ * @param selected a list of O
+ */
public void setSelected(List<O> selected) {
- this.selected = selected;
+ if (selected == null) {
+ selected = new ArrayList<O>();
+ }
+ this.selected = new ArrayList<O>(selected);
+ ((DefaultListModel)selectedModel).clear();
+ for (O item : selected) {
+ ((DefaultListModel)selectedModel).addElement(item);
+ ((DefaultListModel)universeModel).removeElement(item);
+ }
}
+ /**
+ * To get all the available items.
+ * @return a list of O
+ */
public List<O> getUniverse() {
return universe;
}
+ /**
+ * Sets the list of the available items.
+ * It fills the model of the universe list with these items.
+ * @param universe a list of O
+ */
public void setUniverse(List<O> universe) {
- this.universe = universe;
+ if (universe == null) {
+ universe = new ArrayList<O>();
+ }
+ this.universe = new ArrayList<O>(universe);
+ ((DefaultListModel)universeModel).clear();
+ for (O item : universe) {
+ ((DefaultListModel)universeModel).addElement(item);
+ }
}
public ListModel getSelectedModel() {
@@ -52,12 +96,20 @@
this.universeModel = universeModel;
}
+ /**
+ * Adds an item to the selected items.
+ * @param item the item to select
+ */
public void addToSelected(O item) {
selected.add(item);
((DefaultListModel)selectedModel).addElement(item);
((DefaultListModel)universeModel).removeElement(item);
}
+ /**
+ * Adds a list of items to the selected items.
+ * @param items the list of the items to select
+ */
public void addToSelected(List<O> items) {
selected.addAll(items);
for (O item : items) {
@@ -66,18 +118,56 @@
}
}
+ /**
+ * Removes an item from the selected items.
+ * @param item the item to unselect
+ */
public void removeFromSelected(O item) {
selected.remove(item);
+ log.info(selectedModel.getClass());
((DefaultListModel)selectedModel).removeElement(item);
- ((DefaultListModel)universeModel).addElement(item);
+ addToUniverseList(item);
}
- public void removeFromSelected(List<O> items){
+ /**
+ * Removes a list of items from the list of selected items.
+ * @param items the list of the items to unselect
+ */
+ public void removeFromSelected(List<O> items) {
selected.removeAll(items);
for (O item : items) {
((DefaultListModel)selectedModel).removeElement(item);
- ((DefaultListModel)universeModel).addElement(item);
+ addToUniverseList(item);
}
}
+ /**
+ * Adds an item to the available items list at the right index
+ * to keep always the same order.
+ * @param item the item to add to the universe list
+ */
+ protected void addToUniverseList(O item) {
+ DefaultListModel universeDefaultListModel = (DefaultListModel)universeModel;
+ // the maximum index where we should insert the item is its index
+ // in the list of all the available items
+ int index = universe.indexOf(item);
+ // if the index is upper than the size of the list of the remaining available items,
+ // get the size of this list
+ int insertionIndex = Math.min(index, universeDefaultListModel.getSize());
+
+ // we decrease the index to insert until we meet an item whose index
+ // in the list of all the available index is lower than the one of the item
+ // we want to insert
+ while (insertionIndex > 0) {
+ O o = (O)universeDefaultListModel.get(--insertionIndex);
+ int oIndex = universe.indexOf(o);
+ if (oIndex < index) {
+ insertionIndex++;
+ break;
+ }
+ };
+
+ universeDefaultListModel.add(insertionIndex, item);
+ }
+
}
1
0
r2528 - in trunk/jaxx-demo/src/main/java/jaxx/demo: component/jaxx/editor tree
by kmorin@users.nuiton.org 10 Dec '12
by kmorin@users.nuiton.org 10 Dec '12
10 Dec '12
Author: kmorin
Date: 2012-12-10 18:58:51 +0100 (Mon, 10 Dec 2012)
New Revision: 2528
Url: http://nuiton.org/projects/jaxx/repository/revisions/2528
Log:
refs feature #2474 Create a double list widget
Added:
trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/BeanDoubleListDemo.jaxx
trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/BeanDoubleListDemoHandler.java
Modified:
trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoDataProvider.java
Added: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/BeanDoubleListDemo.jaxx
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/BeanDoubleListDemo.jaxx (rev 0)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/BeanDoubleListDemo.jaxx 2012-12-10 17:58:51 UTC (rev 2528)
@@ -0,0 +1,26 @@
+<jaxx.demo.DemoPanel layout='{new BorderLayout()}'>
+
+ <import>
+ jaxx.demo.entities.People
+ </import>
+
+ <BeanDoubleListDemoHandler id='handler' constructorParams='this'/>
+
+ <Table fill='both'>
+ <row>
+ <cell weighty='1' weightx='1'>
+ <jaxx.runtime.swing.editor.bean.BeanDoubleList id='doubleList'
+ beanType='{People.class}'/>
+ </cell>
+ </row>
+ </Table>
+
+<script><![CDATA[
+
+protected void $afterCompleteSetup() {
+ handler.init();
+}
+
+]]></script>
+
+</jaxx.demo.DemoPanel>
\ No newline at end of file
Added: trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/BeanDoubleListDemoHandler.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/BeanDoubleListDemoHandler.java (rev 0)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/component/jaxx/editor/BeanDoubleListDemoHandler.java 2012-12-10 17:58:51 UTC (rev 2528)
@@ -0,0 +1,33 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package jaxx.demo.component.jaxx.editor;
+
+import java.util.ArrayList;
+import java.util.List;
+import jaxx.demo.entities.DemoDataProvider;
+import jaxx.demo.entities.DemoDecoratorProvider;
+import jaxx.demo.entities.People;
+import jaxx.runtime.SwingUtil;
+import org.nuiton.util.decorator.JXPathDecorator;
+
+/**
+ *
+ * @author kmorin
+ */
+public class BeanDoubleListDemoHandler {
+
+ private BeanDoubleListDemo ui;
+
+ public BeanDoubleListDemoHandler(BeanDoubleListDemo ui) {
+ this.ui = ui;
+ }
+
+ public void init() {
+ List<People> data = new DemoDataProvider().getPeoples();
+ JXPathDecorator<People> decorator = (JXPathDecorator<People>) new DemoDecoratorProvider().getDecoratorByType(People.class);
+ this.ui.getDoubleList().init(decorator, data);
+ }
+
+}
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoDataProvider.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoDataProvider.java 2012-12-10 17:55:53 UTC (rev 2527)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoDataProvider.java 2012-12-10 17:58:51 UTC (rev 2528)
@@ -70,6 +70,7 @@
import java.util.List;
import java.util.Map;
+import jaxx.demo.component.jaxx.editor.BeanDoubleListDemo;
import static org.nuiton.i18n.I18n.n_;
/**
@@ -159,7 +160,8 @@
I18nEditorDemo.class,
DatePickerDemo.class,
FileEditorDemo.class,
- ListSelectorDemo.class
+ ListSelectorDemo.class,
+ BeanDoubleListDemo.class
);
addMapping(n_("jaxxdemo.feature"),
1
0
r2527 - in trunk/jaxx-widgets/src/main: java/jaxx/runtime/swing/editor/bean resources/i18n
by kmorin@users.nuiton.org 10 Dec '12
by kmorin@users.nuiton.org 10 Dec '12
10 Dec '12
Author: kmorin
Date: 2012-12-10 18:55:53 +0100 (Mon, 10 Dec 2012)
New Revision: 2527
Url: http://nuiton.org/projects/jaxx/repository/revisions/2527
Log:
refs feature #2474 Create a double list widget
Added:
trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleList.jaxx
trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListHandler.java
trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListModel.java
Modified:
trunk/jaxx-widgets/src/main/resources/i18n/jaxx-widgets_en_GB.properties
trunk/jaxx-widgets/src/main/resources/i18n/jaxx-widgets_es_ES.properties
trunk/jaxx-widgets/src/main/resources/i18n/jaxx-widgets_fr_FR.properties
Added: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleList.jaxx
===================================================================
--- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleList.jaxx (rev 0)
+++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleList.jaxx 2012-12-10 17:55:53 UTC (rev 2527)
@@ -0,0 +1,54 @@
+<Table genericType='O'>
+
+<import>
+ org.nuiton.util.decorator.JXPathDecorator
+ javax.swing.DefaultListModel
+</import>
+
+ <!-- bean property -->
+ <Class genericType='O' id='beanType' javaBean='null'/>
+
+ <!-- label -->
+ <String id='labelText' javaBean='null'/>
+
+ <BeanDoubleListModel id='model' genericType='O'
+ universeModel='{universeList.getModel()}'
+ selectedModel='{selectedList.getModel()}'/>
+
+ <BeanDoubleListHandler id='handler' genericType='O' constructorParams='this'/>
+
+ <row weightx='1' fill='both'>
+ <cell weightx='0.5' weighty='1' fill='both'>
+ <JScrollPane>
+ <JList id='universeList' model='{new DefaultListModel()}'/>
+ </JScrollPane>
+ </cell>
+ <cell weighty='1'>
+ <VBox>
+ <JButton id='addButton' text="beandoublelist.button.add"/>
+ <JButton id='removeButton' text="beandoublelist.button.remove"/>
+ </VBox>
+ </cell>
+ <cell weightx='0.5' weighty='1' fill='both'>
+ <JScrollPane>
+ <JList id='selectedList' model='{new DefaultListModel()}'/>
+ </JScrollPane>
+ </cell>
+ </row>
+
+
+<!-- <BeanListHeader id='doubleListHeader' genericType='O' list='{firstList}'/>-->
+
+<script><![CDATA[
+
+public void init(JXPathDecorator<O> decorator, List<O> data) {
+ handler.init(decorator, data);
+}
+
+public O getSelectedValue() {
+ return handler.getSelectedValue();
+}
+
+]]></script>
+
+</Table>
\ No newline at end of file
Copied: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListHandler.java (from rev 2526, trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanListHeaderHandler.java)
===================================================================
--- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListHandler.java (rev 0)
+++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListHandler.java 2012-12-10 17:55:53 UTC (rev 2527)
@@ -0,0 +1,157 @@
+package jaxx.runtime.swing.editor.bean;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import javax.swing.event.ListSelectionEvent;
+import org.nuiton.util.decorator.JXPathDecorator;
+import org.nuiton.util.decorator.MultiJXPathDecorator;
+import jaxx.runtime.swing.renderer.DecoratorListCellRenderer;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.swing.JList;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import javax.swing.DefaultListModel;
+import javax.swing.ListModel;
+import javax.swing.event.ListSelectionListener;
+import jaxx.runtime.SwingUtil;
+
+/**
+ * Le handler d'un {@link BeanDoubleList}.
+ * <p/>
+ *
+ * @author kmorin <morin(a)codelutin.com>
+ * @param <O> le type des objet contenus dans le modèle du composant.
+ * @see BeanDoubleList
+ * @since 2.5.8
+ */
+public class BeanDoubleListHandler<O> implements PropertyChangeListener {
+
+ public static final Log log = LogFactory.getLog(BeanDoubleListHandler.class);
+
+ /** ui if the handler */
+ protected BeanDoubleList<O> ui;
+
+ /** the decorator of data */
+ protected MultiJXPathDecorator<O> decorator;
+
+ /** flag to mark when handler was init (it can be init only once). */
+ protected boolean init;
+
+ public BeanDoubleListHandler(BeanDoubleList<O> ui) {
+ this.ui = ui;
+ }
+
+ /**
+ * Initialise le handler de l'ui
+ *
+ * @param decorator le decorateur a utiliser
+ * @param data la liste des données a gérer
+ */
+ public void init(JXPathDecorator<O> decorator, List<O> data) {
+ if (init) {
+ throw new IllegalStateException("can not init the handler twice");
+ }
+ init = true;
+
+ ui.getModel().setUniverse(data);
+
+// // set datas
+// ui.getDoubleListHeader().setBeanType(ui.getBeanType());
+// ui.getDoubleListHeader().setLabelText(ui.getLabelText());
+// ui.getDoubleListHeader().init(decorator, data);
+
+// // list could have changed and the complex binding is not registred...
+// ui.removeDataBinding(BeanDoubleListHandler.BINDING_RESET_SELECTION_ENABLED);
+// ui.applyDataBinding(BeanDoubleListHandler.BINDING_RESET_SELECTION_ENABLED);
+
+ this.decorator = BeanUIUtil.createDecorator(decorator);
+//
+ // init combobox renderer base on given decorator
+ final JList universeList = ui.getUniverseList();
+ universeList.setCellRenderer(new DecoratorListCellRenderer(this.decorator));
+ SwingUtil.fillList(universeList, data, null);
+
+ final JList selectedList = ui.getSelectedList();
+ selectedList.setCellRenderer(new DecoratorListCellRenderer(this.decorator));
+
+// // build popup
+// popupHandler.preparePopup(ui.getSelectedToolTipText(),
+// ui.getNotSelectedToolTipText(),
+// ui.getI18nPrefix(),
+// ui.getPopupTitleText(),
+// indexes,
+// ui.getPopupSeparator(),
+// ui.getPopupLabel(),
+// ui.getSortUp(),
+// ui.getSortDown(),
+// this.decorator);
+//
+
+ universeList.addMouseListener(new MouseAdapter() {
+
+ public void mouseClicked(MouseEvent event) {
+ if (event.getClickCount() == 2) {
+ int index = universeList.locationToIndex(event.getPoint());
+ O item = (O) universeList.getModel().getElementAt(index);
+ ui.getModel().addToSelected(item);
+ }
+ }
+ });
+
+ selectedList.addMouseListener(new MouseAdapter() {
+
+ public void mouseClicked(MouseEvent event) {
+ if (event.getClickCount() == 2) {
+ int index = selectedList.locationToIndex(event.getPoint());
+ O item = (O) selectedList.getModel().getElementAt(index);
+ ui.getModel().removeFromSelected(item);
+ }
+ }
+ });
+
+ ui.getAddButton().addActionListener(new ActionListener() {
+
+ public void actionPerformed(ActionEvent e) {
+ List<O> selection = (List<O>) Arrays.asList(universeList.getSelectedValues());
+ ui.getModel().addToSelected(selection);
+ }
+ });
+
+ ui.getRemoveButton().addActionListener(new ActionListener() {
+
+ public void actionPerformed(ActionEvent e) {
+ List<O> selection = (List<O>) Arrays.asList(selectedList.getSelectedValues());
+ ui.getModel().removeFromSelected(selection);
+ }
+ });
+
+ ui.addPropertyChangeListener(this);
+
+ }
+
+ protected void switchElement(MouseEvent event, JList container, JList receiver) {
+ int index = container.locationToIndex(event.getPoint());
+ DefaultListModel containerModel = (DefaultListModel)container.getModel();
+ Object item = containerModel.remove(index);
+
+ DefaultListModel receiverModel = (DefaultListModel)receiver.getModel();
+ receiverModel.addElement(item);
+ }
+
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ }
+
+ public O getSelectedValue() {
+ JList list = ui.getUniverseList();
+ return list == null ? null : (O) list.getSelectedValue();
+ }
+}
Added: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListModel.java
===================================================================
--- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListModel.java (rev 0)
+++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListModel.java 2012-12-10 17:55:53 UTC (rev 2527)
@@ -0,0 +1,83 @@
+package jaxx.runtime.swing.editor.bean;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.swing.DefaultListModel;
+import javax.swing.ListModel;
+
+/**
+ * The model of the BeanDoubleList widget
+ * @author kmorin <morin(a)codelutin.com>
+ * @since 2.5.8
+ */
+public class BeanDoubleListModel<O> {
+
+ protected List<O> universe = new ArrayList<O>();
+
+ protected ListModel universeModel = new DefaultListModel();
+
+ protected List<O> selected = new ArrayList<O>();
+
+ protected ListModel selectedModel = new DefaultListModel();
+
+ public List<O> getSelected() {
+ return selected;
+ }
+
+ public void setSelected(List<O> selected) {
+ this.selected = selected;
+ }
+
+ public List<O> getUniverse() {
+ return universe;
+ }
+
+ public void setUniverse(List<O> universe) {
+ this.universe = universe;
+ }
+
+ public ListModel getSelectedModel() {
+ return selectedModel;
+ }
+
+ public void setSelectedModel(ListModel selectedModel) {
+ this.selectedModel = selectedModel;
+ }
+
+ public ListModel getUniverseModel() {
+ return universeModel;
+ }
+
+ public void setUniverseModel(ListModel universeModel) {
+ this.universeModel = universeModel;
+ }
+
+ public void addToSelected(O item) {
+ selected.add(item);
+ ((DefaultListModel)selectedModel).addElement(item);
+ ((DefaultListModel)universeModel).removeElement(item);
+ }
+
+ public void addToSelected(List<O> items) {
+ selected.addAll(items);
+ for (O item : items) {
+ ((DefaultListModel)selectedModel).addElement(item);
+ ((DefaultListModel)universeModel).removeElement(item);
+ }
+ }
+
+ public void removeFromSelected(O item) {
+ selected.remove(item);
+ ((DefaultListModel)selectedModel).removeElement(item);
+ ((DefaultListModel)universeModel).addElement(item);
+ }
+
+ public void removeFromSelected(List<O> items){
+ selected.removeAll(items);
+ for (O item : items) {
+ ((DefaultListModel)selectedModel).removeElement(item);
+ ((DefaultListModel)universeModel).addElement(item);
+ }
+ }
+
+}
Modified: trunk/jaxx-widgets/src/main/resources/i18n/jaxx-widgets_en_GB.properties
===================================================================
--- trunk/jaxx-widgets/src/main/resources/i18n/jaxx-widgets_en_GB.properties 2012-11-23 10:19:07 UTC (rev 2526)
+++ trunk/jaxx-widgets/src/main/resources/i18n/jaxx-widgets_en_GB.properties 2012-12-10 17:55:53 UTC (rev 2527)
@@ -16,6 +16,8 @@
beancombobox.action.reset.tip=Reset the selected value
beancombobox.action.sort.tip=Change the sorted property
beancombobox.popup.title=Change the sorted property
+beandoublelist.button.add=Add
+beandoublelist.button.remove=Remove
beanlist.action.reset.tip=Reset the selected selection
beanlist.action.sort.tip=Change the sorted property
beanlist.popup.title=Change the sorted property
Modified: trunk/jaxx-widgets/src/main/resources/i18n/jaxx-widgets_es_ES.properties
===================================================================
--- trunk/jaxx-widgets/src/main/resources/i18n/jaxx-widgets_es_ES.properties 2012-11-23 10:19:07 UTC (rev 2526)
+++ trunk/jaxx-widgets/src/main/resources/i18n/jaxx-widgets_es_ES.properties 2012-12-10 17:55:53 UTC (rev 2527)
@@ -3,64 +3,66 @@
aboutframe.ok=OK
aboutframe.thirdparty=Tierce partie
bean.popup.label=Objeto '%1$s'
-bean.sort.down=Calsificación decreciente
-bean.sort.down.tip=Clasificación decreciente actualmente utilizada
-bean.sort.down.toSelect.tip=Clic para clasificar según orden decreciente
-bean.sort.label=Orden de clasificación
-bean.sort.off=Click para activar la clasificación de la propiedad '%1$s'
-bean.sort.on=Clasificación realizada sobre la propiedad '%1$s'
-bean.sort.up=Clasificación creciente
-bean.sort.up.tip=Clasificación creciente actualmente utilizada
-bean.sort.up.toSelect.tip=Clic para clasificar según orden creciente
+bean.sort.down=Calsificaci\u00c3\u00b3n decreciente
+bean.sort.down.tip=Clasificaci\u00c3\u00b3n decreciente actualmente utilizada
+bean.sort.down.toSelect.tip=Clic para clasificar seg\u00c3\u00ban orden decreciente
+bean.sort.label=Orden de clasificaci\u00c3\u00b3n
+bean.sort.off=Click para activar la clasificaci\u00c3\u00b3n de la propiedad '%1$s'
+bean.sort.on=Clasificaci\u00c3\u00b3n realizada sobre la propiedad '%1$s'
+bean.sort.up=Clasificaci\u00c3\u00b3n creciente
+bean.sort.up.tip=Clasificaci\u00c3\u00b3n creciente actualmente utilizada
+bean.sort.up.toSelect.tip=Clic para clasificar seg\u00c3\u00ban orden creciente
bean.unknown.type=Objeto de tipo desconocido
beancombobox.action.reset.tip=Reiniciar el valor de la lista desplegable
-beancombobox.action.sort.tip=Modificar la clasificación de la lista desplegable
-beancombobox.popup.title=Modificar la clasificación
-beanlist.action.reset.tip=Eliminar la selección
-beanlist.action.sort.tip=Modificar la clasificación de la lista despleglable
-beanlist.popup.title=Modificar la clasificación
+beancombobox.action.sort.tip=Modificar la clasificaci\u00c3\u00b3n de la lista desplegable
+beancombobox.popup.title=Modificar la clasificaci\u00c3\u00b3n
+beandoublelist.button.add=Add
+beandoublelist.button.remove=Remove
+beanlist.action.reset.tip=Eliminar la selecci\u00c3\u00b3n
+beanlist.action.sort.tip=Modificar la clasificaci\u00c3\u00b3n de la lista despleglable
+beanlist.popup.title=Modificar la clasificaci\u00c3\u00b3n
config.action.quit=Salir
-config.action.quit.tip=Salir del editor de configuración
+config.action.quit.tip=Salir del editor de configuraci\u00c3\u00b3n
config.action.reset=Cancelar
-config.action.reset.tip=Cancelar las modificaciones de esta categoría
+config.action.reset.tip=Cancelar las modificaciones de esta categor\u00c3\u00ada
config.action.save=Guardar
-config.action.save.tip=Guardar las modificaciones de esta categoría
+config.action.save.tip=Guardar las modificaciones de esta categor\u00c3\u00ada
config.choice.cancel=Cancelar
config.choice.continue=Continuar
config.choice.doNotSave=No guardar
config.choice.save=Guardar
config.defaultValue=Valor por defecto
-config.defaultValue.tip=Valor por defecto de la opción
-config.description=Descripción
+config.defaultValue.tip=Valor por defecto de la opci\u00c3\u00b3n
+config.description=Descripci\u00c3\u00b3n
config.detected.callBack=Acciones detectadas para las opciones modificadas
-config.error.category.already.exists=la categoría '%1$s' ya existe\!
+config.error.category.already.exists=la categor\u00c3\u00ada '%1$s' ya existe\!
config.error.category.not.found=La categoria '%1$s' no existe\!
config.key=Clave
config.key.tip=Calve de la opcion
config.launch.callBack=Lanzar
config.launch.callBack.tip=Lanzar las acciones necesarias
-config.message.quit.invalid.category=La categoría '%1$s' no es valida\!
+config.message.quit.invalid.category=La categor\u00c3\u00ada '%1$s' no es valida\!
config.message.quit.valid.and.modified.category=La categoria '%1$s' tiene opciones modificadas \:
-config.modified=Opción modificada (valor original \: %1$s)
+config.modified=Opci\u00c3\u00b3n modificada (valor original \: %1$s)
config.no.option.selected=< No hay opciones seleccionadas >
-config.option.final=Opción no modificable
-config.option.label=Opción '%1$s' (%2$s)
+config.option.final=Opci\u00c3\u00b3n no modificable
+config.option.label=Opci\u00c3\u00b3n '%1$s' (%2$s)
config.option.modified=Valor modificado < valor anterior \: '%1$s' - nuevo valor \: '%2$s' >
config.title=Preferencias
-config.title.need.confirm=Se requiere confirmación del usuario...
+config.title.need.confirm=Se requiere confirmaci\u00c3\u00b3n del usuario...
config.unmodifiable=No puede ser modificado
-config.unvalid=Opción no valida (valor original \: %1$s, tipo requerido \: %2$s)
+config.unvalid=Opci\u00c3\u00b3n no valida (valor original \: %1$s, tipo requerido \: %2$s)
config.value=Valor
-config.value.tip=Valor de la opción
+config.value.tip=Valor de la opci\u00c3\u00b3n
errorUI.action.close=Cerrar
errorUI.message=ha habido un error \!
errorUI.title=Error...
-fontsize.action.default.tip=Volver al tamaño por defecto
-fontsize.action.down.tip=Disminuir el tamaño del origen
-fontsize.action.up.tip=Aumentar el tamaño de la fuente
+fontsize.action.default.tip=Volver al tama\u00c3\u00b1o por defecto
+fontsize.action.down.tip=Disminuir el tama\u00c3\u00b1o del origen
+fontsize.action.up.tip=Aumentar el tama\u00c3\u00b1o de la fuente
hidor.hideTip=Ocultar
hidor.showTip=Ver
-i18neditor.empty.locales=< Aucune locale à sélectionner >
+i18neditor.empty.locales=< Aucune locale \u00c3\u00a0 s\u00c3\u00a9lectionner >
i18neditor.popup.title=Cambiar idioma
i18neditor.selected=Idioma usado actualmente \: %1$s
i18neditor.unselected=Para usar este idioma \: %1$s
@@ -79,7 +81,7 @@
numbereditor.8=8
numbereditor.9=9
numbereditor.action.reset.tip=Reinicializar
-numbereditor.action.show.tip=Mostar el teclado numérico
+numbereditor.action.show.tip=Mostar el teclado num\u00c3\u00a9rico
numbereditor.clearAll=C
numbereditor.clearOne=CE
numbereditor.toggleSign=+/-
Modified: trunk/jaxx-widgets/src/main/resources/i18n/jaxx-widgets_fr_FR.properties
===================================================================
--- trunk/jaxx-widgets/src/main/resources/i18n/jaxx-widgets_fr_FR.properties 2012-11-23 10:19:07 UTC (rev 2526)
+++ trunk/jaxx-widgets/src/main/resources/i18n/jaxx-widgets_fr_FR.properties 2012-12-10 17:55:53 UTC (rev 2527)
@@ -1,68 +1,70 @@
-aboutframe.about=À propos
+aboutframe.about=\u00c3\u0080 propos
aboutframe.license=Licence
aboutframe.ok=OK
aboutframe.thirdparty=Tierce partie
bean.popup.label=Objet '%1$s'
-bean.sort.down=Tri décroissant
-bean.sort.down.tip=Tri décroissant actuellement utilisé
-bean.sort.down.toSelect.tip=Cliquer pour trier selon l'ordre décroissant
+bean.sort.down=Tri d\u00c3\u00a9croissant
+bean.sort.down.tip=Tri d\u00c3\u00a9croissant actuellement utilis\u00c3\u00a9
+bean.sort.down.toSelect.tip=Cliquer pour trier selon l'ordre d\u00c3\u00a9croissant
bean.sort.label=Ordre de tri
-bean.sort.off=Cliquer pour activer le tri sur la propriété '%1$s'
-bean.sort.on=Le tri est effectué sur la propriété '%1$s'
+bean.sort.off=Cliquer pour activer le tri sur la propri\u00c3\u00a9t\u00c3\u00a9 '%1$s'
+bean.sort.on=Le tri est effectu\u00c3\u00a9 sur la propri\u00c3\u00a9t\u00c3\u00a9 '%1$s'
bean.sort.up=Tri croissant
-bean.sort.up.tip=Tri croissant actuellement utilisé
+bean.sort.up.tip=Tri croissant actuellement utilis\u00c3\u00a9
bean.sort.up.toSelect.tip=Cliquer pour trier selon l'ordre croissant
bean.unknown.type=Objet de type inconnu
-beancombobox.action.reset.tip=Réinitialiser la valeur de la liste déroulante
-beancombobox.action.sort.tip=Modifier le tri de la liste déroulante
+beancombobox.action.reset.tip=R\u00c3\u00a9initialiser la valeur de la liste d\u00c3\u00a9roulante
+beancombobox.action.sort.tip=Modifier le tri de la liste d\u00c3\u00a9roulante
beancombobox.popup.title=Modifier le tri
-beanlist.action.reset.tip=Supprimer la sélection
-beanlist.action.sort.tip=Modifier le tri de la liste déroulante
+beandoublelist.button.add=Add
+beandoublelist.button.remove=Remove
+beanlist.action.reset.tip=Supprimer la s\u00c3\u00a9lection
+beanlist.action.sort.tip=Modifier le tri de la liste d\u00c3\u00a9roulante
beanlist.popup.title=Modifier le tri
config.action.quit=Quitter
-config.action.quit.tip=Quitter l'éditeur de configuration
+config.action.quit.tip=Quitter l'\u00c3\u00a9diteur de configuration
config.action.reset=Annuler
-config.action.reset.tip=Annuler les modifications de cette catégorie
+config.action.reset.tip=Annuler les modifications de cette cat\u00c3\u00a9gorie
config.action.save=Enregistrer
-config.action.save.tip=Sauver les modifications de cette catégorie
+config.action.save.tip=Sauver les modifications de cette cat\u00c3\u00a9gorie
config.choice.cancel=Annuler
config.choice.continue=Continuer
config.choice.doNotSave=Ne pas enregistrer
config.choice.save=Enregistrer
-config.defaultValue=Valeur par défaut
-config.defaultValue.tip=Valeur par défaut de l'option
+config.defaultValue=Valeur par d\u00c3\u00a9faut
+config.defaultValue.tip=Valeur par d\u00c3\u00a9faut de l'option
config.description=Description
-config.detected.callBack=Actions détectées pour les options modifiées
-config.error.category.already.exists=La catégorie de nom '%1$s' existe déjà\!
-config.error.category.not.found=La catégorie de nom '%1$s' n'existe pas\!
+config.detected.callBack=Actions d\u00c3\u00a9tect\u00c3\u00a9es pour les options modifi\u00c3\u00a9es
+config.error.category.already.exists=La cat\u00c3\u00a9gorie de nom '%1$s' existe d\u00c3\u00a9j\u00c3\u00a0\!
+config.error.category.not.found=La cat\u00c3\u00a9gorie de nom '%1$s' n'existe pas\!
config.key=Clef
config.key.tip=Clef de l'option
config.launch.callBack=Lancer
-config.launch.callBack.tip=Lancer les actions nécessaires
-config.message.quit.invalid.category=La catégorie '%1$s' n'est pas valide\!
-config.message.quit.valid.and.modified.category=La catégorie '%1$s' possèdent des options modifiées \:
-config.modified=Option modifiée (valeur originale \: %1$s)
-config.no.option.selected=< Pas d'option sélectionnée >
+config.launch.callBack.tip=Lancer les actions n\u00c3\u00a9cessaires
+config.message.quit.invalid.category=La cat\u00c3\u00a9gorie '%1$s' n'est pas valide\!
+config.message.quit.valid.and.modified.category=La cat\u00c3\u00a9gorie '%1$s' poss\u00c3\u00a8dent des options modifi\u00c3\u00a9es \:
+config.modified=Option modifi\u00c3\u00a9e (valeur originale \: %1$s)
+config.no.option.selected=< Pas d'option s\u00c3\u00a9lectionn\u00c3\u00a9e >
config.option.final=Option non modifiable
config.option.label=Option '%1$s' (%2$s)
-config.option.modified=Valeur modifiée < ancienne valeur \: '%1$s' - nouvelle valeur \: '%2$s' >
-config.title=Préférences
+config.option.modified=Valeur modifi\u00c3\u00a9e < ancienne valeur \: '%1$s' - nouvelle valeur \: '%2$s' >
+config.title=Pr\u00c3\u00a9f\u00c3\u00a9rences
config.title.need.confirm=Une confirmation de votre part est requise...
-config.unmodifiable=Ne peut pas être modifié
+config.unmodifiable=Ne peut pas \u00c3\u00aatre modifi\u00c3\u00a9
config.unvalid=Option non valide (valeur originale \: %1$s, type requis \: %2$s)
config.value=Valeur
config.value.tip=Valeur de l'option
errorUI.action.close=Fermer
errorUI.message=Une erreur est survenue \!
errorUI.title=Erreur...
-fontsize.action.default.tip=Retour sur la taille par défaut
+fontsize.action.default.tip=Retour sur la taille par d\u00c3\u00a9faut
fontsize.action.down.tip=Diminuer la taille de la police
fontsize.action.up.tip=Augmenter la taille de la police
hidor.hideTip=Cacher
hidor.showTip=Voir
-i18neditor.empty.locales=< Aucune locale à sélectionner >
+i18neditor.empty.locales=< Aucune locale \u00c3\u00a0 s\u00c3\u00a9lectionner >
i18neditor.popup.title=Changer de langue
-i18neditor.selected=Langue actuellement utilisée \: %1$s
+i18neditor.selected=Langue actuellement utilis\u00c3\u00a9e \: %1$s
i18neditor.unselected=Pour utiliser cette langue \: %1$s
listSelector.hideList=Cacher la liste
listSelector.showList=Afficher la liste
@@ -78,8 +80,8 @@
numbereditor.7=7
numbereditor.8=8
numbereditor.9=9
-numbereditor.action.reset.tip=Réinitialiser
-numbereditor.action.show.tip=Afficher le pavé numérique
+numbereditor.action.reset.tip=R\u00c3\u00a9initialiser
+numbereditor.action.show.tip=Afficher le pav\u00c3\u00a9 num\u00c3\u00a9rique
numbereditor.clearAll=C
numbereditor.clearOne=CE
numbereditor.toggleSign=+/-
1
0