package com.vaadin.tests.components.table; import com.vaadin.server.ExternalResource; import com.vaadin.server.VaadinRequest; import com.vaadin.tests.components.AbstractReindeerTestUI; 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.HorizontalLayout; import com.vaadin.v7.data.Item; import com.vaadin.v7.event.ItemClickEvent; import com.vaadin.v7.event.ItemClickEvent.ItemClickListener; import com.vaadin.v7.ui.AbstractSelect; import com.vaadin.v7.ui.Table; import com.vaadin.v7.ui.Tree; public class ItemClickEvents extends AbstractReindeerTestUI { private Tree tree; private Table table; private Log log; @Override @SuppressWarnings("unchecked") protected void setup(VaadinRequest request) { tree = new Tree(); table = new Table(); log = new Log(5); 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( "https://vaadin.com/vaadin-theme/images/vaadin-logo.png")); 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()) { // Most likely won't trigger on Linux due to WMs using alt + mouse // button 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(AbstractSelect c) { HorizontalLayout layout = new HorizontalLayout(); CheckBox b = new CheckBox("immediate"); b.setValue(c.isImmediate()); b.addValueChangeListener(event -> c.setImmediate(event.getValue())); layout.addComponent(b); b = new CheckBox("selectable"); if (c instanceof Table) { b.setValue(((Table) c).isSelectable()); b.addValueChangeListener( event -> ((Table) c).setSelectable(event.getValue())); } else if (c instanceof Tree) { b.setValue(((Tree) c).isSelectable()); b.addValueChangeListener( event -> ((Tree) c).setSelectable(event.getValue())); } layout.addComponent(b); b = new CheckBox("nullsel"); b.setValue(c.isNullSelectionAllowed()); b.addValueChangeListener( event -> c.setNullSelectionAllowed(event.getValue())); layout.addComponent(b); b = new CheckBox("multi"); b.setValue(c.isMultiSelect()); b.addValueChangeListener(event -> c.setMultiSelect(event.getValue())); layout.addComponent(b); return layout; } @Override protected String getTestDescription() { return "Click events should always come trough no matter how the table is configured."; } @Override protected Integer getTicketNumber() { return 5458; } }