package com.itmill.toolkit.tests.layouts;\r
\r
+import java.io.File;\r
+import java.net.URL;\r
+import java.util.ArrayList;\r
import java.util.Arrays;\r
import java.util.Iterator;\r
\r
\r
addComponent(componentChooser);\r
\r
+ Button addComp = new Button("add component");\r
+ addComp.addListener(new Button.ClickListener() {\r
+ public void buttonClick(ClickEvent event) {\r
+ final Window chooser = new Window(\r
+ "Choose component type to add");\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
+\r
+ URL resource = AbstractComponent.class.getResource(".");\r
+ File directory = new File(resource.getFile());\r
+ if (directory.exists()) {\r
+ // Get the list of the files contained in the\r
+ // package\r
+ final String[] files = directory.list();\r
+ for (int j = 0; j < files.length; j++) {\r
+ // we are only interested in .class files\r
+ if (files[j].endsWith(".class")) {\r
+ // removes the .class extension\r
+ String p = resource.toString()\r
+ + files[j].substring(0, files[j]\r
+ .length() - 6);\r
+ p = p.replaceAll(".*classes/", "");\r
+ p = p.replaceAll("/", ".");\r
+ Class c;\r
+ try {\r
+ c = Class.forName(p);\r
+ if (AbstractComponent.class\r
+ .isAssignableFrom(c)\r
+ && !p.toLowerCase().contains(\r
+ "layout")\r
+ && !p.toLowerCase().contains(\r
+ "abstract")) {\r
+ container.addItem(c);\r
+ }\r
+ } catch (ClassNotFoundException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ }\r
+ }\r
+ select.setContainerDataSource(container);\r
+ select.setImmediate(true);\r
+\r
+ select.addListener(new ValueChangeListener() {\r
+ public void valueChange(ValueChangeEvent event) {\r
+ Class c = (Class) event.getProperty().getValue();\r
+\r
+ try {\r
+ Component newInstance = (Component) c\r
+ .newInstance();\r
+ l.addComponent(newInstance);\r
+ editcomponent(newInstance);\r
+ getMainWindow().removeWindow(chooser);\r
+ } catch (InstantiationException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ } catch (IllegalAccessException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ }\r
+\r
+ }\r
+\r
+ });\r
+\r
+ chooser.addComponent(select);\r
+\r
+ getMainWindow().addWindow(chooser);\r
+\r
+ }\r
+ });\r
+\r
+ addComponent(addComp);\r
+\r
componentEditor = new Form();\r
componentEditor.setWriteThrough(false);\r
componentEditor.setCaption("Component properties:");\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
String c = "Component properties for "\r
+ value.getClass().getSimpleName();\r
+ ArrayList<String> fields = new ArrayList<String>(Arrays\r
+ .asList(new String[] { "width", "widthUnits", "height",\r
+ "heightUnits", "caption", "styleName" }));\r
if (value instanceof Label) {\r
c += "(" + ((Label) value).getValue() + ")";\r
+ fields.add("value");\r
}\r
+\r
+ componentEditor.setItemDataSource(beanItem, fields);\r
+\r
+ beanItem = new BeanItem(l.getPosition(value));\r
componentEditor.setCaption(c);\r
\r
positionEditor.setItemDataSource(beanItem);\r
\r
}\r
-\r
}\r
\r
}\r