From: Matti Tahvonen Date: Thu, 16 Aug 2007 09:40:45 +0000 (+0000) Subject: added form component and form layout, removed relying on style when choosing implemen... X-Git-Tag: 6.7.0.beta1~6097 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=9569ccde45f82a5770b29727cbc31eaeadaa3d89;p=vaadin-framework.git added form component and form layout, removed relying on style when choosing implementation svn changeset:2029/svn branch:trunk --- 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