From: Matti Tahvonen Date: Tue, 6 Nov 2007 07:57:12 +0000 (+0000) Subject: fixes some selection issues with ITree X-Git-Tag: 6.7.0.beta1~5664 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=6b2592201b9380f4142f1b416f6f0ba289382c3b;p=vaadin-framework.git fixes some selection issues with ITree svn changeset:2716/svn branch:trunk --- diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/ITree.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/ITree.java index 3df506269b..d3bd9befbf 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/ITree.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/ITree.java @@ -26,7 +26,7 @@ import com.itmill.toolkit.terminal.gwt.client.Util; * DOM structure * */ -public class ITree extends Tree implements Paintable { +public class ITree extends Tree implements Paintable, TreeListener { public static final String CLASSNAME = "i-tree"; @@ -34,7 +34,7 @@ public class ITree extends Tree implements Paintable { ApplicationConnection client; String paintableId; private boolean selectable; - private boolean multiselect; + private boolean isMultiselect; private HashMap keyToNode = new HashMap(); @@ -46,18 +46,24 @@ public class ITree extends Tree implements Paintable { private boolean immediate; + private boolean isNullSelectionAllowed = true; + public ITree() { - super((TreeImages)GWT.create(com.itmill.toolkit.terminal.gwt.client.ui.TreeImages.class)); + super( + (TreeImages) GWT + .create(com.itmill.toolkit.terminal.gwt.client.ui.TreeImages.class)); setStyleName(CLASSNAME); - // we can't live with absolutely positioned tree, we will lose keyboard navigation thought + // we can't live with absolutely positioned tree, we will lose keyboard + // navigation thought DOM.setStyleAttribute(getElement(), "position", ""); - DOM.setStyleAttribute(DOM.getFirstChild(getElement()), "display", "none"); + DOM.setStyleAttribute(DOM.getFirstChild(getElement()), "display", + "none"); } /* * We can't live live with absolutely positioned tree. - */ + */ protected boolean isKeyboardNavigationEnabled(TreeItem currentItem) { return false; } @@ -96,10 +102,13 @@ public class ITree extends Tree implements Paintable { handleUpdate(uidl); return; } - + this.paintableId = uidl.getId(); this.immediate = uidl.hasAttribute("immediate"); + + isNullSelectionAllowed = uidl.getBooleanAttribute("nullselect"); + clear(); for (Iterator i = uidl.getChildIterator(); i.hasNext();) { @@ -114,47 +123,9 @@ public class ITree extends Tree implements Paintable { } String selectMode = uidl.getStringAttribute("selectmode"); selectable = selectMode != null; - multiselect = "multi".equals(selectMode); - - addTreeListener(new TreeListener() { - - public void onTreeItemStateChanged(TreeItem item) { - if (item instanceof TreeNode) { - TreeNode tn = (TreeNode) item; - if (item.getState()) { - if (!tn.isChildrenLoaded()) { - String key = tn.key; - ITree.this.client.updateVariable(paintableId, - "expand", new String[] { key }, true); - } - } else { - // TODO collapse - } - } - } + isMultiselect = "multi".equals(selectMode); - public void onTreeItemSelected(TreeItem item) { - TreeNode n = ((TreeNode) item); - if (!selectable) - return; - String key = n.key; - if (key != null) { - if (selectedIds.contains(key) && multiselect) { - selectedIds.remove(key); - n.setISelected(false); - } else { - if (!multiselect) { - selectedIds.clear(); - } - selectedIds.add(key); - n.setISelected(true); - } - ITree.this.client.updateVariable(ITree.this.paintableId, - "selected", selectedIds.toArray(), immediate); - } - } - - }); + addTreeListener(this); selectedIds = uidl.getStringArrayVariableAsSet("selected"); @@ -168,6 +139,42 @@ public class ITree extends Tree implements Paintable { } } + + public void onTreeItemStateChanged(TreeItem item) { + if (item instanceof TreeNode) { + TreeNode tn = (TreeNode) item; + if (item.getState()) { + if (!tn.isChildrenLoaded()) { + String key = tn.key; + ITree.this.client.updateVariable(paintableId, + "expand", new String[] { key }, true); + } + } else { + // TODO collapse + } + } + } + + public void onTreeItemSelected(TreeItem item) { + TreeNode n = ((TreeNode) item); + if (!selectable) + return; + String key = n.key; + if (key != null) { + if (selectedIds.contains(key) && isNullSelectionAllowed ) { + selectedIds.remove(key); + n.setISelected(false); + } else { + if (!isMultiselect) { + selectedIds.clear(); + } + selectedIds.add(key); + n.setISelected(true); + } + ITree.this.client.updateVariable(ITree.this.paintableId, + "selected", selectedIds.toArray(), immediate); + } + } private class TreeNode extends TreeItem implements ActionOwner { @@ -190,7 +197,7 @@ public class ITree extends Tree implements Paintable { } public void setSelected(boolean selected) { - if (!selected && !ITree.this.multiselect) { + if (!selected && !ITree.this.isMultiselect) { this.setISelected(false); } super.setSelected(selected); @@ -223,8 +230,9 @@ public class ITree extends Tree implements Paintable { setState(true); } - setSelected(uidl.getBooleanAttribute("selected")); - + if (uidl.getBooleanAttribute("selected")) { + setISelected(true); + } } private void renderChildNodes(Iterator i) {