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;
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();
}
} 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";
--- /dev/null
+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
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;
/**
*/
private Collection visibleItemProperties;
+ private int layoutStyle = FORM_LAYOUT_DEFAULT;
+
/**
* Contructs a new form with default layout.
*
/* 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);
-
}
/*
// 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