]> source.dussan.org Git - vaadin-framework.git/commitdiff
Implementing selection for tree, bugfixes for gridlayout and UIDL
authorJoonas Lehtinen <joonas.lehtinen@itmill.com>
Wed, 13 Jun 2007 13:45:41 +0000 (13:45 +0000)
committerJoonas Lehtinen <joonas.lehtinen@itmill.com>
Wed, 13 Jun 2007 13:45:41 +0000 (13:45 +0000)
svn changeset:1698/svn branch:trunk

src/com/itmill/toolkit/terminal/gwt/client/UIDL.java
src/com/itmill/toolkit/terminal/gwt/client/ui/TkGridLayout.java
src/com/itmill/toolkit/terminal/gwt/client/ui/TkTree.java

index 8b4c29592c8c0d4486ac836aeeb9a13ce30286f7..4f8cb44f70d720daa20bd21e5e5eaa01e6823784 100644 (file)
@@ -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()];
index c6a7b2e5f20de16fcee5f6150abc823dcc952a23..6a6e7bacae820aef3c9b26aa8ad054678580d1bd 100644 (file)
@@ -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);
+                                               
+                                               }
                                        }
                                }
                        }
index 5b4cf6b7e99da4c279c54f723b07e2e5fc922969..2ed9dde64c5918e60c909fe0bbe8f2485efe2f44 100644 (file)
@@ -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);
                }
+               
+               
        }
 }