--- /dev/null
+package com.itmill.toolkit.demo.featurebrowser;\r
+\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.event.Action;\r
+import com.itmill.toolkit.ui.CustomComponent;\r
+import com.itmill.toolkit.ui.Field;\r
+import com.itmill.toolkit.ui.OrderedLayout;\r
+import com.itmill.toolkit.ui.Table;\r
+\r
+/**\r
+ * Table example.\r
+ * \r
+ * @author IT Mill Ltd.\r
+ */\r
+public class TableExample extends CustomComponent implements\r
+ Field.ValueChangeListener, Action.Handler {\r
+\r
+ // Actions\r
+ private static final Action ACTION_SAVE = new Action("Save");\r
+ private static final Action ACTION_DELETE = new Action("Delete");\r
+ private static final Action ACTION_HIRE = new Action("Hire");\r
+ // Action sets\r
+ private static final Action[] ACTIONS_NOHIRE = new Action[] { ACTION_SAVE,\r
+ ACTION_DELETE };\r
+ private static final Action[] ACTIONS_HIRE = new Action[] { ACTION_HIRE,\r
+ ACTION_SAVE, ACTION_DELETE };\r
+ // Properties\r
+ private static final Object PROPERTY_SPECIES = "Species";\r
+ private static final Object PROPERTY_TYPE = "Type";\r
+ private static final Object PROPERTY_KIND = "Kind";\r
+ private static final Object PROPERTY_HIRED = "Hired";\r
+\r
+ Table source;\r
+ Table saved;\r
+\r
+ public TableExample() {\r
+\r
+ OrderedLayout main = new OrderedLayout();\r
+ main.setMargin(true);\r
+ setCompositionRoot(main);\r
+\r
+ source = new Table("The source");\r
+ source.setPageLength(7);\r
+ source.setWidth(100);\r
+ source.setWidthUnits(Table.UNITS_PERCENTAGE);\r
+ source.setColumnCollapsingAllowed(true);\r
+ source.setColumnReorderingAllowed(true);\r
+ source.setSelectable(true);\r
+ source.setMultiSelect(true);\r
+ source.setImmediate(true);\r
+ source.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);\r
+ fillTable(source);\r
+ source.addActionHandler(this);\r
+ main.addComponent(source);\r
+\r
+ saved = new Table("Saved");\r
+ saved.setPageLength(4);\r
+ saved.setWidth(100);\r
+ saved.setWidthUnits(Table.UNITS_PERCENTAGE);\r
+ saved.setSelectable(false);\r
+ saved.setColumnHeaderMode(Table.COLUMN_HEADER_MODE_HIDDEN);\r
+ saved.setRowHeaderMode(Table.ROW_HEADER_MODE_ID);\r
+ initProperties(saved);\r
+ saved.addActionHandler(this);\r
+ main.addComponent(saved);\r
+ }\r
+\r
+ private void initProperties(Table table) {\r
+ table.addContainerProperty(PROPERTY_SPECIES, String.class, "");\r
+ table.addContainerProperty(PROPERTY_TYPE, String.class, "");\r
+ table.addContainerProperty(PROPERTY_KIND, String.class, "");\r
+ table\r
+ .addContainerProperty(PROPERTY_HIRED, Boolean.class,\r
+ Boolean.FALSE);\r
+ }\r
+\r
+ private void fillTable(Table table) {\r
+ initProperties(table);\r
+\r
+ String[] sp = new String[] { "Fox", "Dog", "Cat", "Moose", "Penguin",\r
+ "Cow" };\r
+ String[] ty = new String[] { "Quick", "Lazy", "Sleepy", "Fidgety",\r
+ "Crazy", "Kewl" };\r
+ String[] ki = new String[] { "Jumping", "Walking", "Sleeping",\r
+ "Skipping", "Dancing" };\r
+\r
+ for (int i = 0; i < 100; i++) {\r
+ String s = sp[(int) (Math.random() * sp.length)];\r
+ String t = ty[(int) (Math.random() * ty.length)];\r
+ String k = ki[(int) (Math.random() * ki.length)];\r
+ table.addItem(new Object[] { s, t, k, Boolean.FALSE }, new Integer(\r
+ i));\r
+ }\r
+\r
+ }\r
+\r
+ public Action[] getActions(Object target, Object sender) {\r
+ if (sender == source) {\r
+ Item item = source.getItem(target);\r
+ if (item != null\r
+ && item.getItemProperty(PROPERTY_HIRED).getValue() == Boolean.FALSE) {\r
+ return ACTIONS_HIRE;\r
+ } else {\r
+ return ACTIONS_NOHIRE;\r
+ }\r
+ } else {\r
+ return new Action[] { ACTION_DELETE };\r
+ }\r
+ }\r
+\r
+ public void handleAction(Action action, Object sender, Object target) {\r
+ if (sender == source) {\r
+ Item item = source.getItem(target);\r
+ if (action == ACTION_HIRE) {\r
+ item.getItemProperty(PROPERTY_HIRED).setValue(Boolean.TRUE);\r
+ source.requestRepaint();\r
+ if (saved.containsId(target)) {\r
+ item = saved.getItem(target);\r
+ item.getItemProperty(PROPERTY_HIRED).setValue(Boolean.TRUE);\r
+ saved.requestRepaint();\r
+ }\r
+\r
+ getWindow().showNotification("Hired", "" + item);\r
+ } else if (action == ACTION_SAVE) {\r
+ if (saved.containsId(target)) {\r
+ getWindow().showNotification("Already saved", "" + item);\r
+ return;\r
+ }\r
+ Item added = saved.addItem(target);\r
+ Property p = added.getItemProperty(PROPERTY_SPECIES);\r
+ p.setValue(item.getItemProperty(PROPERTY_SPECIES).getValue());\r
+ p = added.getItemProperty(PROPERTY_TYPE);\r
+ p.setValue(item.getItemProperty(PROPERTY_TYPE).getValue());\r
+ p = added.getItemProperty(PROPERTY_KIND);\r
+ p.setValue(item.getItemProperty(PROPERTY_KIND).getValue());\r
+ p = added.getItemProperty(PROPERTY_HIRED);\r
+ p.setValue(item.getItemProperty(PROPERTY_HIRED).getValue());\r
+ getWindow().showNotification("Saved", "" + item);\r
+ } else {\r
+ // ACTION_DELETE\r
+ getWindow().showNotification("Deleted ", "" + item);\r
+ source.removeItem(target);\r
+ }\r
+ } else {\r
+ // sender==saved\r
+ if (action == ACTION_DELETE) {\r
+ Item item = saved.getItem(target);\r
+ getWindow().showNotification("Deleted", "" + item);\r
+ saved.removeItem(target);\r
+ }\r
+ }\r
+ }\r
+\r
+ public void valueChange(ValueChangeEvent event) {\r
+ // TODO Auto-generated method stub\r
+\r
+ }\r
+\r
+}\r