diff options
author | Matti Tahvonen <matti.tahvonen@itmill.com> | 2007-08-16 09:40:45 +0000 |
---|---|---|
committer | Matti Tahvonen <matti.tahvonen@itmill.com> | 2007-08-16 09:40:45 +0000 |
commit | 9569ccde45f82a5770b29727cbc31eaeadaa3d89 (patch) | |
tree | eb50efcf035c06562cea2f7ad03dd4496b06e465 | |
parent | 080076036ec519a165ca561f9ca18e69360cf7a0 (diff) | |
download | vaadin-framework-9569ccde45f82a5770b29727cbc31eaeadaa3d89.tar.gz vaadin-framework-9569ccde45f82a5770b29727cbc31eaeadaa3d89.zip |
added form component and form layout, removed relying on style when choosing implementation
svn changeset:2029/svn branch:trunk
-rw-r--r-- | src/com/itmill/toolkit/terminal/gwt/client/DefaultWidgetFactory.java | 5 | ||||
-rw-r--r-- | src/com/itmill/toolkit/terminal/gwt/client/ui/IForm.java | 106 | ||||
-rw-r--r-- | src/com/itmill/toolkit/ui/Form.java | 16 |
3 files changed, 124 insertions, 3 deletions
diff --git a/src/com/itmill/toolkit/terminal/gwt/client/DefaultWidgetFactory.java b/src/com/itmill/toolkit/terminal/gwt/client/DefaultWidgetFactory.java index 9e247fe8ab..23be945b2c 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/DefaultWidgetFactory.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/DefaultWidgetFactory.java @@ -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 index 0000000000..dfa04f19d6 --- /dev/null +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IForm.java @@ -0,0 +1,106 @@ +package com.itmill.toolkit.terminal.gwt.client.ui;
+
+import java.util.HashMap;
+import java.util.Iterator;
+
+import com.google.gwt.user.client.ui.FlexTable;
+import com.google.gwt.user.client.ui.Grid;
+import com.google.gwt.user.client.ui.SimplePanel;
+import com.google.gwt.user.client.ui.Widget;
+import com.itmill.toolkit.terminal.gwt.client.ApplicationConnection;
+import com.itmill.toolkit.terminal.gwt.client.Caption;
+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 IForm extends SimplePanel implements Paintable {
+
+ public static final String CLASSNAME = "i-form";
+
+ private Layout lo;
+
+ private ApplicationConnection client;
+
+ public IForm() {
+ super();
+ setStyleName("CLASSNAME");
+ }
+
+ public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
+ this.client = client;
+ UIDL layoutUidl = uidl.getChildUIDL(0);
+ if(lo == null) {
+ if(uidl.hasAttribute("layoutStyle")) {
+ lo = (Layout) client.getWidget(layoutUidl);
+ } else {
+ lo = (Layout) new DefaultLayout();
+ // manually register paintable due omitting factory
+ client.registerPaintable(layoutUidl.getId(), lo);
+ }
+ setWidget((Widget) lo);
+ }
+ lo.updateFromUIDL(layoutUidl, client);
+ }
+
+ /**
+ * Two col Layout that places caption on left col and field on right col
+ */
+ public class DefaultLayout extends FlexTable implements Layout {
+
+ HashMap componentToCaption = new HashMap();
+
+ public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
+ int i = 0;
+ for(Iterator it = uidl.getChildIterator();it.hasNext();i++) {
+ prepareCell(i, 1);
+ UIDL childUidl = (UIDL) it.next();
+ Paintable p = (Paintable) client.getWidget(childUidl);
+ Caption c = (Caption) componentToCaption.get(p);
+ if(c == null) {
+ c = new Caption(p);
+ componentToCaption.put(p, c);
+ }
+ Paintable oldComponent = (Paintable) getWidget(i, 1);
+ if(oldComponent == null) {
+ setWidget(i,1,(Widget) p);
+ } else if (oldComponent != p) {
+ client.unregisterPaintable(oldComponent);
+ setWidget(i,1,(Widget) p);
+ }
+ setWidget(i,0,c);
+ p.updateFromUIDL(childUidl, client);
+ }
+ i++;
+ while(getRowCount() > i) {
+ Paintable p = (Paintable) getWidget(i,1);
+ client.unregisterPaintable(p);
+ componentToCaption.remove(p);
+ removeRow(i);
+ }
+ }
+
+ public boolean hasChildComponent(Widget component) {
+ return componentToCaption.containsKey(component);
+ }
+
+ public void replaceChildComponent(Widget oldComponent, Widget newComponent) {
+ int i;
+ for(i = 0; i < getRowCount(); i++) {
+ if(oldComponent == getWidget(i, 1)) {
+ Caption newCap = new Caption((Paintable) newComponent);
+ setWidget(i,0,newCap);
+ setWidget(i,1,newComponent);
+ client.unregisterPaintable((Paintable) oldComponent);
+ break;
+ }
+ }
+ }
+
+ public void updateCaption(Paintable component, UIDL uidl) {
+ Caption c = (Caption) componentToCaption.get(component);
+ if(c != null)
+ c.updateCaption(uidl);
+ }
+
+ }
+}
diff --git a/src/com/itmill/toolkit/ui/Form.java b/src/com/itmill/toolkit/ui/Form.java index 53826d8ace..9dc0c63ee2 100644 --- a/src/com/itmill/toolkit/ui/Form.java +++ b/src/com/itmill/toolkit/ui/Form.java @@ -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 |