Author: chatellier Date: 2010-11-10 13:57:56 +0000 (Wed, 10 Nov 2010) New Revision: 200 Log: Reimppletation de l'ecoute des selections de list (sans s'ecouter soit meme, c'est plus simple a comprendre) Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionListsView.jaxx trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/util/CoserListSelectionModel.java Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionListsView.jaxx =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionListsView.jaxx 2010-11-10 13:05:01 UTC (rev 199) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/selection/SelectionListsView.jaxx 2010-11-10 13:57:56 UTC (rev 200) @@ -29,6 +29,9 @@ import fr.ifremer.coser.ui.selection.model.SpecyListTestModel; import fr.ifremer.coser.ui.util.CoserListSelectionModel; + // le modele de la liste est allimenté par la selection de la précédente liste + // la selection est mise à jour par la modification du model de la liste + void $afterCompleteSetup() { // modification (all species -> all species list) selectionAllSpeciesList.addListSelectionListener(selectionOccurenceDensityListModel); Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/util/CoserListSelectionModel.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/util/CoserListSelectionModel.java 2010-11-10 13:05:01 UTC (rev 199) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/util/CoserListSelectionModel.java 2010-11-10 13:57:56 UTC (rev 200) @@ -31,8 +31,6 @@ 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 jaxx.runtime.swing.OneClicListSelectionModel; @@ -45,9 +43,6 @@ * et non par indices. * Etend {@link OneClicListSelectionModel} pour sélectionner par simple clic. * - * Implemente {@link ListSelectionListener} pour que la selection que la liste - * courante sauvegarde les instances des objets correspondants aux indices selectionnés. - * * Implemente {@link ListDataListener} pour que la selection apres changement * des données reste la même au niveau des objets (sinon, les indices * ne correspondent pas au données précédent le changement. @@ -58,10 +53,8 @@ * Last update : $Date$ * By : $Author$ */ -public class CoserListSelectionModel extends OneClicListSelectionModel implements ListDataListener, ListSelectionListener { +public class CoserListSelectionModel extends OneClicListSelectionModel implements ListDataListener { - private static final Log log = LogFactory.getLog(CoserListSelectionModel.class); - /** Selection objects. */ protected Set<Object> selectedObjects; @@ -78,11 +71,6 @@ super(delegate, coserListModel); this.coserListModel = coserListModel; selectedObjects = new HashSet<Object>(); - - // pour que la selection que la liste courante - // sauvegarde les instances des objets correspondants - // aux indices selectionnés. - addListSelectionListener(this); } /** @@ -95,7 +83,13 @@ if (objects != null) { selectedObjects.addAll(objects); } - contentsChanged(null); + setValueIsAdjusting(true); + try { + contentsChanged(null); + } + finally { + setValueIsAdjusting(false); + } } /* @@ -121,9 +115,7 @@ public void contentsChanged(ListDataEvent e) { clearSelection(); - setValueIsAdjusting(true); - - Iterator<Object> itO = selectedObjects.iterator(); + Iterator<Object> itO = new HashSet<Object>(selectedObjects).iterator(); while (itO.hasNext()) { Object o = itO.next(); int index = coserListModel.indexOf(o); @@ -138,32 +130,29 @@ itO.remove(); }*/ } - - setValueIsAdjusting(false); } - /* - * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent) - */ @Override - public void valueChanged(ListSelectionEvent e) { + public void setSelectionInterval(int index0, int index1) { + super.setSelectionInterval(index0, index1); + registerSelection(index0, index1); + } - // ne fonctionne pas si c'est fait seulement quand - // IsAdjusting est a true. + @Override + public void addSelectionInterval(int index0, int index1) { + super.addSelectionInterval(index0, index1); + registerSelection(index0, index1); + } - if (!e.getValueIsAdjusting()) { - int first = e.getFirstIndex(); - int last = e.getLastIndex(); - - for (int i = first ; i <= last ; ++i) { - Object o = coserListModel.getElementAt(i); - if (isSelectedIndex(i)) { - selectedObjects.add(o); - } - else { - selectedObjects.remove(o); - } + protected void registerSelection(int index0, int index1) { + for (int i = index0 ; i <= index1 ; ++i) { + Object o = coserListModel.getElementAt(i); + if (isSelectedIndex(i)) { + selectedObjects.add(o); } + else { + selectedObjects.remove(o); + } } }
participants (1)
-
chatellier@users.labs.libre-entreprise.org