import com.itmill.toolkit.event.ItemClickEvent;\r
import com.itmill.toolkit.event.ItemClickEvent.ItemClickListener;\r
import com.itmill.toolkit.ui.AbstractSelect;\r
-import com.itmill.toolkit.ui.Label;\r
import com.itmill.toolkit.ui.Tree;\r
import com.itmill.toolkit.ui.VerticalLayout;\r
\r
\r
private Tree t;\r
private int itemId;\r
- private Label l;\r
\r
public TreeMouseEventsExample() {\r
setSpacing(true);\r
// Disallow selecting items from the tree\r
t.setSelectable(false);\r
\r
- l = new Label();\r
addComponent(t);\r
- addComponent(l);\r
}\r
\r
public void itemClick(ItemClickEvent event) {\r
+ // Indicate which modifier keys are pressed\r
+ String modifiers = "";\r
+ if (event.isAltKey()) {\r
+ modifiers += "Alt ";\r
+ }\r
+ if (event.isCtrlKey()) {\r
+ modifiers += "Ctrl ";\r
+ }\r
+ if (event.isMetaKey()) {\r
+ modifiers += "Meta ";\r
+ }\r
+ if (event.isShiftKey()) {\r
+ modifiers += "Shift ";\r
+ }\r
+ if (modifiers.length() > 0) {\r
+ modifiers = "Modifiers: " + modifiers;\r
+ } else {\r
+ modifiers = "Modifiers: none";\r
+ }\r
switch (event.getButton()) {\r
case ItemClickEvent.BUTTON_LEFT:\r
// Left button click updates the 'selected' Label\r
- l.setValue("Selected item: " + event.getItem());\r
+ getWindow().showNotification("Selected item: " + event.getItem(),\r
+ modifiers);\r
break;\r
case ItemClickEvent.BUTTON_MIDDLE:\r
// Middle button click removes the item\r
Object parent = t.getParent(event.getItemId());\r
- l.setValue("Removed item: " + event.getItem());\r
+ getWindow().showNotification("Removed item: " + event.getItem(),\r
+ modifiers);\r
t.removeItem(event.getItemId());\r
if (parent != null && t.getChildren(parent).size() == 0) {\r
t.setChildrenAllowed(parent, false);\r
break;\r
case ItemClickEvent.BUTTON_RIGHT:\r
// Right button click creates a new child item\r
- l.setValue("Added item: New Item # " + itemId);\r
+ getWindow().showNotification("Added item: New Item # " + itemId,\r
+ modifiers);\r
t.setChildrenAllowed(event.getItemId(), true);\r
Item i = t.addItem(itemId);\r
t.setChildrenAllowed(itemId, false);\r
import com.itmill.toolkit.ui.HorizontalLayout;\r
import com.itmill.toolkit.ui.TextField;\r
import com.itmill.toolkit.ui.Tree;\r
-import com.itmill.toolkit.ui.VerticalLayout;\r
import com.itmill.toolkit.ui.Button.ClickEvent;\r
\r
-public class TreeSingleSelectExample extends VerticalLayout implements\r
+public class TreeSingleSelectExample extends HorizontalLayout implements\r
Property.ValueChangeListener, Button.ClickListener, Action.Handler {\r
\r
+ // Actions for the context menu\r
private static final Action ACTION_ADD = new Action("Add child item");\r
private static final Action ACTION_DELETE = new Action("Delete");\r
private static final Action[] ACTIONS = new Action[] { ACTION_ADD,\r
ACTION_DELETE };\r
\r
- private Tree t;\r
+ private Tree tree;\r
+\r
+ HorizontalLayout editBar;\r
private TextField editor;\r
private Button change;\r
- private int itemId;\r
\r
public TreeSingleSelectExample() {\r
setSpacing(true);\r
\r
- // Create new Tree object using a hierarchical container from\r
- // ExampleUtil class\r
- t = new Tree("Hardware Inventory", ExampleUtil.getHardwareContainer());\r
+ // Create the Tree,a dd to layout\r
+ tree = new Tree("Hardware Inventory");\r
+ addComponent(tree);\r
+\r
+ // Contents from a (prefilled example) hierarchical container:\r
+ tree.setContainerDataSource(ExampleUtil.getHardwareContainer());\r
\r
// Add Valuechangelistener and Actionhandler\r
- t.addListener(this);\r
- t.addActionHandler(this);\r
+ tree.addListener(this);\r
\r
- t.setImmediate(true);\r
+ // Add actions (context menu)\r
+ tree.addActionHandler(this);\r
\r
- // Set tree to show the 'name' property as caption for items\r
- t.setItemCaptionPropertyId(ExampleUtil.hw_PROPERTY_NAME);\r
- t.setItemCaptionMode(AbstractSelect.ITEM_CAPTION_MODE_PROPERTY);\r
+ // Cause valueChange immediately when the user selects\r
+ tree.setImmediate(true);\r
\r
- // Starting itemId # for new items\r
- itemId = t.getContainerDataSource().size();\r
+ // Set tree to show the 'name' property as caption for items\r
+ tree.setItemCaptionPropertyId(ExampleUtil.hw_PROPERTY_NAME);\r
+ tree.setItemCaptionMode(AbstractSelect.ITEM_CAPTION_MODE_PROPERTY);\r
\r
// Expand whole tree\r
- for (int i = 0; i < itemId; i++) {\r
- t.expandItemsRecursively(i);\r
+ for (Object id : tree.rootItemIds()) {\r
+ tree.expandItemsRecursively(id);\r
}\r
\r
// Create the 'editor bar' (textfield and button in a horizontallayout)\r
- editor = new TextField();\r
+ editBar = new HorizontalLayout();\r
+ editBar.setMargin(false, false, false, true);\r
+ editBar.setEnabled(false);\r
+ addComponent(editBar);\r
+ // textfield\r
+ editor = new TextField("Item name");\r
editor.setImmediate(true);\r
- change = new Button("Apply", this, "buttonClick");\r
- change.setEnabled(false);\r
- HorizontalLayout editBar = new HorizontalLayout();\r
editBar.addComponent(editor);\r
+ // apply-button\r
+ change = new Button("Apply", this, "buttonClick");\r
editBar.addComponent(change);\r
-\r
- addComponent(editBar);\r
- addComponent(t);\r
-\r
+ editBar.setComponentAlignment(change, "bottom");\r
}\r
\r
public void valueChange(ValueChangeEvent event) {\r
if (event.getProperty().getValue() != null) {\r
// If something is selected from the tree, get it's 'name' and\r
// insert it into the textfield\r
- editor.setValue(t.getItem(event.getProperty().getValue())\r
+ editor.setValue(tree.getItem(event.getProperty().getValue())\r
.getItemProperty(ExampleUtil.hw_PROPERTY_NAME));\r
editor.requestRepaint();\r
- change.setEnabled(true);\r
+ editBar.setEnabled(true);\r
} else {\r
editor.setValue("");\r
- change.setEnabled(false);\r
+ editBar.setEnabled(false);\r
}\r
}\r
\r
// If the edited value contains something, set it to be the item's new\r
// 'name' property\r
if (!editor.getValue().equals("")) {\r
- t.getItem(t.getValue()).getItemProperty(\r
- ExampleUtil.hw_PROPERTY_NAME).setValue(editor.getValue());\r
+ Item item = tree.getItem(tree.getValue());\r
+ Property name = item.getItemProperty(ExampleUtil.hw_PROPERTY_NAME);\r
+ name.setValue(editor.getValue());\r
}\r
}\r
\r
*/\r
public void handleAction(Action action, Object sender, Object target) {\r
if (action == ACTION_ADD) {\r
- // Allow children for the target item\r
- t.setChildrenAllowed(target, true);\r
-\r
- // Create new item, disallow children, add name, set parent\r
- Item i = t.addItem(itemId);\r
- t.setChildrenAllowed(itemId, false);\r
- String newItemName = "New Item # " + itemId;\r
- i.getItemProperty(ExampleUtil.hw_PROPERTY_NAME).setValue(\r
- newItemName);\r
- t.setParent(itemId, target);\r
- t.expandItem(target);\r
- itemId++;\r
+ // Allow children for the target item, and expand it\r
+ tree.setChildrenAllowed(target, true);\r
+ tree.expandItem(target);\r
+\r
+ // Create new item, set parent, disallow children (= leaf node)\r
+ Object itemId = tree.addItem();\r
+ tree.setParent(itemId, target);\r
+ tree.setChildrenAllowed(itemId, false);\r
+\r
+ // Set the name for this item (we use it as item caption)\r
+ Item item = tree.getItem(itemId);\r
+ Property name = item.getItemProperty(ExampleUtil.hw_PROPERTY_NAME);\r
+ name.setValue("New Item");\r
+\r
} else if (action == ACTION_DELETE) {\r
- Object parent = t.getParent(target);\r
- t.removeItem(target);\r
+ Object parent = tree.getParent(target);\r
+ tree.removeItem(target);\r
// If the deleted object's parent has no more children, set it's\r
- // childrenallowed property to false\r
- if (parent != null && t.getChildren(parent).size() == 0) {\r
- t.setChildrenAllowed(parent, false);\r
+ // childrenallowed property to false (= leaf node)\r
+ if (parent != null && tree.getChildren(parent).size() == 0) {\r
+ tree.setChildrenAllowed(parent, false);\r
}\r
}\r
}\r