package com.vaadin.tests.components.table; import com.vaadin.data.Item; import com.vaadin.data.util.MethodProperty; import com.vaadin.event.ItemClickEvent; import com.vaadin.event.ItemClickEvent.ItemClickListener; import com.vaadin.server.ExternalResource; import com.vaadin.tests.components.TestBase; import com.vaadin.tests.util.Log; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.CheckBox; import com.vaadin.ui.Component; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Table; import com.vaadin.ui.Tree; public class ItemClickEvents extends TestBase { Tree tree = new Tree(); Table table = new Table(); Log log = new Log(5); @Override public void setup() { log.setId("log"); HorizontalLayout ol = createHorizontalLayout(tree); Button b = new Button("icon", new Button.ClickListener() { @Override public void buttonClick(ClickEvent event) { if (tree.getItemIconPropertyId() == null) { tree.setItemIconPropertyId("icon"); } else { tree.setItemIconPropertyId(null); } } }); ol.addComponent(b); tree.setImmediate(true); tree.setNullSelectionAllowed(false); tree.addItem("Root 1"); tree.addItem("1. Child 1"); tree.setParent("1. Child 1", "Root 1"); tree.addItem("1. Child 2"); tree.setParent("1. Child 2", "Root 1"); tree.addItem("Root 2"); tree.addItem("2. Child 1"); tree.setParent("2. Child 1", "Root 2"); tree.addItem("2. Child 2"); tree.setParent("2. Child 2", "Root 2"); tree.addContainerProperty("icon", ExternalResource.class, new ExternalResource( "http://www.itmill.com/res/images/itmill_logo.gif")); tree.addListener(new ItemClickListener() { @Override public void itemClick(ItemClickEvent event) { logEvent(event, "tree"); } }); tree.setId("tree"); HorizontalLayout ol2 = createHorizontalLayout(table); table.setWidth("150px"); table.setImmediate(true); table.setSelectable(true); table.setNullSelectionAllowed(false); table.addContainerProperty("Column", String.class, "value"); for (int i = 0; i < 10; i++) { Item item = table.addItem("Item " + i); item.getItemProperty("Column").setValue("Row " + i); } table.addListener(new ItemClickListener() { @Override public void itemClick(ItemClickEvent event) { logEvent(event, "table"); } }); table.setId("table"); addComponent(log); addComponent(new Button("Clear log", new Button.ClickListener() { @Override public void buttonClick(ClickEvent event) { log.clear(); } })); addComponent(ol); addComponent(tree); addComponent(ol2); addComponent(table); } protected void logEvent(ItemClickEvent event, String targetComponent) { String type = event.getButtonName() + " " + "click"; if (event.isDoubleClick()) { type = "doubleClick"; } String modifiers = ""; if (event.isAltKey()) { modifiers += "alt "; } if (event.isMetaKey()) { modifiers += "meta "; } if (event.isCtrlKey()) { modifiers += "ctrl "; } if (event.isShiftKey()) { modifiers += "shift "; } if (!"".equals(modifiers)) { modifiers = " (" + modifiers.trim() + ")"; } log.log(type + " on " + targetComponent + "/" + event.getItemId() + modifiers); } private static HorizontalLayout createHorizontalLayout(Component c) { HorizontalLayout layout = new HorizontalLayout(); CheckBox b = new CheckBox("immediate", new MethodProperty(c, "immediate")); b.setImmediate(true); layout.addComponent(b); b = new CheckBox("selectable", new MethodProperty(c, "selectable")); b.setImmediate(true); layout.addComponent(b); b = new CheckBox("nullsel", new MethodProperty(c, "nullSelectionAllowed")); b.setImmediate(true); layout.addComponent(b); b = new CheckBox("multi", new MethodProperty(c, "multiSelect")); b.setImmediate(true); layout.addComponent(b); return layout; } @Override protected String getDescription() { return "Click events should always come trough no matter how the table is configured."; } @Override protected Integer getTicketNumber() { return 5458; } }