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>.
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++) {
}
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");
}
}
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);
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));
+ }
+
+ }
+
}
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;
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))
public String getStringAttribute(String name) {
JSONValue val = ((JSONObject) json.get(1)).get(name);
if (val == null)
- return "";
+ return null;
return ((JSONString) val).stringValue();
}
};
}
+
+ public int getNumberOfChildren() {
+ return json.size() - 2;
+ }
public String toString() {
String s = "<" + getTag();
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);
}
}
+ public void onTreeItemSelected(TreeItem item) {
+ }
+
});
}
}
public interface WidgetFactory {
- Widget createWidget(String tag, String theme);
+ Widget createWidget(UIDL uidl, String theme);
}
}
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"));
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;
+ }
+
}