]> source.dussan.org Git - vaadin-framework.git/commitdiff
better test case for AbsoluteLayout. "Köyhän miehen wysiwyg"
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Thu, 9 Apr 2009 11:52:51 +0000 (11:52 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Thu, 9 Apr 2009 11:52:51 +0000 (11:52 +0000)
svn changeset:7377/svn branch:6.0

src/com/itmill/toolkit/tests/layouts/TestAbsoluteLayout.java

index 6631df29636954e3863ef138c08202b9b4d7743c..0550652c93fe067da35df3a6acadee87f4768240 100644 (file)
@@ -1,12 +1,63 @@
 package com.itmill.toolkit.tests.layouts;\r
 \r
+import java.util.Arrays;\r
+import java.util.Iterator;\r
+\r
+import com.itmill.toolkit.data.Container;\r
+import com.itmill.toolkit.data.Item;\r
+import com.itmill.toolkit.data.Property;\r
+import com.itmill.toolkit.data.Property.ValueChangeEvent;\r
+import com.itmill.toolkit.data.Property.ValueChangeListener;\r
+import com.itmill.toolkit.data.util.BeanItem;\r
+import com.itmill.toolkit.data.util.IndexedContainer;\r
 import com.itmill.toolkit.tests.components.TestBase;\r
 import com.itmill.toolkit.ui.AbsoluteLayout;\r
+import com.itmill.toolkit.ui.AbstractComponent;\r
+import com.itmill.toolkit.ui.BaseFieldFactory;\r
 import com.itmill.toolkit.ui.Button;\r
+import com.itmill.toolkit.ui.Component;\r
+import com.itmill.toolkit.ui.Field;\r
+import com.itmill.toolkit.ui.FieldFactory;\r
+import com.itmill.toolkit.ui.Form;\r
 import com.itmill.toolkit.ui.Label;\r
+import com.itmill.toolkit.ui.NativeSelect;\r
+import com.itmill.toolkit.ui.TextField;\r
+import com.itmill.toolkit.ui.Window;\r
+import com.itmill.toolkit.ui.Button.ClickEvent;\r
 \r
 public class TestAbsoluteLayout extends TestBase {\r
 \r
+    private static class MFieldFactory extends BaseFieldFactory {\r
+        @Override\r
+        public Field createField(Container container, Object itemId,\r
+                Object propertyId, Component uiContext) {\r
+            // TODO Auto-generated method stub\r
+            return super.createField(container, itemId, propertyId, uiContext);\r
+        }\r
+\r
+        @Override\r
+        public Field createField(Item item, Object propertyId,\r
+                Component uiContext) {\r
+            if (propertyId.equals("CSSString")) {\r
+                TextField f = new TextField();\r
+                f.setRows(5);\r
+                f.setHeight("8em");\r
+                f.setCaption("CSS string");\r
+                return f;\r
+            }\r
+            return super.createField(item, propertyId, uiContext);\r
+        }\r
+\r
+        private static MFieldFactory instance;\r
+\r
+        public static FieldFactory get() {\r
+            if (instance == null) {\r
+                instance = new MFieldFactory();\r
+            }\r
+            return instance;\r
+        }\r
+    };\r
+\r
     @Override\r
     protected String getDescription() {\r
         return "This is absolute layout tester.";\r
@@ -22,6 +73,8 @@ public class TestAbsoluteLayout extends TestBase {
         AbsoluteLayout layout = new AbsoluteLayout();\r
         setTheme("tests-tickets");\r
         layout.setStyleName("cyan");\r
+        layout.setWidth("1000px");\r
+        layout.setHeight("500px");\r
 \r
         layout.addComponent(new Label("Hello World"));\r
 \r
@@ -50,5 +103,110 @@ public class TestAbsoluteLayout extends TestBase {
         getLayout().setSizeFull();\r
         getLayout().addComponent(layout);\r
 \r
+        getMainWindow().addWindow(new EditorWindow(layout));\r
+\r
     }\r
+\r
+    public class EditorWindow extends Window {\r
+        private final AbsoluteLayout l;\r
+        private Form componentEditor;\r
+        private Form positionEditor;\r
+\r
+        public EditorWindow(AbsoluteLayout lo) {\r
+            super("AbsoluteLayout editor aka köyhän miehen wysiwyg");\r
+            l = lo;\r
+\r
+            setHeight("600px");\r
+\r
+            Button componentChooser = new Button("choose component to edit");\r
+            componentChooser.addListener(new Button.ClickListener() {\r
+                public void buttonClick(ClickEvent event) {\r
+                    final Window chooser = new Window("Choose component");\r
+                    chooser.getLayout().setSizeUndefined();\r
+                    chooser.setModal(true);\r
+\r
+                    NativeSelect select = new NativeSelect(\r
+                            "Choose component to edit");\r
+\r
+                    select.setNullSelectionAllowed(false);\r
+\r
+                    IndexedContainer container = new IndexedContainer();\r
+                    container.addContainerProperty("caption", String.class, "");\r
+                    Iterator<Component> componentIterator = l\r
+                            .getComponentIterator();\r
+                    while (componentIterator.hasNext()) {\r
+                        AbstractComponent next = (AbstractComponent) componentIterator\r
+                                .next();\r
+                        Item item = container.addItem(next);\r
+\r
+                        String caption = next.getTag();\r
+\r
+                        caption += "; cap: " + next.getCaption() + "; debugid"\r
+                                + getDebugId();\r
+\r
+                        if (next instanceof Property) {\r
+                            caption += " value:" + ((Property) next).getValue();\r
+                        }\r
+\r
+                        item.getItemProperty("caption").setValue(caption);\r
+                    }\r
+                    select.setContainerDataSource(container);\r
+                    select.setItemCaptionPropertyId("caption");\r
+                    select.setImmediate(true);\r
+\r
+                    select.addListener(new ValueChangeListener() {\r
+                        public void valueChange(ValueChangeEvent event) {\r
+                            editcomponent((Component) event.getProperty()\r
+                                    .getValue());\r
+                            getMainWindow().removeWindow(chooser);\r
+                        }\r
+\r
+                    });\r
+\r
+                    chooser.addComponent(select);\r
+\r
+                    getMainWindow().addWindow(chooser);\r
+\r
+                }\r
+            });\r
+\r
+            addComponent(componentChooser);\r
+\r
+            componentEditor = new Form();\r
+            componentEditor.setWriteThrough(false);\r
+            componentEditor.setCaption("Component properties:");\r
+            componentEditor.setFieldFactory(MFieldFactory.get());\r
+            addComponent(componentEditor);\r
+\r
+            positionEditor = new Form();\r
+            positionEditor.setCaption("Component position");\r
+            positionEditor.setWriteThrough(false);\r
+            positionEditor.setFieldFactory(MFieldFactory.get());\r
+            addComponent(positionEditor);\r
+\r
+            Button b = new Button("Commit changes", new Button.ClickListener() {\r
+                public void buttonClick(ClickEvent event) {\r
+                    positionEditor.commit();\r
+                    componentEditor.commit();\r
+                }\r
+            });\r
+            addComponent(b);\r
+\r
+        }\r
+\r
+        private void editcomponent(Component value) {\r
+\r
+            BeanItem beanItem = new BeanItem(value);\r
+            componentEditor.setItemDataSource(beanItem, Arrays\r
+                    .asList(new String[] { "width", "widthUnits", "height",\r
+                            "heightUnits", "caption", "styleName" }));\r
+\r
+            beanItem = new BeanItem(l.getPosition(value));\r
+\r
+            positionEditor.setItemDataSource(beanItem);\r
+\r
+        }\r
+\r
+    }\r
+\r
 }\r