summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatti Tahvonen <matti.tahvonen@itmill.com>2007-08-16 09:40:45 +0000
committerMatti Tahvonen <matti.tahvonen@itmill.com>2007-08-16 09:40:45 +0000
commit9569ccde45f82a5770b29727cbc31eaeadaa3d89 (patch)
treeeb50efcf035c06562cea2f7ad03dd4496b06e465
parent080076036ec519a165ca561f9ca18e69360cf7a0 (diff)
downloadvaadin-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.java5
-rw-r--r--src/com/itmill/toolkit/terminal/gwt/client/ui/IForm.java106
-rw-r--r--src/com/itmill/toolkit/ui/Form.java16
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