From e37a2939222bfdf2af4a5be4efe4f277d9585e5e Mon Sep 17 00:00:00 2001 From: Matti Tahvonen Date: Thu, 3 Sep 2009 13:56:03 +0000 Subject: [PATCH] fixes #3275 (regression from #2603, now solved in another way) + some minor cleaning to code svn changeset:8658/svn branch:6.1 --- .../vaadin/terminal/gwt/client/ui/VTree.java | 9 ++--- src/com/vaadin/ui/Tree.java | 36 +++++++------------ 2 files changed, 15 insertions(+), 30 deletions(-) diff --git a/src/com/vaadin/terminal/gwt/client/ui/VTree.java b/src/com/vaadin/terminal/gwt/client/ui/VTree.java index 6f676441e7..87b98526c5 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VTree.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VTree.java @@ -141,12 +141,6 @@ public class VTree extends FlowPanel implements Paintable { } rootNode.renderChildNodes(uidl.getChildIterator()); } - - if (uidl.hasVariable("selected")) { - // update selection in case selected nodes were not visible - selectedIds = uidl.getStringArrayVariableAsSet("selected"); - } - } public void setSelected(TreeNode treeNode, boolean selected) { @@ -309,6 +303,9 @@ public class VTree extends FlowPanel implements Paintable { if (uidl.getBooleanAttribute("selected")) { setSelected(true); + // ensure that identifier is in selectedIds array (this may be a + // partial update) + selectedIds.add(key); } if (uidl.hasAttribute("icon")) { diff --git a/src/com/vaadin/ui/Tree.java b/src/com/vaadin/ui/Tree.java index 0d56384994..cb3f667a4f 100644 --- a/src/com/vaadin/ui/Tree.java +++ b/src/com/vaadin/ui/Tree.java @@ -331,8 +331,8 @@ public class Tree extends AbstractSelect implements Container.Hierarchical, * Called when one or more variables handled by the implementing class are * changed. * - * @see com.vaadin.terminal.VariableOwner#changeVariables(Object - * source, Map variables) + * @see com.vaadin.terminal.VariableOwner#changeVariables(Object source, Map + * variables) */ @Override public void changeVariables(Object source, Map variables) { @@ -448,14 +448,11 @@ public class Tree extends AbstractSelect implements Container.Hierarchical, // Initialize variables final Set actionSet = new LinkedHashSet(); - String[] selectedKeys; - if (isMultiSelect()) { - selectedKeys = new String[((Set) getValue()).size()]; - } else { - selectedKeys = new String[(getValue() == null ? 0 : 1)]; - } - int keyIndex = 0; - final LinkedList expandedKeys = new LinkedList(); + + // rendered selectedKeys + LinkedList selectedKeys = new LinkedList(); + + final LinkedList expandedKeys = new LinkedList(); // Iterates through hierarchical tree using a stack of iterators final Stack iteratorStack = new Stack(); @@ -509,12 +506,7 @@ public class Tree extends AbstractSelect implements Container.Hierarchical, target.addAttribute("key", key); if (isSelected(itemId)) { target.addAttribute("selected", true); - try { - selectedKeys[keyIndex++] = key; - } catch (Exception e) { - // TODO Fix, see TreeExample (featurebrowser) - e.printStackTrace(); - } + selectedKeys.add(key); } if (areChildrenAllowed(itemId) && isExpanded(itemId)) { target.addAttribute("expanded", true); @@ -577,14 +569,11 @@ public class Tree extends AbstractSelect implements Container.Hierarchical, } if (partialUpdate) { - // update tree-level selection information in case some selected - // node(s) were collapsed - target.addVariable(this, "selected", selectedKeys); - partialUpdate = false; } else { // Selected - target.addVariable(this, "selected", selectedKeys); + target.addVariable(this, "selected", selectedKeys + .toArray(new String[selectedKeys.size()])); // Expand and collapse target.addVariable(this, "expand", new String[] {}); @@ -669,9 +658,8 @@ public class Tree extends AbstractSelect implements Container.Hierarchical, /* * (non-Javadoc) * - * @see - * com.vaadin.data.Container.Hierarchical#setParent(java.lang.Object - * , java.lang.Object) + * @see com.vaadin.data.Container.Hierarchical#setParent(java.lang.Object , + * java.lang.Object) */ public boolean setParent(Object itemId, Object newParentId) { final boolean success = ((Container.Hierarchical) items).setParent( -- 2.39.5