]> source.dussan.org Git - vaadin-framework.git/commitdiff
WidgetSet extending initial commit
authorMarc Englund <marc.englund@itmill.com>
Tue, 18 Sep 2007 11:32:41 +0000 (11:32 +0000)
committerMarc Englund <marc.englund@itmill.com>
Tue, 18 Sep 2007 11:32:41 +0000 (11:32 +0000)
svn changeset:2308/svn branch:trunk

src/com/itmill/toolkit/demo/reservation/gwt/WidgetSet.gwt.xml [new file with mode: 0644]
src/com/itmill/toolkit/demo/reservation/gwt/client/WidgetSet.java [new file with mode: 0644]
src/com/itmill/toolkit/demo/reservation/gwt/client/ui/IGoogleMap.java [new file with mode: 0644]
src/com/itmill/toolkit/terminal/gwt/Client.gwt.xml [deleted file]
src/com/itmill/toolkit/terminal/gwt/WidgetSet.gwt.xml [new file with mode: 0644]
src/com/itmill/toolkit/terminal/gwt/WidgetSetNoEntry.gwt.xml [new file with mode: 0644]
src/com/itmill/toolkit/terminal/gwt/client/ApplicationConnection.java
src/com/itmill/toolkit/terminal/gwt/client/DefaultWidgetSet.java [new file with mode: 0644]
src/com/itmill/toolkit/terminal/gwt/client/WidgetFactory.java [deleted file]
src/com/itmill/toolkit/terminal/gwt/client/WidgetSet.java [new file with mode: 0644]
src/com/itmill/toolkit/terminal/gwt/server/ApplicationServlet.java

diff --git a/src/com/itmill/toolkit/demo/reservation/gwt/WidgetSet.gwt.xml b/src/com/itmill/toolkit/demo/reservation/gwt/WidgetSet.gwt.xml
new file mode 100644 (file)
index 0000000..2a360b6
--- /dev/null
@@ -0,0 +1,14 @@
+<module>
+\r
+       <inherits name="com.itmill.toolkit.terminal.gwt.WidgetSetNoEntry" /> \r
+       \r
+       <inherits name='com.mapitz.gwt.googleMaps.GoogleMaps' /> 
+       
+       <!-- Component stylesheets                                -->
+       
+       <stylesheet src="component-themes/collection.css"/>
+
+       <!-- Specify the app entry point class.                   -->
+       <entry-point class="com.itmill.toolkit.demo.reservation.gwt.client.WidgetSet"/>
+  
+</module>
diff --git a/src/com/itmill/toolkit/demo/reservation/gwt/client/WidgetSet.java b/src/com/itmill/toolkit/demo/reservation/gwt/client/WidgetSet.java
new file mode 100644 (file)
index 0000000..b17de62
--- /dev/null
@@ -0,0 +1,34 @@
+package com.itmill.toolkit.demo.reservation.gwt.client;\r
+\r
+import com.google.gwt.core.client.GWT;\r
+import com.google.gwt.user.client.ui.Widget;\r
+import com.itmill.toolkit.demo.reservation.gwt.client.ui.IGoogleMap;\r
+import com.itmill.toolkit.terminal.gwt.client.DefaultWidgetSet;\r
+import com.itmill.toolkit.terminal.gwt.client.UIDL;\r
+\r
+public class WidgetSet extends DefaultWidgetSet {\r
+    public Widget createWidget(UIDL uidl) {\r
+       String className = resolveWidgetTypeName(uidl);\r
+       if ("com.itmill.toolkit.terminal.gwt.client.ui.IGoogleMap"\r
+               .equals(className)) {\r
+           return new IGoogleMap();\r
+       }\r
+\r
+       return super.createWidget(uidl);\r
+    }\r
+\r
+    protected String resolveWidgetTypeName(UIDL uidl) {\r
+\r
+       String tag = uidl.getTag();\r
+       if ("googlemap".equals(tag)) {\r
+           return "com.itmill.toolkit.terminal.gwt.client.ui.IGoogleMap";\r
+       }\r
+\r
+       return super.resolveWidgetTypeName(uidl);\r
+    }\r
+    \r
+    public boolean isCorrectImplementation(Widget currentWidget, UIDL uidl) {\r
+       return GWT.getTypeName(currentWidget).equals(\r
+               resolveWidgetTypeName(uidl));\r
+    }\r
+}\r
diff --git a/src/com/itmill/toolkit/demo/reservation/gwt/client/ui/IGoogleMap.java b/src/com/itmill/toolkit/demo/reservation/gwt/client/ui/IGoogleMap.java
new file mode 100644 (file)
index 0000000..2aa244f
--- /dev/null
@@ -0,0 +1,91 @@
+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
diff --git a/src/com/itmill/toolkit/terminal/gwt/Client.gwt.xml b/src/com/itmill/toolkit/terminal/gwt/Client.gwt.xml
deleted file mode 100644 (file)
index 71353c5..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<module>
-
-       <inherits name="com.google.gwt.user.User"/>
-
-       <inherits name="com.google.gwt.http.HTTP"/>
-
-       <inherits name="com.google.gwt.xml.XML"/>
-
-       <inherits name="com.google.gwt.json.JSON"/>
-       
-       <source path="client"/>
-       
-       <source path="gwtwidgets"/>
-       
-       <!-- Component stylesheets                                -->
-       
-       <stylesheet src="component-themes/collection.css"/>
-
-       <!-- Specify the app entry point class.                   -->
-       <entry-point class="com.itmill.toolkit.terminal.gwt.client.ApplicationConnection"/>
-  
-</module>
diff --git a/src/com/itmill/toolkit/terminal/gwt/WidgetSet.gwt.xml b/src/com/itmill/toolkit/terminal/gwt/WidgetSet.gwt.xml
new file mode 100644 (file)
index 0000000..a5d027b
--- /dev/null
@@ -0,0 +1,7 @@
+<module>
+       <source path="client"/>\r
+
+       <inherits name="com.itmill.toolkit.terminal.gwt.WidgetSetNoEntry"/>
+
+       <entry-point class="com.itmill.toolkit.terminal.gwt.client.DefaultWidgetSet"/>
+</module>
diff --git a/src/com/itmill/toolkit/terminal/gwt/WidgetSetNoEntry.gwt.xml b/src/com/itmill/toolkit/terminal/gwt/WidgetSetNoEntry.gwt.xml
new file mode 100644 (file)
index 0000000..62b1618
--- /dev/null
@@ -0,0 +1,20 @@
+<module>
+
+       <inherits name="com.google.gwt.user.User"/>
+
+       <inherits name="com.google.gwt.http.HTTP"/>
+
+       <inherits name="com.google.gwt.xml.XML"/>
+
+       <inherits name="com.google.gwt.json.JSON"/>\r
+
+       <source path="client"/>
+       
+       <source path="gwtwidgets"/>
+       
+       <!-- Component stylesheets                                -->
+       
+       <stylesheet src="component-themes/collection.css"/>
+
+
+</module>
index 4b9977b512b3b6fd1f841f3a979d2b645b83f5f3..e95d43544327a328d0c75f0939b18404e3e257e5 100755 (executable)
@@ -28,7 +28,7 @@ import com.itmill.toolkit.terminal.gwt.client.ui.IView;
 /**
  * Entry point classes define <code>onModuleLoad()</code>.
  */
-public class ApplicationConnection implements EntryPoint, FocusListener {
+public class ApplicationConnection implements FocusListener {
 
        private String appUri;
 
@@ -42,38 +42,26 @@ public class ApplicationConnection implements EntryPoint, FocusListener {
 
        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() {
@@ -367,10 +355,10 @@ public class ApplicationConnection implements EntryPoint, FocusListener {
                        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);
@@ -431,7 +419,7 @@ public class ApplicationConnection implements EntryPoint, FocusListener {
                Widget w = (Widget) getPaintable(id);
                if (w != null)
                        return w;
-               w = widgetFactory.createWidget(uidl);
+               w = widgetSet.createWidget(uidl);
                registerPaintable(id, (Paintable) w);
                return w;
        }
diff --git a/src/com/itmill/toolkit/terminal/gwt/client/DefaultWidgetSet.java b/src/com/itmill/toolkit/terminal/gwt/client/DefaultWidgetSet.java
new file mode 100644 (file)
index 0000000..d0ccf5d
--- /dev/null
@@ -0,0 +1,258 @@
+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));
+    }
+
+}
diff --git a/src/com/itmill/toolkit/terminal/gwt/client/WidgetFactory.java b/src/com/itmill/toolkit/terminal/gwt/client/WidgetFactory.java
deleted file mode 100644 (file)
index 72b327d..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.itmill.toolkit.terminal.gwt.client;
-
-import com.google.gwt.user.client.ui.Widget;
-
-public interface WidgetFactory {
-
-       /** Create an uninitialized component that best matches given UIDL.
-        * 
-        * @param uidl UIDL to be painted with returned component.
-        * @return New uninitialized and unregistered component that can paint given UIDL.
-        */
-       Widget createWidget(UIDL uidl);
-
-       /** Test if the given component implementation conforms to UIDL.
-        * 
-        * @param currentWidget Current implementation of the component
-        * @param uidl UIDL to test against
-        * @return true iff createWidget would return a new component of the same class than currentWidget
-        */
-       boolean isCorrectImplementation(Widget currentWidget, UIDL uidl);
-}
diff --git a/src/com/itmill/toolkit/terminal/gwt/client/WidgetSet.java b/src/com/itmill/toolkit/terminal/gwt/client/WidgetSet.java
new file mode 100644 (file)
index 0000000..bec94e3
--- /dev/null
@@ -0,0 +1,22 @@
+package com.itmill.toolkit.terminal.gwt.client;
+
+import com.google.gwt.core.client.EntryPoint;
+import com.google.gwt.user.client.ui.Widget;
+
+public interface WidgetSet extends EntryPoint {
+
+       /** Create an uninitialized component that best matches given UIDL.
+        * 
+        * @param uidl UIDL to be painted with returned component.
+        * @return New uninitialized and unregistered component that can paint given UIDL.
+        */
+       public Widget createWidget(UIDL uidl);
+
+       /** Test if the given component implementation conforms to UIDL.
+        * 
+        * @param currentWidget Current implementation of the component
+        * @param uidl UIDL to test against
+        * @return true iff createWidget would return a new component of the same class than currentWidget
+        */
+       public boolean isCorrectImplementation(Widget currentWidget, UIDL uidl);
+}
index 0eba8a132302ca2221da47738b4cca573c644cae..cd76d4c1e7755f5fc66649eee93f64c4ce8c9d37 100644 (file)
@@ -438,7 +438,7 @@ public class ApplicationServlet extends HttpServlet {
                                .write("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" "
                                                + "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n");
                
-               page.write("<html>\n<head>\n<title>IT Mill Toolkit 5</title>\n" +
+               page.write("<html xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:v=\"urn:schemas-microsoft-com:vml\">\n<head>\n<title>IT Mill Toolkit 5</title>\n" +
                                "<script type=\"text/javascript\">\n" +
                                "       var itmtk = {\n" +
                                "               appUri:'");
@@ -459,7 +459,9 @@ public class ApplicationServlet extends HttpServlet {
                page.write("', pathInfo: '"+request.getPathInfo()+"'\n};\n" +
                                "</script>\n" +
                                
-                               "<script language='javascript' src='"+ (hasSlash ? "../" : "") + relative + "com.itmill.toolkit.terminal.gwt.Client/com.itmill.toolkit.terminal.gwt.Client.nocache.js'></script>" +
+                               "<script src=\"http://maps.google.com/maps?file=api&amp;v=2\" type=\"text/javascript\"></script>"+
+                               
+                               "<script language='javascript' src='"+ (hasSlash ? "../" : "") + relative + "com.itmill.toolkit.demo.reservation.gwt.WidgetSet/com.itmill.toolkit.demo.reservation.gwt.WidgetSet.nocache.js'></script>" +
 
                                "<link REL=\"stylesheet\" TYPE=\"text/css\" HREF=\""+request.getContextPath() + THEME_DIRECTORY_PATH+themeName+"/style.css\">" + 
                                "</head>\n<body>\n" +