]> source.dussan.org Git - vaadin-framework.git/commitdiff
Preliminary Layout-interface, Included support for replacing widgets in layouts,...
authorJoonas Lehtinen <joonas.lehtinen@itmill.com>
Wed, 13 Jun 2007 17:16:55 +0000 (17:16 +0000)
committerJoonas Lehtinen <joonas.lehtinen@itmill.com>
Wed, 13 Jun 2007 17:16:55 +0000 (17:16 +0000)
svn changeset:1704/svn branch:trunk

src/com/itmill/toolkit/terminal/gwt/client/Client.java
src/com/itmill/toolkit/terminal/gwt/client/DefaultWidgetFactory.java
src/com/itmill/toolkit/terminal/gwt/client/UIDL.java
src/com/itmill/toolkit/terminal/gwt/client/WidgetFactory.java
src/com/itmill/toolkit/terminal/gwt/client/ui/TkButton.java
src/com/itmill/toolkit/terminal/gwt/client/ui/TkOrderedLayout.java

index 55b7f86a41fc7c7609351a3997a15513825dd6ac..d5102b47ccc88bcb4fc631206438a74d58f7c16b 100755 (executable)
@@ -16,6 +16,7 @@ import com.google.gwt.json.client.JSONParser;
 import com.google.gwt.json.client.JSONValue;
 import com.google.gwt.user.client.ui.RootPanel;
 import com.google.gwt.user.client.ui.Widget;
+import com.itmill.toolkit.terminal.gwt.client.ui.TkButton;
 
 /**
  * Entry point classes define <code>onModuleLoad()</code>.
@@ -101,10 +102,8 @@ public class Client implements EntryPoint {
 
        private void handleReceivedJSONMessage(Response response) {
                Date start = new Date();
-               
-               System.out.println(response.getText().substring(3) + "}");
-               JSONValue json = JSONParser
-               .parse(response.getText().substring(3) + "}");
+               String jsonText = response.getText().substring(3) + "}";
+               JSONValue json = JSONParser.parse(jsonText);
                // Process changes
                JSONArray changes = (JSONArray) ((JSONObject) json).get("changes");
                for (int i = 0; i < changes.size(); i++) {
@@ -138,7 +137,7 @@ public class Client implements EntryPoint {
 
                }
                long prosessingTime = (new Date().getTime()) - start.getTime();
-               console.log(" Processing time was " + String.valueOf(prosessingTime));
+               console.log(" Processing time was " + String.valueOf(prosessingTime) + "ms for "+jsonText.length()+" characters of JSON");
 
        }
 
@@ -151,7 +150,7 @@ public class Client implements EntryPoint {
        }
 
        public Widget createWidgetFromUIDL(UIDL uidlForChild) {
-               Widget w = widgetFactory.createWidget(uidlForChild.getTag(), null);
+               Widget w = widgetFactory.createWidget(uidlForChild, null);
                if (w instanceof Paintable) {
                        registerPaintable(uidlForChild.getId(), (Paintable) w);
                        ((Paintable)w).updateFromUIDL(uidlForChild, this);
@@ -228,5 +227,14 @@ public class Client implements EntryPoint {
                this.widgetFactory = widgetFactory;
        }
 
+       public void repaintComponent(Widget component, UIDL uidl) {
+               Widget parent = component.getParent();
+               while (parent != null && !(parent instanceof Layout)) parent = parent.getParent();
+               if (parent != null && ((Layout)parent).hasChildComponent(component)) {
+                       ((Layout) parent).replaceChildComponent(component,createWidgetFromUIDL(uidl));
+               }
+               
+       }
+
 
 }
index f80b3bd00adbd64071d8c318b504b7132755375e..74b149b8ce3ac8c06116f20a7e3f3feaa448543b 100644 (file)
@@ -2,6 +2,7 @@ package com.itmill.toolkit.terminal.gwt.client;
 
 import com.google.gwt.user.client.ui.Widget;
 import com.itmill.toolkit.terminal.gwt.client.ui.TkButton;
+import com.itmill.toolkit.terminal.gwt.client.ui.TkCheckBox;
 import com.itmill.toolkit.terminal.gwt.client.ui.TkEmbedded;
 import com.itmill.toolkit.terminal.gwt.client.ui.TkGridLayout;
 import com.itmill.toolkit.terminal.gwt.client.ui.TkLabel;
@@ -17,10 +18,15 @@ import com.itmill.toolkit.terminal.gwt.client.ui.TkWindow;
 
 public class DefaultWidgetFactory implements WidgetFactory {
 
-       public Widget createWidget(String tag, String theme) {
+       public Widget createWidget(UIDL uidl, String theme) {
 
-               if ("button".equals(tag))
+               String tag = uidl.getTag();
+               
+               if ("button".equals(tag)){
+                       if ("switch".equals(uidl.getStringAttribute("type")))
+                               return new TkCheckBox();
                        return new TkButton();
+               }
                if ("window".equals(tag))
                        return new TkWindow();
                if ("orderedlayout".equals(tag))
index 6f2299965d6cebd00622bb6b00344385d428ff5b..4c50eabd022d34a41dcd2b234e6087359c104fee 100644 (file)
@@ -36,7 +36,7 @@ public class UIDL {
        public String getStringAttribute(String name) {
                JSONValue val = ((JSONObject) json.get(1)).get(name);
                if (val == null)
-                       return "";
+                       return null;
                return ((JSONString) val).stringValue();
        }
 
@@ -136,6 +136,10 @@ public class UIDL {
 
                };
        }
+       
+       public int getNumberOfChildren() {
+               return json.size() - 2;
+       }
 
        public String toString() {
                String s = "<" + getTag();
@@ -164,14 +168,12 @@ public class UIDL {
 
        private class UIDLBrowser extends Tree {
                public UIDLBrowser() {
-                       final TreeItem root = new TreeItem("Click here to explore UIDL");
+                       final TreeItem root = new TreeItem(getTag());
                        addItem(root);
+                       root.addItem("");
                        addTreeListener(new TreeListener() {
 
                                public void onTreeItemStateChanged(TreeItem item) {
-                               }
-
-                               public void onTreeItemSelected(TreeItem item) {
                                        if (item == root) {
                                                removeItem(root);
                                                UIDLBrowser.this.removeTreeListener(this);
@@ -182,6 +184,9 @@ public class UIDL {
                                        }
                                }
 
+                               public void onTreeItemSelected(TreeItem item) {
+                               }
+
                        });
                }
        }
index b39e470221ee266dbce970f50baacf220ba7347f..a9f52525faef901ebec1d78d9a1ca2f66d813ba1 100644 (file)
@@ -4,6 +4,6 @@ import com.google.gwt.user.client.ui.Widget;
 
 public interface WidgetFactory {
 
-       Widget createWidget(String tag, String theme);
+       Widget createWidget(UIDL uidl, String theme);
        
 }
index 4cf2946ad0f58dd146cf92535344dd2c385efeee..187b29f0930ac64985e30ce19233938e4795de38 100644 (file)
@@ -18,6 +18,14 @@ public class TkButton extends com.google.gwt.user.client.ui.Button implements
        }
 
        public void updateFromUIDL(UIDL uidl, Client client) {
+               if (uidl.getStringAttribute("type") != null) {
+                       if (this.client != null)
+                               client.repaintComponent(this, uidl);
+                       else
+                               throw new IllegalStateException(
+                                               "Can not paint button of type: "
+                                                               + uidl.getStringAttribute("type"));
+               }
                this.client = client;
                id = uidl.getId();
                setText(uidl.getStringAttribute("caption"));
index 419ad0a8bede40738333b21c551ee4bbcce16396..876baee6121086b37756fd8d3a30a7f8678b84dc 100644 (file)
@@ -2,41 +2,60 @@ package com.itmill.toolkit.terminal.gwt.client.ui;
 
 import java.util.Iterator;
 
+import com.google.gwt.user.client.ui.CellPanel;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.IndexedPanel;
 import com.google.gwt.user.client.ui.Panel;
 import com.google.gwt.user.client.ui.SimplePanel;
 import com.google.gwt.user.client.ui.VerticalPanel;
 import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.user.client.ui.WidgetCollection;
 import com.itmill.toolkit.terminal.gwt.client.Client;
+import com.itmill.toolkit.terminal.gwt.client.Layout;
 import com.itmill.toolkit.terminal.gwt.client.Paintable;
 import com.itmill.toolkit.terminal.gwt.client.UIDL;
 
-public class TkOrderedLayout extends Composite implements Paintable {
-       
+public class TkOrderedLayout extends Composite implements Paintable, Layout {
+
        SimplePanel container = new SimplePanel();
-       
-       Panel panel;
-       
+
+       IndexedPanel panel;
+
        public TkOrderedLayout() {
                initWidget(container);
        }
 
        public void updateFromUIDL(UIDL uidl, Client client) {
                container.clear();
-               
-               if(uidl.getStringAttribute("orientation").equals("horizontal"))
+
+               if ("horizontal".equals(uidl.getStringAttribute("orientation")))
                        panel = new HorizontalPanel();
                else
                        panel = new VerticalPanel();
-               
-               container.add(panel);
-               
+
+               container.add((Panel) panel);
+
                for (Iterator i = uidl.getChildIterator(); i.hasNext();) {
-                       UIDL uidlForChild = (UIDL)i.next();
+                       UIDL uidlForChild = (UIDL) i.next();
                        Widget child = client.createWidgetFromUIDL(uidlForChild);
-                       panel.add(child);
+                       ((Panel) panel).add(child);
                }
        }
-       
+
+       public void replaceChildComponent(Widget from, Widget to) {
+               int index = panel.getWidgetIndex(from);
+               if (index >= 0) {
+                       panel.remove(index);
+                       if (panel instanceof HorizontalPanel)
+                               ((HorizontalPanel) panel).insert(to, index);
+                       else
+                               ((VerticalPanel) panel).insert(to, index);
+               }
+       }
+
+       public boolean hasChildComponent(Widget paintable) {
+               return panel.getWidgetIndex(paintable) >= 0;
+       }
+
 }