--- /dev/null
+package com.itmill.toolkit.terminal.gwt.client;
+
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwt.user.client.ui.Widget;
+
+public class CaptionWrapper extends VerticalPanel {
+
+ Label caption;
+ Widget widget;
+
+ public CaptionWrapper(Widget toBeWrapped) {
+ widget = toBeWrapped;
+ add(widget);
+ }
+
+ public void updateCaption(UIDL uidl) {
+ String c = uidl.getStringAttribute("caption");
+ // TODO Description and error messages
+ if (c == null) {
+ if (caption == null) return;
+ remove(caption);
+ caption = null;
+ } else {
+ if (caption == null) {
+ caption = new Label(c);
+ insert(caption, 0);
+ }
+ else
+ caption.setText(c);
+ }
+ }
+
+ public static boolean isNeeded(UIDL uidl) {
+ if (uidl.getStringAttribute("caption") != null) return true;
+ // TODO Description and error messages
+ return false;
+ }
+
+ public Widget getWidget() {
+ return widget;
+ }
+}
private void makeUidlRequest(String requestData) {
console.log("Making UIDL Request with params: " + requestData);
rb = new RequestBuilder(RequestBuilder.GET, appUri
- + "/UIDL/?requestId=" + (++requestCount) + "&" + requestData);
+ + "/UIDL/?requestId=" + (Math.random()) + "&" + requestData);
try {
rb.sendRequest(requestData, new RequestCallback() {
public void onError(Request request, Throwable exception) {
}
public Widget createWidgetFromUIDL(UIDL uidlForChild) {
- Widget w = widgetFactory.createWidget(uidlForChild, null);
+ Widget w = widgetFactory.createWidget(uidlForChild);
if (w instanceof Paintable) {
registerPaintable(uidlForChild.getId(), (Paintable) w);
((Paintable)w).updateFromUIDL(uidlForChild, this);
public void setWidgetFactory(WidgetFactory widgetFactory) {
this.widgetFactory = widgetFactory;
}
-
- public void repaintComponent(Widget component, UIDL uidl) {
+
+ public static Layout getParentLayout(Widget component) {
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));
- }
-
+ if (parent != null && ((Layout)parent).hasChildComponent(component))
+ return (Layout) parent;
+ return null;
}
+ public boolean replaceComponentWithCorrectImplementation(Widget currentWidget, UIDL uidl) {
+ if (widgetFactory.isCorrectImplementation(currentWidget, uidl)) return false;
+ Layout parent = getParentLayout(currentWidget);
+ if (parent == null) return false;
+ parent.replaceChildComponent(currentWidget, createWidgetFromUIDL(uidl));
+ return true;
+ }
}
package com.itmill.toolkit.terminal.gwt.client;
+import com.google.gwt.core.client.GWT;
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.TkHorizontalLayout;
import com.itmill.toolkit.terminal.gwt.client.ui.TkLabel;
-import com.itmill.toolkit.terminal.gwt.client.ui.TkOrderedLayout;
+import com.itmill.toolkit.terminal.gwt.client.ui.TkVerticalLayout;
import com.itmill.toolkit.terminal.gwt.client.ui.TkPanel;
import com.itmill.toolkit.terminal.gwt.client.ui.TkSelect;
import com.itmill.toolkit.terminal.gwt.client.ui.TkTable;
public class DefaultWidgetFactory implements WidgetFactory {
- public Widget createWidget(UIDL uidl, String theme) {
+ public Widget createWidget(UIDL uidl) {
String tag = uidl.getTag();
-
- if ("button".equals(tag)){
+
+ 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))
- return new TkOrderedLayout();
+ if ("orderedlayout".equals(tag)) {
+ if ("horizontal".equals(uidl.getStringAttribute("orientation")))
+ return new TkHorizontalLayout();
+ else
+ return new TkVerticalLayout();
+ }
if ("label".equals(tag))
return new TkLabel();
if ("gridlayout".equals(tag))
return new TkUnknownComponent();
}
+ public boolean isCorrectImplementation(Widget currentWidget, UIDL uidl) {
+
+ // TODO This implementation should be optimized
+ return GWT.getTypeName(currentWidget).equals(GWT.getTypeName(createWidget(uidl)));
+ }
+
}
public interface WidgetFactory {
- Widget createWidget(UIDL uidl, String theme);
+ Widget createWidget(UIDL uidl);
+
+ boolean isCorrectImplementation(Widget currentWidget, UIDL uidl);
}
import com.itmill.toolkit.terminal.gwt.client.UIDL;
public class TkButton extends com.google.gwt.user.client.ui.Button implements
- Paintable, ClickListener {
+ Paintable {
String id;
Client client;
public TkButton() {
- addClickListener(this);
+ addClickListener(new ClickListener() {
+
+ public void onClick(Widget sender) {
+ if (id == null || client == null)
+ return;
+ client.updateVariable(id, "state", true, true);
+ }
+ });
}
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"));
- }
+
+ // Ensure correct implementation
+ if (client.replaceComponentWithCorrectImplementation(this, uidl))
+ return;
+
+ // Save details
this.client = client;
id = uidl.getId();
+
+ // Set text
setText(uidl.getStringAttribute("caption"));
- }
- public void onClick(Widget sender) {
- if (id == null || client == null)
- return;
- client.updateVariable(id, "state", true, true);
+ // TODO Handle description and errormessages
}
+
}
}
public void updateFromUIDL(UIDL uidl, Client client) {
- if (!"switch".equals(uidl.getStringAttribute("type"))) {
- if (this.client != null)
- client.repaintComponent(this, uidl);
- else
- throw new IllegalStateException(
- "Can not paint button of type: "
- + uidl.getStringAttribute("type"));
- }
+
+ // Ensure correct implementation
+ if (client.replaceComponentWithCorrectImplementation(this, uidl))
+ return;
+ // Save details
this.client = client;
id = uidl.getId();
+
+ // Set text
setText(uidl.getStringAttribute("caption"));
setChecked(uidl.getBooleanVariable("state"));
immediate = uidl.getBooleanAttribute("immediate");
--- /dev/null
+package com.itmill.toolkit.terminal.gwt.client.ui;
+
+import java.util.Iterator;
+
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.Widget;
+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 TkHorizontalLayout extends HorizontalPanel implements Paintable, Layout {
+
+ public void updateFromUIDL(UIDL uidl, Client client) {
+
+// Ensure correct implementation
+ if (client.replaceComponentWithCorrectImplementation(this, uidl))
+ return;
+
+ // TODO Should update instead of just redraw
+ clear();
+
+ for (Iterator i = uidl.getChildIterator(); i.hasNext();) {
+ UIDL uidlForChild = (UIDL) i.next();
+ Widget child = client.createWidgetFromUIDL(uidlForChild);
+ add(child);
+ }
+ }
+
+ public void replaceChildComponent(Widget from, Widget to) {
+ int index = getWidgetIndex(from);
+ if (index >= 0) {
+ remove(index);
+ insert(to, index);
+ }
+ }
+
+ public boolean hasChildComponent(Widget paintable) {
+ return getWidgetIndex(paintable) >= 0;
+ }
+
+ public boolean updateCaption(Widget component, UIDL uidl) {
+
+ if (!hasChildComponent(component) || uidl == null) return false;
+
+
+ return false;
+ }
+
+}
+++ /dev/null
-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, Layout {
-
- SimplePanel container = new SimplePanel();
-
- IndexedPanel panel;
-
- public TkOrderedLayout() {
- initWidget(container);
- }
-
- public void updateFromUIDL(UIDL uidl, Client client) {
- container.clear();
-
- if ("horizontal".equals(uidl.getStringAttribute("orientation")))
- panel = new HorizontalPanel();
- else
- panel = new VerticalPanel();
-
- container.add((Panel) panel);
-
- for (Iterator i = uidl.getChildIterator(); i.hasNext();) {
- UIDL uidlForChild = (UIDL) i.next();
- Widget child = client.createWidgetFromUIDL(uidlForChild);
- ((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;
- }
-
-}
--- /dev/null
+package com.itmill.toolkit.terminal.gwt.client.ui;
+
+import java.util.Iterator;
+
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwt.user.client.ui.Widget;
+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 TkVerticalLayout extends VerticalPanel implements Paintable, Layout {
+
+ public void updateFromUIDL(UIDL uidl, Client client) {
+
+// Ensure correct implementation
+ if (client.replaceComponentWithCorrectImplementation(this, uidl))
+ return;
+
+ // TODO Should update instead of just redraw
+ clear();
+
+ for (Iterator i = uidl.getChildIterator(); i.hasNext();) {
+ UIDL uidlForChild = (UIDL) i.next();
+ Widget child = client.createWidgetFromUIDL(uidlForChild);
+ add(child);
+ }
+ }
+
+ public void replaceChildComponent(Widget from, Widget to) {
+ int index = getWidgetIndex(from);
+ if (index >= 0) {
+ remove(index);
+ insert(to, index);
+ }
+ }
+
+ public boolean hasChildComponent(Widget paintable) {
+ return getWidgetIndex(paintable) >= 0;
+ }
+
+ public boolean updateCaption(Widget component, UIDL uidl) {
+
+ if (!hasChildComponent(component) || uidl == null) return false;
+
+
+ return false;
+ }
+
+}