aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com/itmill/toolkit/demo/sampler/ExampleUtil.java37
-rw-r--r--src/com/itmill/toolkit/demo/sampler/FeatureSet.java13
-rw-r--r--src/com/itmill/toolkit/demo/sampler/features/trees/TreeMultiSelect.java39
-rw-r--r--src/com/itmill/toolkit/demo/sampler/features/trees/TreeMultiSelect.pngbin0 -> 1832 bytes
-rw-r--r--src/com/itmill/toolkit/demo/sampler/features/trees/TreeMultiSelectExample.java103
-rw-r--r--src/com/itmill/toolkit/demo/sampler/features/trees/TreeSingleSelect.java39
-rw-r--r--src/com/itmill/toolkit/demo/sampler/features/trees/TreeSingleSelect.pngbin0 -> 1858 bytes
-rw-r--r--src/com/itmill/toolkit/demo/sampler/features/trees/TreeSingleSelectExample.java125
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
new file mode 100644
index 0000000000..d06627020d
--- /dev/null
+++ b/src/com/itmill/toolkit/demo/sampler/features/trees/TreeMultiSelect.png
Binary files differ
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
new file mode 100644
index 0000000000..95de0929d4
--- /dev/null
+++ b/src/com/itmill/toolkit/demo/sampler/features/trees/TreeSingleSelect.png
Binary files differ
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);
+ }
+ }
+ }
+}