Author: tchemit Date: 2013-10-03 00:19:14 +0200 (Thu, 03 Oct 2013) New Revision: 2732 Url: http://nuiton.org/projects/jaxx/repository/revisions/2732 Log: fixes #2865: Can stop propagation of events in JaxxListModel Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/model/JaxxDefaultListModel.java trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListModel.java Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/model/JaxxDefaultListModel.java =================================================================== --- trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/model/JaxxDefaultListModel.java 2013-09-30 16:00:30 UTC (rev 2731) +++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/swing/model/JaxxDefaultListModel.java 2013-10-02 22:19:14 UTC (rev 2732) @@ -46,6 +46,16 @@ protected ArrayList<E> delegate = new ArrayList<E>(); + protected boolean valueIsAdjusting; + + public boolean isValueIsAdjusting() { + return valueIsAdjusting; + } + + public void setValueIsAdjusting(boolean valueIsAdjusting) { + this.valueIsAdjusting = valueIsAdjusting; + } + public ArrayList<E> toList() { return Lists.newArrayList(delegate); } @@ -312,7 +322,9 @@ */ public void setElementAt(E element, int index) { delegate.set(index, element); - fireContentsChanged(this, index, index); + if (!isValueIsAdjusting()) { + fireContentsChanged(this, index, index); + } } /** @@ -332,7 +344,9 @@ */ public void removeElementAt(int index) { delegate.remove(index); - fireIntervalRemoved(this, index, index); + if (!isValueIsAdjusting()) { + fireIntervalRemoved(this, index, index); + } } /** @@ -355,7 +369,9 @@ */ public void insertElementAt(E element, int index) { delegate.add(index, element); - fireIntervalAdded(this, index, index); + if (!isValueIsAdjusting()) { + fireIntervalAdded(this, index, index); + } } /** @@ -367,7 +383,9 @@ public void addElement(E element) { int index = delegate.size(); delegate.add(element); - fireIntervalAdded(this, index, index); + if (!isValueIsAdjusting()) { + fireIntervalAdded(this, index, index); + } } /** @@ -383,7 +401,9 @@ int index = indexOf(obj); boolean rv = delegate.remove(obj); if (index >= 0) { - fireIntervalRemoved(this, index, index); + if (!isValueIsAdjusting()) { + fireIntervalRemoved(this, index, index); + } } return rv; } @@ -404,7 +424,9 @@ int index1 = delegate.size() - 1; delegate.clear(); if (index1 >= 0) { - fireIntervalRemoved(this, 0, index1); + if (!isValueIsAdjusting()) { + fireIntervalRemoved(this, 0, index1); + } } } @@ -457,7 +479,9 @@ */ public E set(int index, E element) { E rv = delegate.set(index, element); - fireContentsChanged(this, index, index); + if (!isValueIsAdjusting()) { + fireContentsChanged(this, index, index); + } return rv; } @@ -473,7 +497,9 @@ */ public void add(int index, E element) { delegate.add(index, element); - fireIntervalAdded(this, index, index); + if (!isValueIsAdjusting()) { + fireIntervalAdded(this, index, index); + } } public void setAllElements(Collection<E> objects) { @@ -488,7 +514,9 @@ this.delegate.addAll(elements); int lastIndex = delegate.size() - 1; if (lastIndex > -1) { - fireIntervalAdded(this, firstIndex, lastIndex); + if (!isValueIsAdjusting()) { + fireIntervalAdded(this, firstIndex, lastIndex); + } } } } @@ -506,7 +534,9 @@ */ public E remove(int index) { E rv = delegate.remove(index); - fireIntervalRemoved(this, index, index); + if (!isValueIsAdjusting()) { + fireIntervalRemoved(this, index, index); + } return rv; } @@ -518,7 +548,9 @@ int index1 = delegate.size() - 1; delegate.clear(); if (index1 >= 0) { - fireIntervalRemoved(this, 0, index1); + if (!isValueIsAdjusting()) { + fireIntervalRemoved(this, 0, index1); + } } } @@ -544,13 +576,17 @@ for (int i = toIndex; i >= fromIndex; i--) { delegate.remove(i); } - fireIntervalRemoved(this, fromIndex, toIndex); + if (!isValueIsAdjusting()) { + fireIntervalRemoved(this, fromIndex, toIndex); + } } public void refresh() { if (!isEmpty()) { - fireContentsChanged(this, 0, getSize() - 1); + if (!isValueIsAdjusting()) { + fireContentsChanged(this, 0, getSize() - 1); + } } } 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 2013-09-30 16:00:30 UTC (rev 2731) +++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanDoubleListModel.java 2013-10-02 22:19:14 UTC (rev 2732) @@ -166,10 +166,24 @@ public void addToSelected(List<O> items) { selected.addAll(items); for (O item : items) { - selectedModel.addElement(item); - if (!useMultiSelect) - universeModel.removeElement(item); + + selectedModel.setValueIsAdjusting(true); + universeModel.setValueIsAdjusting(true); + + try { + selectedModel.addElement(item); + if (!useMultiSelect) { + universeModel.removeElement(item); + } + } finally { + selectedModel.setValueIsAdjusting(false); + universeModel.setValueIsAdjusting(false); + } } + + selectedModel.refresh(); + universeModel.refresh(); + } /** @@ -289,23 +303,24 @@ // 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, universeModel.getSize()); + if (index!=-1) { + // 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, universeModel.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 = universeModel.get(--insertionIndex); - int oIndex = universe.indexOf(o); - if (oIndex < index) { - insertionIndex++; - break; + // 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 = universeModel.get(--insertionIndex); + int oIndex = universe.indexOf(o); + if (oIndex < index) { + insertionIndex++; + break; + } } + universeModel.add(insertionIndex, item); } - - universeModel.add(insertionIndex, item); } public int getSelectedListSize() {