]> source.dussan.org Git - vaadin-framework.git/commitdiff
added form component and form layout, removed relying on style when choosing implemen...
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Thu, 16 Aug 2007 09:40:45 +0000 (09:40 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Thu, 16 Aug 2007 09:40:45 +0000 (09:40 +0000)
svn changeset:2029/svn branch:trunk

src/com/itmill/toolkit/terminal/gwt/client/DefaultWidgetFactory.java
src/com/itmill/toolkit/terminal/gwt/client/ui/IForm.java [new file with mode: 0644]
src/com/itmill/toolkit/ui/Form.java

index 9e247fe8abb46bab9581e8ae8d0fbe3648c7ab3e..23be945b2c1da719792d562bc0636ab010001dc1 100644 (file)
@@ -8,6 +8,7 @@ import com.itmill.toolkit.terminal.gwt.client.ui.ICheckBox;
 import com.itmill.toolkit.terminal.gwt.client.ui.IComponent;
 import com.itmill.toolkit.terminal.gwt.client.ui.ICustomLayout;
 import com.itmill.toolkit.terminal.gwt.client.ui.IEmbedded;
+import com.itmill.toolkit.terminal.gwt.client.ui.IForm;
 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;
@@ -92,6 +93,8 @@ public class DefaultWidgetFactory implements WidgetFactory {
                        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();
                }
                return new IUnknownComponent();
 
@@ -171,6 +174,8 @@ public class DefaultWidgetFactory implements WidgetFactory {
                        }
                } 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";
                }
 
                return "com.itmill.toolkit.terminal.gwt.client.ui.IUnknownComponent";
diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/IForm.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/IForm.java
new file mode 100644 (file)
index 0000000..dfa04f1
--- /dev/null
@@ -0,0 +1,106 @@
+package com.itmill.toolkit.terminal.gwt.client.ui;\r
+\r
+import java.util.HashMap;\r
+import java.util.Iterator;\r
+\r
+import com.google.gwt.user.client.ui.FlexTable;\r
+import com.google.gwt.user.client.ui.Grid;\r
+import com.google.gwt.user.client.ui.SimplePanel;\r
+import com.google.gwt.user.client.ui.Widget;\r
+import com.itmill.toolkit.terminal.gwt.client.ApplicationConnection;\r
+import com.itmill.toolkit.terminal.gwt.client.Caption;\r
+import com.itmill.toolkit.terminal.gwt.client.Layout;\r
+import com.itmill.toolkit.terminal.gwt.client.Paintable;\r
+import com.itmill.toolkit.terminal.gwt.client.UIDL;\r
+\r
+public class IForm extends SimplePanel implements Paintable {\r
+       \r
+       public static final String CLASSNAME = "i-form";\r
+       \r
+       private Layout  lo;\r
+\r
+       private ApplicationConnection client;\r
+       \r
+       public IForm() {\r
+               super();\r
+               setStyleName("CLASSNAME");\r
+       }\r
+       \r
+       public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {\r
+               this.client = client;\r
+               UIDL layoutUidl = uidl.getChildUIDL(0);\r
+               if(lo == null) {\r
+                       if(uidl.hasAttribute("layoutStyle")) {\r
+                               lo = (Layout) client.getWidget(layoutUidl);\r
+                       } else {\r
+                               lo = (Layout) new DefaultLayout();\r
+                               // manually register paintable due omitting factory\r
+                               client.registerPaintable(layoutUidl.getId(), lo);\r
+                       }\r
+                       setWidget((Widget) lo);\r
+               }\r
+               lo.updateFromUIDL(layoutUidl, client);\r
+       }\r
+\r
+       /**\r
+        * Two col Layout that places caption on left col and field on right col\r
+        */\r
+       public class DefaultLayout extends FlexTable implements Layout {\r
+               \r
+               HashMap componentToCaption = new HashMap();\r
+               \r
+               public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {\r
+                       int i = 0;\r
+                       for(Iterator it = uidl.getChildIterator();it.hasNext();i++) {\r
+                               prepareCell(i, 1);\r
+                               UIDL childUidl = (UIDL) it.next();\r
+                               Paintable p = (Paintable) client.getWidget(childUidl);\r
+                               Caption c = (Caption) componentToCaption.get(p);\r
+                               if(c == null) {\r
+                                       c = new Caption(p);\r
+                                       componentToCaption.put(p, c);\r
+                               }\r
+                               Paintable oldComponent = (Paintable) getWidget(i, 1);\r
+                               if(oldComponent == null) {\r
+                                       setWidget(i,1,(Widget) p);\r
+                               } else if (oldComponent != p) {\r
+                                       client.unregisterPaintable(oldComponent);\r
+                                       setWidget(i,1,(Widget) p);\r
+                               }\r
+                               setWidget(i,0,c);\r
+                               p.updateFromUIDL(childUidl, client);\r
+                       }\r
+                       i++;\r
+                       while(getRowCount() > i) {\r
+                               Paintable p = (Paintable) getWidget(i,1);\r
+                               client.unregisterPaintable(p);\r
+                               componentToCaption.remove(p);\r
+                               removeRow(i);\r
+                       }\r
+               }\r
+\r
+               public boolean hasChildComponent(Widget component) {\r
+                       return componentToCaption.containsKey(component);\r
+               }\r
+\r
+               public void replaceChildComponent(Widget oldComponent, Widget newComponent) {\r
+                       int i;\r
+                       for(i = 0; i < getRowCount(); i++) {\r
+                               if(oldComponent == getWidget(i, 1)) {\r
+                                       Caption newCap = new Caption((Paintable) newComponent);\r
+                                       setWidget(i,0,newCap);\r
+                                       setWidget(i,1,newComponent);\r
+                                       client.unregisterPaintable((Paintable) oldComponent);\r
+                                       break;\r
+                               }\r
+                       }\r
+               }\r
+\r
+               public void updateCaption(Paintable component, UIDL uidl) {\r
+                       Caption c = (Caption) componentToCaption.get(component);\r
+                       if(c != null)\r
+                               c.updateCaption(uidl);\r
+               }\r
+               \r
+       }\r
+}\r
index 53826d8acea318bc2e6ef6d2e318adff1483a9de..9dc0c63ee2bcb36872c40a91052d498b2b6d817a 100644 (file)
@@ -74,6 +74,10 @@ import com.itmill.toolkit.terminal.PaintTarget;
 public class Form extends AbstractField implements Item.Editor, Buffered, Item,
                Validatable {
 
+       private static final int FORM_LAYOUT_DEFAULT = 0;
+
+       private static final int FORM_LAYOUT_USER_DEFINED = 10;
+
        private Object propertyValue;
 
        /**
@@ -126,6 +130,8 @@ public class Form extends AbstractField implements Item.Editor, Buffered, Item,
         */
        private Collection visibleItemProperties;
 
+       private int layoutStyle = FORM_LAYOUT_DEFAULT;
+
        /**
         * Contructs a new form with default layout.
         * 
@@ -167,14 +173,16 @@ public class Form extends AbstractField implements Item.Editor, Buffered, Item,
 
        /* Documented in interface */
        public String getTag() {
-               return "component";
+               return "form";
        }
 
        /* Documented in interface */
        public void paintContent(PaintTarget target) throws PaintException {
                super.paintContent(target);
+               if(layoutStyle == FORM_LAYOUT_USER_DEFINED) {
+                       target.addAttribute("layoutStyle", "userdefined");
+               }
                layout.paint(target);
-
        }
 
        /*
@@ -553,7 +561,9 @@ public class Form extends AbstractField implements Item.Editor, Buffered, Item,
                // Use orderedlayout by default
                if (newLayout == null) {
                        newLayout = new OrderedLayout();
-                       newLayout.setStyle("form");
+                       layoutStyle = FORM_LAYOUT_DEFAULT;
+               } else {
+                       layoutStyle = FORM_LAYOUT_USER_DEFINED;
                }
 
                // Move components from previous layout