--- /dev/null
+package com.itmill.toolkit.demo.reservation.gwt.client.ui;\r
+\r
+import java.util.Iterator;\r
+\r
+import com.itmill.toolkit.terminal.gwt.client.ApplicationConnection;\r
+import com.itmill.toolkit.terminal.gwt.client.Paintable;\r
+import com.itmill.toolkit.terminal.gwt.client.UIDL;\r
+import com.mapitz.gwt.googleMaps.client.GLatLng;\r
+import com.mapitz.gwt.googleMaps.client.GMap2;\r
+import com.mapitz.gwt.googleMaps.client.GMap2EventManager;\r
+import com.mapitz.gwt.googleMaps.client.GMap2Widget;\r
+import com.mapitz.gwt.googleMaps.client.GMarker;\r
+import com.mapitz.gwt.googleMaps.client.GMarkerEventClickListener;\r
+import com.mapitz.gwt.googleMaps.client.GMarkerEventManager;\r
+\r
+public class IGoogleMap extends GMap2Widget implements Paintable {\r
+\r
+ GMap2EventManager mapEventManager;\r
+ GMarkerEventManager markerEventManager;\r
+ GMap2 map;\r
+\r
+ public IGoogleMap() {\r
+ mapEventManager = GMap2EventManager.getInstance();\r
+ map = this.getGmap();\r
+ }\r
+\r
+ public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {\r
+ GLatLng pos = null;\r
+ for (Iterator it = uidl.getChildIterator(); it.hasNext();) {\r
+ UIDL u = (UIDL) it.next();\r
+ if (u.getTag().equals("markers")) {\r
+\r
+ for (Iterator m = u.getChildIterator(); m.hasNext();) {\r
+ UIDL umarker = (UIDL) m.next();\r
+ String html = umarker.getStringAttribute("html");\r
+ float x = umarker.getFloatAttribute("x");\r
+ float y = umarker.getFloatAttribute("y");\r
+ pos = new GLatLng(x, y);\r
+ GMarker marker = new GMarker(pos);\r
+ map.addOverlay(marker);\r
+ if (html != null) {\r
+ addMarkerPopup(marker, html);\r
+ }\r
+ }\r
+ }\r
+ }\r
+ if (uidl.hasAttribute("width")) {\r
+ setWidth(""+uidl.getIntAttribute("width"));\r
+ }\r
+ if (uidl.hasAttribute("height")) {\r
+ setHeight(""+uidl.getIntAttribute("height"));\r
+ }\r
+ if (uidl.hasAttribute("zoom")) {\r
+ map.setZoom(uidl.getIntAttribute("zoom"));\r
+ }\r
+ if (uidl.hasAttribute("centerX") && uidl.hasAttribute("centerY")) {\r
+ GLatLng center = new GLatLng(uidl.getFloatAttribute("centerX"),\r
+ uidl.getFloatAttribute("centerY"));\r
+ map.setCenter(center);\r
+ } else if (pos!=null) {\r
+ // use last marker position\r
+ map.setCenter(pos);\r
+ }\r
+\r
+ }\r
+\r
+ private void addMarkerPopup(GMarker marker, String html) {\r
+ if (markerEventManager == null) {\r
+ markerEventManager = GMarkerEventManager.getInstance();\r
+ }\r
+\r
+ markerEventManager.addOnClickListener(marker, new MarkerEventListener(\r
+ html));\r
+\r
+ }\r
+\r
+ private class MarkerEventListener implements GMarkerEventClickListener {\r
+ String html;\r
+\r
+ public MarkerEventListener(String html) {\r
+ this.html = html;\r
+ }\r
+\r
+ public void onClick(GMarker marker) {\r
+ marker.openInfoWindowHtml(html);\r
+ }\r
+\r
+ public void onDblClick(GMarker marker) {\r
+ }\r
+ }\r
+}\r
/**
* Entry point classes define <code>onModuleLoad()</code>.
*/
-public class ApplicationConnection implements EntryPoint, FocusListener {
+public class ApplicationConnection implements FocusListener {
private String appUri;
private HashMap paintableToId = new HashMap();
- private final WidgetFactory widgetFactory;
+ private final WidgetSet widgetSet;
private IContextMenu contextMenu = null;
private IView view = new IView();
- public ApplicationConnection() {
- widgetFactory = createWidgetFactory();
- }
-
- /**
- * This is the entry point method.
- */
- public void onModuleLoad() {
-
+ public ApplicationConnection(WidgetSet widgetSet) {
+ this.widgetSet = widgetSet;
appUri = getAppUri();
-
- if(isDebugMode()) {
- console = new DebugConsole();
+
+ if (isDebugMode()) {
+ console = new DebugConsole();
} else {
- console = new NullConsole();
+ console = new NullConsole();
}
makeUidlRequest("repaintAll=1");
-
+
// TODO remove hardcoded id name
RootPanel.get("itmtk-ajax-window").add(view);
-
- }
-
- protected static WidgetFactory createWidgetFactory() {
- return new DefaultWidgetFactory();
}
public static Console getConsole() {
boolean manageCaption) {
// Switch to correct implementation if needed
- if (!widgetFactory.isCorrectImplementation(component, uidl)) {
+ if (!widgetSet.isCorrectImplementation(component, uidl)) {
Layout parent = getParentLayout(component);
if (parent != null) {
- Widget w = widgetFactory.createWidget(uidl);
+ Widget w = widgetSet.createWidget(uidl);
parent.replaceChildComponent(component, w);
registerPaintable(uidl.getId(), (Paintable) w);
((Paintable) w).updateFromUIDL(uidl, this);
Widget w = (Widget) getPaintable(id);
if (w != null)
return w;
- w = widgetFactory.createWidget(uidl);
+ w = widgetSet.createWidget(uidl);
registerPaintable(id, (Paintable) w);
return w;
}
--- /dev/null
+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.IButton;
+import com.itmill.toolkit.terminal.gwt.client.ui.ICalendar;
+import com.itmill.toolkit.terminal.gwt.client.ui.ICheckBox;
+import com.itmill.toolkit.terminal.gwt.client.ui.ICustomLayout;
+import com.itmill.toolkit.terminal.gwt.client.ui.IDateFieldCalendar;
+import com.itmill.toolkit.terminal.gwt.client.ui.IEmbedded;
+import com.itmill.toolkit.terminal.gwt.client.ui.IFilterSelect;
+import com.itmill.toolkit.terminal.gwt.client.ui.IForm;
+import com.itmill.toolkit.terminal.gwt.client.ui.IFormLayout;
+import com.itmill.toolkit.terminal.gwt.client.ui.IGridLayout;
+import com.itmill.toolkit.terminal.gwt.client.ui.ILabel;
+import com.itmill.toolkit.terminal.gwt.client.ui.ILink;
+import com.itmill.toolkit.terminal.gwt.client.ui.IOptionGroup;
+import com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutHorizontal;
+import com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutVertical;
+import com.itmill.toolkit.terminal.gwt.client.ui.IPanel;
+import com.itmill.toolkit.terminal.gwt.client.ui.IPasswordField;
+import com.itmill.toolkit.terminal.gwt.client.ui.IPopupCalendar;
+import com.itmill.toolkit.terminal.gwt.client.ui.IScrollTable;
+import com.itmill.toolkit.terminal.gwt.client.ui.ISelect;
+import com.itmill.toolkit.terminal.gwt.client.ui.ISlider;
+import com.itmill.toolkit.terminal.gwt.client.ui.ISplitPanelHorizontal;
+import com.itmill.toolkit.terminal.gwt.client.ui.ISplitPanelVertical;
+import com.itmill.toolkit.terminal.gwt.client.ui.ITablePaging;
+import com.itmill.toolkit.terminal.gwt.client.ui.ITabsheet;
+import com.itmill.toolkit.terminal.gwt.client.ui.ITextArea;
+import com.itmill.toolkit.terminal.gwt.client.ui.ITextField;
+import com.itmill.toolkit.terminal.gwt.client.ui.ITextualDate;
+import com.itmill.toolkit.terminal.gwt.client.ui.ITree;
+import com.itmill.toolkit.terminal.gwt.client.ui.ITwinColSelect;
+import com.itmill.toolkit.terminal.gwt.client.ui.IUnknownComponent;
+import com.itmill.toolkit.terminal.gwt.client.ui.IUpload;
+import com.itmill.toolkit.terminal.gwt.client.ui.IView;
+import com.itmill.toolkit.terminal.gwt.client.ui.IWindow;
+
+public class DefaultWidgetSet implements WidgetSet {
+
+ protected ApplicationConnection appConn;
+
+ /**
+ * This is the entry point method.
+ */
+ public void onModuleLoad() {
+ appConn = new ApplicationConnection(this);
+ }
+
+ public Widget createWidget(UIDL uidl) {
+
+ String className = resolveWidgetTypeName(uidl);
+ if ("com.itmill.toolkit.terminal.gwt.client.ui.ICheckBox"
+ .equals(className)) {
+ return new ICheckBox();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IButton"
+ .equals(className)) {
+ return new IButton();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IView"
+ .equals(className)) {
+ // TODO remove IView?
+ return new IView();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IWindow"
+ .equals(className)) {
+ return new IWindow();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutVertical"
+ .equals(className)) {
+ return new IOrderedLayoutVertical();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutHorizontal"
+ .equals(className)) {
+ return new IOrderedLayoutHorizontal();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ILabel"
+ .equals(className)) {
+ return new ILabel();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ILink"
+ .equals(className)) {
+ return new ILink();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IGridLayout"
+ .equals(className)) {
+ return new IGridLayout();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ITree"
+ .equals(className)) {
+ return new ITree();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IOptionGroup"
+ .equals(className)) {
+ return new IOptionGroup();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ITwinColSelect"
+ .equals(className)) {
+ return new ITwinColSelect();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ISelect"
+ .equals(className)) {
+ return new ISelect();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IPanel"
+ .equals(className)) {
+ return new IPanel();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ITabsheet"
+ .equals(className)) {
+ return new ITabsheet();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IEmbedded"
+ .equals(className)) {
+ return new IEmbedded();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ICustomLayout"
+ .equals(className)) {
+ return new ICustomLayout();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ITextArea"
+ .equals(className)) {
+ return new ITextArea();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IPasswordField"
+ .equals(className)) {
+ return new IPasswordField();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ITextField"
+ .equals(className)) {
+ return new ITextField();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ITablePaging"
+ .equals(className)) {
+ return new ITablePaging();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IScrollTable"
+ .equals(className)) {
+ return new IScrollTable();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IDateFieldCalendar"
+ .equals(className)) {
+ return new IDateFieldCalendar();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ICalendar"
+ .equals(className)) {
+ return new ICalendar();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ITextualDate"
+ .equals(className)) {
+ return new ITextualDate();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IPopupCalendar"
+ .equals(className)) {
+ return new IPopupCalendar();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ISlider"
+ .equals(className)) {
+ return new ISlider();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IForm"
+ .equals(className)) {
+ return new IForm();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IFormLayout"
+ .equals(className)) {
+ return new IFormLayout();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IUpload"
+ .equals(className)) {
+ return new IUpload();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ISplitPanelHorizontal"
+ .equals(className)) {
+ return new ISplitPanelHorizontal();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ISplitPanelVertical"
+ .equals(className)) {
+ return new ISplitPanelVertical();
+ } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IFilterSelect"
+ .equals(className)) {
+ return new IFilterSelect();
+ }
+ return new IUnknownComponent();
+
+ /*
+ * TODO: Class based impl, use when GWT supports return
+ * (Widget)GWT.create(resolveWidgetClass(uidl));
+ */
+ }
+
+ protected String resolveWidgetTypeName(UIDL uidl) {
+
+ String tag = uidl.getTag();
+ if ("button".equals(tag)) {
+ if ("switch".equals(uidl.getStringAttribute("type"))) {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.ICheckBox";
+ } else {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.IButton";
+ }
+ } else if ("window".equals(tag)) {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.IWindow";
+ } else if ("orderedlayout".equals(tag)) {
+ if ("horizontal".equals(uidl.getStringAttribute("orientation"))) {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutHorizontal";
+ } else {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutVertical";
+ }
+ } else if ("label".equals(tag)) {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.ILabel";
+ } else if ("link".equals(tag)) {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.ILink";
+ } else if ("gridlayout".equals(tag)) {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.IGridLayout";
+ } else if ("tree".equals(tag)) {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.ITree";
+ } else if ("select".equals(tag)) {
+ if ("optiongroup".equals(uidl.getStringAttribute("style"))) {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.IOptionGroup";
+ } else if ("twincol".equals(uidl.getStringAttribute("style"))) {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.ITwinColSelect";
+ } else {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.IFilterSelect";
+ }
+ } else if ("panel".equals(tag)) {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.IPanel";
+ } else if ("tabsheet".equals(tag)) {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.ITabsheet";
+ } else if ("embedded".equals(tag)) {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.IEmbedded";
+ } else if ("customlayout".equals(tag)) {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.ICustomLayout";
+ } else if ("textfield".equals(tag)) {
+ if (uidl.hasAttribute("multiline")) {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.ITextArea";
+ } else if (uidl.getBooleanAttribute("secret")) {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.IPasswordField";
+ } else {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.ITextField";
+ }
+ } else if ("table".equals(tag)) {
+ if (uidl.hasAttribute("style")) {
+ if ("paging".equals(uidl.getStringAttribute("style"))) {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.ITablePaging";
+ }
+ } else {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.IScrollTable";
+ }
+ } else if ("datefield".equals(tag)) {
+ if (uidl.hasAttribute("style")) {
+ if ("calendar".equals(uidl.getStringAttribute("style"))) {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.ICalendar";
+ } else if ("text".equals(uidl.getStringAttribute("style"))) {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.ITextualDate";
+ }
+ } else {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.IPopupCalendar";
+ }
+ } else if ("calendarfield".equals(tag)) {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.ICalendar";
+ } else if ("slider".equals(tag)) {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.ISlider";
+ } else if ("form".equals(tag)) {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.IForm";
+ } else if ("formlayout".equals(tag)) {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.IFormLayout";
+ } else if ("upload".equals(tag)) {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.IUpload";
+ } else if ("hsplitpanel".equals(tag)) {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.ISplitPanelHorizontal";
+ } else if ("vsplitpanel".equals(tag)) {
+ return "com.itmill.toolkit.terminal.gwt.client.ui.ISplitPanelVertical";
+ }
+
+ return "com.itmill.toolkit.terminal.gwt.client.ui.IUnknownComponent";
+
+ /*
+ * TODO: use class based impl when GWT supports it
+ */
+ }
+
+ public boolean isCorrectImplementation(Widget currentWidget, UIDL uidl) {
+ return GWT.getTypeName(currentWidget).equals(
+ resolveWidgetTypeName(uidl));
+ }
+
+}