--- /dev/null
+package com.vaadin.tests.layouts;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.Validator;
+import com.vaadin.data.util.BeanItem;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.DefaultFieldFactory;
+import com.vaadin.ui.Field;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.FormFieldFactory;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Window;
+import com.vaadin.ui.Button.ClickEvent;
+
+public class GridLayoutCaptions extends TestBase {
+
+ class CustomForm extends Form {
+ private com.vaadin.ui.GridLayout layout;
+
+ private VerticalLayout wrapper = new VerticalLayout();
+ private CssLayout wrapper2 = new CssLayout();
+
+ private FormFieldFactory fff = new FormFieldFactory() {
+ public Field createField(Item item, Object propertyId,
+ Component uiContext) {
+
+ if (propertyId.equals(DataPOJO.Fields.name.name())) {
+ Field f = DefaultFieldFactory.get().createField(item,
+ propertyId, uiContext);
+ f.setCaption("This is a long caption for the name field");
+ return f;
+
+ } else if (propertyId.equals(DataPOJO.Fields.hp.name())) {
+ Field f = DefaultFieldFactory.get().createField(item,
+ propertyId, uiContext);
+ f
+ .setCaption("This is a long caption for the HP field, but it has a VL as a wrapper");
+
+ return f;
+
+ } else if (propertyId.equals(DataPOJO.Fields.place.name())) {
+ Field f = DefaultFieldFactory.get().createField(item,
+ propertyId, uiContext);
+ f
+ .setCaption("This is a long caption for the Place field, but it has a CSSLo as a wrapper");
+
+ return f;
+
+ } else if (propertyId.equals(DataPOJO.Fields.price.name())) {
+ Field f = DefaultFieldFactory.get().createField(item,
+ propertyId, uiContext);
+ f
+ .setCaption("With size undefined the caption behaves like this...");
+ f.setSizeFull();
+
+ return f;
+
+ } else {
+ return DefaultFieldFactory.get().createField(item,
+ propertyId, uiContext);
+ }
+ }
+ };
+
+ public CustomForm() {
+ super();
+ layout = new GridLayout(3, 3);
+ layout.addComponent(wrapper, 1, 0);
+ layout.addComponent(wrapper2, 2, 0);
+ layout.setSpacing(true);
+
+ setLayout(layout);
+ setFormFieldFactory(fff);
+
+ Label l = new Label("A label with caption");
+ l.setCaption("A really long caption that is clipped");
+
+ layout.addComponent(l, 0, 2);
+
+ Label l2 = new Label("A wrapped label with caption");
+ l2.setCaption("A really long caption that is not clipped");
+
+ VerticalLayout vl = new VerticalLayout();
+ vl.addComponent(l2);
+
+ layout.addComponent(vl, 1, 2);
+
+ }
+
+ public void createErrors() {
+ Validator.InvalidValueException ive = new Validator.InvalidValueException(
+ "Ipsum lipsum laarum lop... ");
+
+ for (Object propIDs : getItemDataSource().getItemPropertyIds()) {
+ ((TextField) getField(propIDs)).setComponentError(ive);
+
+ }
+
+ }
+
+ public void clearErrors() {
+ for (Object propIDs : getItemDataSource().getItemPropertyIds()) {
+ ((TextField) getField(propIDs)).setComponentError(null);
+
+ }
+ }
+
+ @Override
+ protected void attachField(Object propertyId, Field field) {
+
+ if (propertyId.equals(DataPOJO.Fields.name.name())) {
+ layout.addComponent(field, 0, 0);
+
+ } else if (propertyId.equals(DataPOJO.Fields.hp.name())) {
+ wrapper.removeAllComponents();
+ wrapper.addComponent(field);
+ } else if (propertyId.equals(DataPOJO.Fields.place.name())) {
+ wrapper2.removeAllComponents();
+ wrapper2.addComponent(field);
+ } else if (propertyId.equals(DataPOJO.Fields.price.name())) {
+ layout.addComponent(field, 0, 1);
+ }
+
+ }
+ }
+
+ public static class DataPOJO {
+
+ public enum Fields {
+ name, price, hp, place;
+ }
+
+ private String name;
+ private int price;
+ private String hp;
+ private String place;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getPrice() {
+ return price;
+ }
+
+ public void setPrice(int price) {
+ this.price = price;
+ }
+
+ public String getHp() {
+ return hp;
+ }
+
+ public void setHp(String hp) {
+ this.hp = hp;
+ }
+
+ public String getPlace() {
+ return place;
+ }
+
+ public void setPlace(String place) {
+ this.place = place;
+ }
+
+ }
+
+ @Override
+ protected void setup() {
+ Window mainWindow = new Window("Formlayoutcaptionboom Application");
+ Label label = new Label("Hello Vaadin user");
+ mainWindow.addComponent(label);
+ setMainWindow(mainWindow);
+
+ DataPOJO forDemo = new DataPOJO();
+
+ BeanItem<DataPOJO> bi = new BeanItem<DataPOJO>(forDemo);
+
+ final CustomForm aFormWithGl = new CustomForm();
+
+ aFormWithGl.setItemDataSource(bi);
+
+ mainWindow.addComponent(aFormWithGl);
+
+ Button b = new Button("Give me an error!", new Button.ClickListener() {
+ public void buttonClick(ClickEvent event) {
+ aFormWithGl.createErrors();
+
+ }
+ });
+ mainWindow.addComponent(b);
+
+ Button b2 = new Button("Get rid of an error!",
+ new Button.ClickListener() {
+ public void buttonClick(ClickEvent event) {
+ aFormWithGl.clearErrors();
+
+ }
+ });
+ mainWindow.addComponent(b2);
+
+ }
+
+ @Override
+ protected String getDescription() {
+ return "Captions in Gridlayout behaves differently than in other layouts";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 5424;
+ }
+
+}