diff options
author | Teppo Kurki <teppo.kurki@itmill.com> | 2009-01-14 13:14:45 +0000 |
---|---|---|
committer | Teppo Kurki <teppo.kurki@itmill.com> | 2009-01-14 13:14:45 +0000 |
commit | 852c189a1eb82a00b5f4802c343b36dcb3e99c5c (patch) | |
tree | e30c5902d8575b34571667a7a63cd4cacd5d3168 /src | |
parent | 3fe6d3804a44a5a0ebb56124f3860ef1946ac021 (diff) | |
download | vaadin-framework-852c189a1eb82a00b5f4802c343b36dcb3e99c5c.tar.gz vaadin-framework-852c189a1eb82a00b5f4802c343b36dcb3e99c5c.zip |
Added Tree examples and one helper method to ExampleUtil.
svn changeset:6532/svn branch:trunk
Diffstat (limited to 'src')
8 files changed, 356 insertions, 0 deletions
diff --git a/src/com/itmill/toolkit/demo/sampler/ExampleUtil.java b/src/com/itmill/toolkit/demo/sampler/ExampleUtil.java index 5dfcdc20d4..36bbb09a12 100644 --- a/src/com/itmill/toolkit/demo/sampler/ExampleUtil.java +++ b/src/com/itmill/toolkit/demo/sampler/ExampleUtil.java @@ -2,6 +2,7 @@ package com.itmill.toolkit.demo.sampler; import com.itmill.toolkit.data.Container; import com.itmill.toolkit.data.Item; +import com.itmill.toolkit.data.util.HierarchicalContainer; import com.itmill.toolkit.data.util.IndexedContainer; import com.itmill.toolkit.terminal.Resource; import com.itmill.toolkit.terminal.ThemeResource; @@ -96,6 +97,7 @@ public final class ExampleUtil { public static final Object iso3166_PROPERTY_NAME = "name"; public static final Object iso3166_PROPERTY_SHORT = "short"; public static final Object iso3166_PROPERTY_FLAG = "flag"; + public static final Object hw_PROPERTY_NAME = "name"; private static final IndexedContainer iso3166Container = new IndexedContainer(); static { iso3166Container.addContainerProperty(iso3166_PROPERTY_NAME, @@ -115,10 +117,45 @@ public final class ExampleUtil { } } + private static final String[][] hardware = { // + { "Desktops", "Dell OptiPlex GX240", "Dell OptiPlex GX260", + "Dell OptiPlex GX280" }, + { "Monitors", "Benq T190HD", "Benq T220HD", "Benq T240HD" }, + { "Laptops", "IBM ThinkPad T40", "IBM ThinkPad T43", + "IBM ThinkPad T60" } }; + public static IndexedContainer getISO3166Container() { return iso3166Container; } + public static HierarchicalContainer getHardwareContainer() { + Item item = null; + int itemId = 0; // Increasing numbering for itemId:s + + // Create new container + HierarchicalContainer hwContainer = new HierarchicalContainer(); + // Create containerproperty for name + hwContainer.addContainerProperty(hw_PROPERTY_NAME, String.class, null); + for (int i = 0; i < hardware.length; i++) { + // Add new item + item = hwContainer.addItem(itemId); + // Add name property for item + item.getItemProperty(hw_PROPERTY_NAME).setValue(hardware[i][0]); + // Allow children + hwContainer.setChildrenAllowed(itemId, true); + itemId++; + for (int j = 1; j < hardware[i].length; j++) { + // Add child items + item = hwContainer.addItem(itemId); + item.getItemProperty(hw_PROPERTY_NAME).setValue(hardware[i][j]); + hwContainer.setParent(itemId, itemId - j); + hwContainer.setChildrenAllowed(itemId, false); + itemId++; + } + } + return hwContainer; + } + public static void fillContainerWithEmailAddresses(Container c, int amount) { for (int i = 0; i < amount; i++) { // TODO diff --git a/src/com/itmill/toolkit/demo/sampler/FeatureSet.java b/src/com/itmill/toolkit/demo/sampler/FeatureSet.java index b7a4699789..00d77d9250 100644 --- a/src/com/itmill/toolkit/demo/sampler/FeatureSet.java +++ b/src/com/itmill/toolkit/demo/sampler/FeatureSet.java @@ -49,6 +49,8 @@ import com.itmill.toolkit.demo.sampler.features.text.LabelRich; import com.itmill.toolkit.demo.sampler.features.text.RichTextEditor; import com.itmill.toolkit.demo.sampler.features.text.TextArea; import com.itmill.toolkit.demo.sampler.features.text.TextFieldSingle; +import com.itmill.toolkit.demo.sampler.features.trees.TreeMultiSelect; +import com.itmill.toolkit.demo.sampler.features.trees.TreeSingleSelect; import com.itmill.toolkit.demo.sampler.features.windows.WindowChild; import com.itmill.toolkit.demo.sampler.features.windows.WindowChildAutosize; import com.itmill.toolkit.demo.sampler.features.windows.WindowChildModal; @@ -106,6 +108,7 @@ public class FeatureSet extends Feature { new Windows(), // new Tables(),// new Texts(), // + new Trees(), // }); } } @@ -269,6 +272,16 @@ public class FeatureSet extends Feature { } } + public static class Trees extends FeatureSet { + public Trees() { + super("Trees", new Feature[] { + // + new TreeSingleSelect(), // + new TreeMultiSelect(), // + }); + } + } + // ---------------------------------------------------------- /* * FeatureSet implementation follows. diff --git a/src/com/itmill/toolkit/demo/sampler/features/trees/TreeMultiSelect.java b/src/com/itmill/toolkit/demo/sampler/features/trees/TreeMultiSelect.java new file mode 100644 index 0000000000..0a46bb6500 --- /dev/null +++ b/src/com/itmill/toolkit/demo/sampler/features/trees/TreeMultiSelect.java @@ -0,0 +1,39 @@ +package com.itmill.toolkit.demo.sampler.features.trees;
+
+import com.itmill.toolkit.demo.sampler.APIResource;
+import com.itmill.toolkit.demo.sampler.Feature;
+import com.itmill.toolkit.demo.sampler.NamedExternalResource;
+import com.itmill.toolkit.ui.Tree;
+
+public class TreeMultiSelect extends Feature {
+ @Override
+ public String getName() {
+ return "Tree - Multiselect";
+ }
+
+ @Override
+ public String getDescription() {
+ return "The Tree component allows a natural way to represent"
+ + " data that has hierarchical relationships, such as"
+ + " filesystems or message threads."
+ + "<br>In this example, you can select multiple tree nodes"
+ + " and delete your selection. You can also click your"
+ + " selections again, and have no selections made.";
+ }
+
+ @Override
+ public APIResource[] getRelatedAPI() {
+ return new APIResource[] { new APIResource(Tree.class) };
+ }
+
+ @Override
+ public Class[] getRelatedFeatures() {
+ return new Class[] { TreeSingleSelect.class };
+ }
+
+ @Override
+ public NamedExternalResource[] getRelatedResources() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+}
diff --git a/src/com/itmill/toolkit/demo/sampler/features/trees/TreeMultiSelect.png b/src/com/itmill/toolkit/demo/sampler/features/trees/TreeMultiSelect.png Binary files differnew file mode 100644 index 0000000000..d06627020d --- /dev/null +++ b/src/com/itmill/toolkit/demo/sampler/features/trees/TreeMultiSelect.png diff --git a/src/com/itmill/toolkit/demo/sampler/features/trees/TreeMultiSelectExample.java b/src/com/itmill/toolkit/demo/sampler/features/trees/TreeMultiSelectExample.java new file mode 100644 index 0000000000..c012b81d56 --- /dev/null +++ b/src/com/itmill/toolkit/demo/sampler/features/trees/TreeMultiSelectExample.java @@ -0,0 +1,103 @@ +package com.itmill.toolkit.demo.sampler.features.trees;
+
+import java.util.Set;
+
+import com.itmill.toolkit.data.Item;
+import com.itmill.toolkit.demo.sampler.ExampleUtil;
+import com.itmill.toolkit.event.Action;
+import com.itmill.toolkit.ui.AbstractSelect;
+import com.itmill.toolkit.ui.Button;
+import com.itmill.toolkit.ui.Tree;
+import com.itmill.toolkit.ui.VerticalLayout;
+import com.itmill.toolkit.ui.Button.ClickEvent;
+
+public class TreeMultiSelectExample extends VerticalLayout implements
+ Button.ClickListener, Action.Handler {
+
+ private static final Action ACTION_ADD = new Action("Add child item");
+ private static final Action ACTION_DELETE = new Action("Delete");
+ private static final Action[] ACTIONS = new Action[] { ACTION_ADD,
+ ACTION_DELETE };
+
+ private Tree t;
+ private Button delete;
+ private int itemId;
+
+ public TreeMultiSelectExample() {
+ setSpacing(true);
+
+ // Create new Tree object using a hierarchical container from
+ // ExampleUtil class
+ t = new Tree("Hardware Inventory", ExampleUtil.getHardwareContainer());
+
+ // Add Actionhandler
+
+ t.addActionHandler(this);
+
+ t.setImmediate(true);
+
+ // Set tree to show the 'name' property as caption for items
+ t.setItemCaptionPropertyId(ExampleUtil.hw_PROPERTY_NAME);
+ t.setItemCaptionMode(AbstractSelect.ITEM_CAPTION_MODE_PROPERTY);
+
+ // Starting itemId # for new items
+ itemId = t.getContainerDataSource().size();
+
+ // Expand whole tree
+ for (int i = 0; i < itemId; i++) {
+ t.expandItemsRecursively(i);
+ }
+
+ // Create the 'delete button'
+ delete = new Button("Delete", this, "buttonClick");
+
+ addComponent(delete);
+ addComponent(t);
+
+ // Set multiselect mode
+ t.setMultiSelect(true);
+ }
+
+ public void buttonClick(ClickEvent event) {
+ // Delete all the selected objects
+ Object[] toDelete = ((Set<Object>) t.getValue()).toArray();
+ for (int i = 0; i < toDelete.length; i++) {
+ handleAction(ACTION_DELETE, t, toDelete[i]);
+ }
+ }
+
+ /*
+ * Returns the set of available actions
+ */
+ public Action[] getActions(Object target, Object sender) {
+ return ACTIONS;
+ }
+
+ /*
+ * Handle actions
+ */
+ public void handleAction(Action action, Object sender, Object target) {
+ if (action == ACTION_ADD) {
+ // Allow children for the target item
+ t.setChildrenAllowed(target, true);
+
+ // Create new item, disallow children, add name, set parent
+ Item i = t.addItem(itemId);
+ t.setChildrenAllowed(itemId, false);
+ String newItemName = "New Item # " + itemId;
+ i.getItemProperty(ExampleUtil.hw_PROPERTY_NAME).setValue(
+ newItemName);
+ t.setParent(itemId, target);
+ t.expandItem(target);
+ itemId++;
+ } else if (action == ACTION_DELETE) {
+ Object parent = t.getParent(target);
+ t.removeItem(target);
+ // If the deleted object's parent has no more children, set it's
+ // childrenallowed property to false
+ if (parent != null && t.getChildren(parent).size() == 0) {
+ t.setChildrenAllowed(parent, false);
+ }
+ }
+ }
+}
diff --git a/src/com/itmill/toolkit/demo/sampler/features/trees/TreeSingleSelect.java b/src/com/itmill/toolkit/demo/sampler/features/trees/TreeSingleSelect.java new file mode 100644 index 0000000000..702969c799 --- /dev/null +++ b/src/com/itmill/toolkit/demo/sampler/features/trees/TreeSingleSelect.java @@ -0,0 +1,39 @@ +package com.itmill.toolkit.demo.sampler.features.trees;
+
+import com.itmill.toolkit.demo.sampler.APIResource;
+import com.itmill.toolkit.demo.sampler.Feature;
+import com.itmill.toolkit.demo.sampler.NamedExternalResource;
+import com.itmill.toolkit.ui.Tree;
+
+public class TreeSingleSelect extends Feature {
+ @Override
+ public String getName() {
+ return "Tree - Single select";
+ }
+
+ @Override
+ public String getDescription() {
+ return "The Tree component allows a natural way to represent"
+ + " data that has hierarchical relationships, such as"
+ + " filesystems or message threads."
+ + "<br>In this example, you can select any single tree node"
+ + " and modify its 'name' property. You can also click your"
+ + " selection again, and have no selections made.";
+ }
+
+ @Override
+ public APIResource[] getRelatedAPI() {
+ return new APIResource[] { new APIResource(Tree.class) };
+ }
+
+ @Override
+ public Class[] getRelatedFeatures() {
+ return new Class[] { TreeMultiSelect.class };
+ }
+
+ @Override
+ public NamedExternalResource[] getRelatedResources() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+}
diff --git a/src/com/itmill/toolkit/demo/sampler/features/trees/TreeSingleSelect.png b/src/com/itmill/toolkit/demo/sampler/features/trees/TreeSingleSelect.png Binary files differnew file mode 100644 index 0000000000..95de0929d4 --- /dev/null +++ b/src/com/itmill/toolkit/demo/sampler/features/trees/TreeSingleSelect.png diff --git a/src/com/itmill/toolkit/demo/sampler/features/trees/TreeSingleSelectExample.java b/src/com/itmill/toolkit/demo/sampler/features/trees/TreeSingleSelectExample.java new file mode 100644 index 0000000000..e68510050a --- /dev/null +++ b/src/com/itmill/toolkit/demo/sampler/features/trees/TreeSingleSelectExample.java @@ -0,0 +1,125 @@ +package com.itmill.toolkit.demo.sampler.features.trees;
+
+import com.itmill.toolkit.data.Item;
+import com.itmill.toolkit.data.Property;
+import com.itmill.toolkit.data.Property.ValueChangeEvent;
+import com.itmill.toolkit.demo.sampler.ExampleUtil;
+import com.itmill.toolkit.event.Action;
+import com.itmill.toolkit.ui.AbstractSelect;
+import com.itmill.toolkit.ui.Button;
+import com.itmill.toolkit.ui.HorizontalLayout;
+import com.itmill.toolkit.ui.TextField;
+import com.itmill.toolkit.ui.Tree;
+import com.itmill.toolkit.ui.VerticalLayout;
+import com.itmill.toolkit.ui.Button.ClickEvent;
+
+public class TreeSingleSelectExample extends VerticalLayout implements
+ Property.ValueChangeListener, Button.ClickListener, Action.Handler {
+
+ private static final Action ACTION_ADD = new Action("Add child item");
+ private static final Action ACTION_DELETE = new Action("Delete");
+ private static final Action[] ACTIONS = new Action[] { ACTION_ADD,
+ ACTION_DELETE };
+
+ private Tree t;
+ private TextField editor;
+ private Button change;
+ private int itemId;
+
+ public TreeSingleSelectExample() {
+ setSpacing(true);
+
+ // Create new Tree object using a hierarchical container from
+ // ExampleUtil class
+ t = new Tree("Hardware Inventory", ExampleUtil.getHardwareContainer());
+
+ // Add Valuechangelistener and Actionhandler
+ t.addListener(this);
+ t.addActionHandler(this);
+
+ t.setImmediate(true);
+
+ // Set tree to show the 'name' property as caption for items
+ t.setItemCaptionPropertyId(ExampleUtil.hw_PROPERTY_NAME);
+ t.setItemCaptionMode(AbstractSelect.ITEM_CAPTION_MODE_PROPERTY);
+
+ // Starting itemId # for new items
+ itemId = t.getContainerDataSource().size();
+
+ // Expand whole tree
+ for (int i = 0; i < itemId; i++) {
+ t.expandItemsRecursively(i);
+ }
+
+ // Create the 'editor bar' (textfield and button in a horizontallayout)
+ editor = new TextField();
+ editor.setImmediate(true);
+ change = new Button("Apply", this, "buttonClick");
+ change.setEnabled(false);
+ HorizontalLayout editBar = new HorizontalLayout();
+ editBar.addComponent(editor);
+ editBar.addComponent(change);
+
+ addComponent(editBar);
+ addComponent(t);
+
+ }
+
+ public void valueChange(ValueChangeEvent event) {
+ if (event.getProperty().getValue() != null) {
+ // If something is selected from the tree, get it's 'name' and
+ // insert it into the textfield
+ editor.setValue(t.getItem(event.getProperty().getValue())
+ .getItemProperty(ExampleUtil.hw_PROPERTY_NAME));
+ editor.requestRepaint();
+ change.setEnabled(true);
+ } else {
+ editor.setValue("");
+ change.setEnabled(false);
+ }
+ }
+
+ public void buttonClick(ClickEvent event) {
+ // If the edited value contains something, set it to be the item's new
+ // 'name' property
+ if (!editor.getValue().equals("")) {
+ t.getItem(t.getValue()).getItemProperty(
+ ExampleUtil.hw_PROPERTY_NAME).setValue(editor.getValue());
+ }
+ }
+
+ /*
+ * Returns the set of available actions
+ */
+ public Action[] getActions(Object target, Object sender) {
+ return ACTIONS;
+ }
+
+ /*
+ * Handle actions
+ */
+ public void handleAction(Action action, Object sender, Object target) {
+ if (action == ACTION_ADD) {
+ // Allow children for the target item
+ t.setChildrenAllowed(target, true);
+
+ // Create new item, disallow children, add name, set parent
+ Item i = t.addItem(itemId);
+ t.setChildrenAllowed(itemId, false);
+ String newItemName = "New Item # " + itemId;
+ i.getItemProperty(ExampleUtil.hw_PROPERTY_NAME).setValue(
+ newItemName);
+ t.setParent(itemId, target);
+ t.expandItem(target);
+ itemId++;
+ } else if (action == ACTION_DELETE) {
+ Object parent = t.getParent(target);
+ t.removeItem(target);
+ // If the deleted object's parent has no more children, set it's
+ // childrenallowed property to false
+ if (t.getChildren(parent).size() == 0) {
+ t.setChildrenAllowed(parent, false);
+ }
+ }
+ }
+}
|