package com.vaadin.tests.components.table;
import com.vaadin.tests.components.TestBase;
import com.vaadin.ui.Component;
import com.vaadin.ui.GridLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.Layout;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.v7.data.Property.ValueChangeEvent;
import com.vaadin.v7.data.Property.ValueChangeListener;
import com.vaadin.v7.event.ItemClickEvent;
import com.vaadin.v7.event.ItemClickEvent.ItemClickListener;
import com.vaadin.v7.ui.Table;
public class TableClickValueChangeInteraction extends TestBase {
@Override
public void setup() {
GridLayout grid = new GridLayout(4, 4);
grid.setSpacing(true);
grid.setMargin(true);
getLayout().removeAllComponents();
getLayout().addComponent(grid);
for (int i = 0; i < 16; ++i) {
grid.addComponent(makeTable((i & 8) > 0, (i & 4) > 0, (i & 2) > 0,
(i & 1) > 0));
}
}
@Override
protected String getDescription() {
return "Table selection breaks if ItemClickListener requests repaint";
}
@Override
protected Integer getTicketNumber() {
return 7127;
}
private Component makeTable(boolean immediate, boolean selectable,
boolean listenClicks, boolean listenValueChanges) {
final Table table = new Table((immediate ? "I" : "i")
+ (selectable ? "S" : "s") + (listenClicks ? "C" : "c")
+ (listenValueChanges ? "V" : "v"));
final Label clickLabel = new Label("Click?");
final Label valueChangeLabel = new Label("Value?");
table.addContainerProperty("foo", String.class, null);
for (int i = 0; i < 3; i++) {
table.addItem("item" + i).getItemProperty("foo")
.setValue("An item " + i);
}
table.setImmediate(immediate);
table.setSelectable(selectable);
table.setWidth("100px");
table.setHeight("100px");
if (listenClicks) {
table.addListener(new ItemClickListener() {
@Override
public void itemClick(ItemClickEvent event) {
table.markAsDirty();
clickLabel.setValue("Click " + event.getItemId());
}
});
}
if (listenValueChanges) {
table.addListener(new ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
valueChangeLabel.setValue(
"Value " + event.getProperty().getValue());
}
});
}
Layout result = new VerticalLayout();
result.addComponent(table);
result.addComponent(clickLabel);
result.addComponent(valueChangeLabel);
return result;
}
}