From: Joonas Lehtinen Date: Wed, 13 Jun 2007 13:45:41 +0000 (+0000) Subject: Implementing selection for tree, bugfixes for gridlayout and UIDL X-Git-Tag: 6.7.0.beta1~6279 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=2f5ccf16414c9b86641da8f34a2d18dcc9cd49c0;p=vaadin-framework.git Implementing selection for tree, bugfixes for gridlayout and UIDL svn changeset:1698/svn branch:trunk --- diff --git a/src/com/itmill/toolkit/terminal/gwt/client/UIDL.java b/src/com/itmill/toolkit/terminal/gwt/client/UIDL.java index 8b4c29592c..4f8cb44f70 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/UIDL.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/UIDL.java @@ -84,6 +84,7 @@ public class UIDL { public UIDL getChildUIDL(int i) { JSONValue c = json.get(i + 2); + if (c==null) return null; if (c.isArray() != null) return new UIDL(c.isArray()); throw new IllegalStateException("Child node " + i @@ -246,14 +247,14 @@ public class UIDL { return t.booleanValue(); } - public JSONArray getArrayVariable(String name) { + private JSONArray getArrayVariable(String name) { JSONArray t = (JSONArray) getVariableHash().get(name); if (t == null) throw new IllegalArgumentException("No such variable: " + name); return t; } - public String[] getStingArrayVariable(String name) { + public String[] getStringArrayVariable(String name) { JSONArray a = getArrayVariable(name); String[] s = new String[a.size()]; for (int i = 0; i < a.size(); i++) @@ -261,6 +262,14 @@ public class UIDL { return s; } + public Set getStringArrayVariableAsSet(String name) { + JSONArray a = getArrayVariable(name); + HashSet s = new HashSet(); + for (int i = 0; i < a.size(); i++) + s.add(((JSONString) a.get(i)).stringValue()); + return s; + } + public int[] getIntArrayVariable(String name) { JSONArray a = getArrayVariable(name); int[] s = new int[a.size()]; diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/TkGridLayout.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/TkGridLayout.java index c6a7b2e5f2..6a6e7bacae 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/TkGridLayout.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/TkGridLayout.java @@ -27,10 +27,13 @@ public class TkGridLayout extends FlexTable implements Paintable { int w = c.getIntAttribute("w"); ((FlexCellFormatter)getCellFormatter()).setColSpan(row,column, w); } - UIDL u = c.getChildUIDL(0); + UIDL u = c.getChildUIDL(0); + if (u != null) { Widget child = client.createWidgetFromUIDL(u); if (child != null) setWidget(row, column, child); + + } } } } diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/TkTree.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/TkTree.java index 5b4cf6b7e9..2ed9dde64c 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/TkTree.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/TkTree.java @@ -1,11 +1,14 @@ package com.itmill.toolkit.terminal.gwt.client.ui; +import java.util.HashSet; import java.util.Iterator; +import java.util.Set; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Tree; import com.google.gwt.user.client.ui.TreeItem; +import com.google.gwt.user.client.ui.TreeListener; import com.google.gwt.user.client.ui.VerticalPanel; import com.itmill.toolkit.terminal.gwt.client.Client; import com.itmill.toolkit.terminal.gwt.client.Paintable; @@ -15,6 +18,11 @@ public class TkTree extends Composite implements Paintable { Label caption = new Label(); Tree tree = new Tree(); + Set selectedIds = new HashSet(); + Client client; + String id; + boolean selectable; + boolean multiselect; public TkTree() { VerticalPanel panel = new VerticalPanel(); @@ -24,7 +32,8 @@ public class TkTree extends Composite implements Paintable { } public void updateFromUIDL(UIDL uidl, Client client) { - + this.client = client; + id = uidl.getId(); if (uidl.hasAttribute("caption")) caption.setText(uidl.getStringAttribute("caption")); tree.clear(); for (Iterator i = uidl.getChildIterator(); i.hasNext();) { @@ -37,23 +46,48 @@ public class TkTree extends Composite implements Paintable { tree.addItem(childTree); } } + String selectMode = uidl.getStringAttribute("selectmode"); + selectable = selectMode != null; + multiselect = "multi".equals(selectMode); + + tree.addTreeListener(new TreeListener() { + + public void onTreeItemStateChanged(TreeItem item) { + } + + public void onTreeItemSelected(TreeItem item) { + if (!selectable) return; + item.setSelected(true); + String key = ((TreeNode)item).key; + if (key != null) { + if (multiselect) selectedIds.clear(); + if (selectedIds.contains(key)) selectedIds.remove(key); + else selectedIds.add(key); + TkTree.this.client.updateVariable(TkTree.this.id, "selected", selectedIds.toArray(), true); + } + } + + }); + + selectedIds = uidl.getStringArrayVariableAsSet("selected"); + } private class TreeNode extends TreeItem { + String key; + public void updateFromUIDL(UIDL uidl, Client client) { this.setText(uidl.getStringAttribute("caption")); + key = uidl.getStringAttribute("key"); for (Iterator i = uidl.getChildIterator(); i.hasNext();) { UIDL childUidl = (UIDL)i.next(); - if(childUidl.getTag().equals("leaf")) - this.addItem(childUidl.getStringAttribute("caption")); - if(childUidl.getTag().equals("node")) { - TreeNode childTree = new TreeNode(); - childTree.updateFromUIDL(childUidl, client); - this.addItem(childTree); - } + TreeNode childTree = new TreeNode(); + childTree.updateFromUIDL(childUidl, client); + this.addItem(childTree); } - if(uidl.getBooleanAttribute("expanded")) - setState(true); + // TODO if(uidl.getBooleanAttribute("expanded")) setState(true); } + + } }