package com.vaadin.tests.components.button;
import com.vaadin.annotations.PreserveOnRefresh;
import com.vaadin.data.Item;
import com.vaadin.data.Property;
import com.vaadin.data.util.HierarchicalContainer;
import com.vaadin.event.ShortcutAction.KeyCode;
import com.vaadin.server.VaadinRequest;
import com.vaadin.shared.ui.MarginInfo;
import com.vaadin.tests.components.AbstractTestUI;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.Component;
import com.vaadin.ui.DefaultFieldFactory;
import com.vaadin.ui.Field;
import com.vaadin.ui.Form;
import com.vaadin.ui.GridLayout;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Table;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalSplitPanel;
@PreserveOnRefresh
@SuppressWarnings("deprecation")
public class ButtonWithShortcutNotRendered extends AbstractTestUI {
@Override
protected String getTestDescription() {
return "Button with shortcut broken if the shortcut is rendered before the button";
}
@Override
protected Integer getTicketNumber() {
return 9825;
}
Button defaultButton;
Button otherButton;
@SuppressWarnings("unchecked")
@Override
protected void setup(VaadinRequest request) {
getLayout().setWidth(100, Unit.PERCENTAGE);
getLayout().setHeight(null);
getLayout().setMargin(new MarginInfo(true, false, false, false));
HierarchicalContainer container = new HierarchicalContainer();
container.addContainerProperty("t1", String.class, "");
container.addContainerProperty("t2", String.class, "");
Item item = container.addItem("r1");
item.getItemProperty("t1").setValue("Row1 t1");
item.getItemProperty("t2").setValue("Row1 t2");
item = container.addItem("r2");
item.getItemProperty("t1").setValue("Row2 t1");
item.getItemProperty("t2").setValue("Row2 t2");
MyForm form = new MyForm();
MyTable table = new MyTable(form, container);
VerticalSplitPanel splitPanel = new VerticalSplitPanel();
splitPanel.setWidth(100, Unit.PERCENTAGE);
splitPanel.setHeight(400, Unit.PIXELS);
splitPanel.setFirstComponent(table);
splitPanel.setSecondComponent(form);
splitPanel.setSplitPosition(50, Unit.PERCENTAGE);
addComponent(splitPanel);
}
public class MyTable extends Table {
final MyForm form;
public MyTable(MyForm pform, HierarchicalContainer container) {
form = pform;
setContainerDataSource(container);
setSelectable(true);
setImmediate(true);
setWidth(100, Unit.PERCENTAGE);
setHeight(null);
addValueChangeListener(new Property.ValueChangeListener() {
@Override
public void valueChange(
com.vaadin.data.Property.ValueChangeEvent event) {
final Item item = getItem(getValue());
form.setItemDataSource(item);
}
});
}
}
public class MyForm extends Form implements ClickListener {
final GridLayout layout;
@SuppressWarnings("unchecked")
public MyForm() {
setWidth(100, Unit.PERCENTAGE);
setHeight(null);
setImmediate(true);
setFormFieldFactory(new DefaultFieldFactory() {
@Override
public TextField createField(Item item, Object propertyId,
Component uiContext) {
TextField t = new TextField();
t.setWidth(100, Unit.PERCENTAGE);
t.setHeight(null);
t.setCaption((String) propertyId);
t.setImmediate(false);
return t;
}
});
layout = new GridLayout(2, 1);
layout.setWidth(100, Unit.PERCENTAGE);
layout.setHeight(null);
layout.setColumnExpandRatio(0, 0.5f);
layout.setColumnExpandRatio(1, 0.5f);
layout.setMargin(true);
layout.setSpacing(true);
setLayout(layout);
HorizontalLayout footer = new HorizontalLayout();
footer.setSpacing(true);
footer.setMargin(false);
footer.setVisible(false);
setFooter(footer);
defaultButton = new Button("Default Button", this);
defaultButton.setClickShortcut(KeyCode.ENTER);
footer.addComponent(defaultButton);
otherButton = new Button("Other button", this);
footer.addComponent(otherButton);
}
@Override
public void setItemDataSource(Item newDataSource) {
if (newDataSource != null) {
super.setItemDataSource(newDataSource);
layout.setVisible(true);
getFooter().setVisible(true);
} else {
super.setItemDataSource(null);
layout.setVisible(false);
getFooter().setVisible(false);
}
}
@Override
@SuppressWarnings("rawtypes")
protected void attachField(Object propertyId, Field field) {
if (propertyId.equals("t1")) {
layout.addComponent(field, 0, 0);
} else if (propertyId.equals("t2")) {
layout.addComponent(field, 1, 0);
}
}
@Override
public void buttonClick(ClickEvent event) {
// NOP
}
}
}