diff options
author | Leif Åstrand <leif@vaadin.com> | 2012-07-27 14:00:39 +0000 |
---|---|---|
committer | Leif Åstrand <leif@vaadin.com> | 2012-07-27 14:00:39 +0000 |
commit | 8374a0aa32dec95d8fb72f6f0d3cf286cc3684f4 (patch) | |
tree | dbc09bf464bb598e09896c1ba9a310e0c478fe5f /src/com/vaadin/ui/AbstractSelect.java | |
parent | 9148b35e9ea0cc6882ba2f8560d97138d7ca362a (diff) | |
download | vaadin-framework-8374a0aa32dec95d8fb72f6f0d3cf286cc3684f4.tar.gz vaadin-framework-8374a0aa32dec95d8fb72f6f0d3cf286cc3684f4.zip |
Preserve selection order for multi select value (#8109, #8787)
svn changeset:24030/svn branch:6.8
Diffstat (limited to 'src/com/vaadin/ui/AbstractSelect.java')
-rw-r--r-- | src/com/vaadin/ui/AbstractSelect.java | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/com/vaadin/ui/AbstractSelect.java b/src/com/vaadin/ui/AbstractSelect.java index bb49626741..71624804fa 100644 --- a/src/com/vaadin/ui/AbstractSelect.java +++ b/src/com/vaadin/ui/AbstractSelect.java @@ -426,12 +426,15 @@ public abstract class AbstractSelect extends AbstractField implements // (non-visible items can not be deselected) final Collection<?> visible = getVisibleItemIds(); if (visible != null) { + // Don't remove those that will be added to preserve order + visible.removeAll(s); + @SuppressWarnings("unchecked") Set<Object> newsel = (Set<Object>) getValue(); if (newsel == null) { - newsel = new HashSet<Object>(); + newsel = new LinkedHashSet<Object>(); } else { - newsel = new HashSet<Object>(newsel); + newsel = new LinkedHashSet<Object>(newsel); } newsel.removeAll(visible); newsel.addAll(s); @@ -645,10 +648,10 @@ public abstract class AbstractSelect extends AbstractField implements if (isMultiSelect()) { if (newValue == null) { - super.setValue(new HashSet<Object>(), repaintIsNotNeeded); + super.setValue(new LinkedHashSet<Object>(), repaintIsNotNeeded); } else if (Collection.class.isAssignableFrom(newValue.getClass())) { - super.setValue(new HashSet<Object>((Collection<?>) newValue), - repaintIsNotNeeded); + super.setValue(new LinkedHashSet<Object>( + (Collection<?>) newValue), repaintIsNotNeeded); } } else if (newValue == null || items.containsId(newValue)) { super.setValue(newValue, repaintIsNotNeeded); |