package com.vaadin.tests.components.orderedlayout;
import com.vaadin.server.Sizeable;
import com.vaadin.server.VaadinRequest;
import com.vaadin.shared.ui.MarginInfo;
import com.vaadin.tests.components.AbstractReindeerTestUI;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.Component;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.Panel;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.v7.ui.Table;
import com.vaadin.v7.ui.TextArea;
import com.vaadin.v7.ui.TextField;
public class VerticalLayoutWithEmptyLabel extends AbstractReindeerTestUI {
private static final float UPPER_BAR_HEIGHT = 42;
private final VerticalLayout rootLayout = new VerticalLayout();
private final Label subtitleLabel = new Label();
private final String rootTitle;
private Component lowerPanel;
public VerticalLayoutWithEmptyLabel() {
rootTitle = "Vaadin Layout Bug";
getPage().setTitle(rootTitle);
}
@Override
public void setup(VaadinRequest request) {
buildRootLayout();
setContent(rootLayout);
}
@Override
public void attach() {
super.attach();
rebuildLowerPanel();
}
protected void rebuildLowerPanel() {
updateLowerPanel(null);
}
private void updateLowerPanel(Object user) {
// Remove previous content
if (lowerPanel != null) {
rootLayout.removeComponent(lowerPanel);
}
// If not logged in, present login form, otherwise check user's rights
// and build lower panel
lowerPanel = new MyPanel();
// Update layout
rootLayout.addComponent(lowerPanel);
rootLayout.setExpandRatio(lowerPanel, 1.0f);
rootLayout.setComponentAlignment(lowerPanel, Alignment.MIDDLE_CENTER);
}
protected Component getRootLowerPanel() {
return lowerPanel;
}
protected void buildRootLayout() {
rootLayout.setSpacing(true);
rootLayout.setSizeFull();
rootLayout.setMargin(new MarginInfo(false, true, true, true));
rootLayout.addComponent(buildRootUpperBar());
rootLayout.addComponent(buildRootSeparator());
rebuildLowerPanel();
}
protected Component buildRootUpperBar() {
// Title
Label titleLabel = new Label(rootTitle);
titleLabel.addStyleName("pexp-application-title");
titleLabel.setSizeUndefined();
titleLabel.setHeight(18, Sizeable.Unit.PIXELS);
subtitleLabel.setSizeUndefined();
VerticalLayout titleLayout = new VerticalLayout();
titleLayout.setSizeUndefined();
titleLayout.addComponent(titleLabel);
titleLayout.setComponentAlignment(titleLabel, Alignment.BOTTOM_CENTER);
titleLayout.addComponent(subtitleLabel);
titleLayout.setComponentAlignment(subtitleLabel,
Alignment.BOTTOM_CENTER);
// Sequence parts
HorizontalLayout layout = new HorizontalLayout();
layout.addStyleName("pexp-main-upper-bar");
layout.setSpacing(true);
layout.setWidth("100%");
layout.setHeight(UPPER_BAR_HEIGHT, Sizeable.Unit.PIXELS);
layout.addComponent(titleLayout);
layout.setExpandRatio(titleLayout, 1.0f);
layout.setComponentAlignment(titleLayout, Alignment.BOTTOM_CENTER);
return layout;
}
protected Component buildRootSeparator() {
VerticalLayout layout = new VerticalLayout();
layout.setMargin(true);
Panel panel = new Panel(layout);
panel.addStyleName("pexp-separator");
panel.setWidth("100%");
panel.setHeight(3.0f, Sizeable.Unit.PIXELS);
return panel;
}
class MyPanel extends VerticalLayout {
private final Table table;
private final Label myLabel = new Label("");
private final TextField filterPhoneField = new TextField(
"Foobar Number");
private final TextField filterFoobarField = new TextField("Foobar ID");
private final CheckBox incomingOnlyField = new CheckBox(
"Incoming foobar only");
public MyPanel() {
// Setup layout
this.setMargin(true);
setSpacing(true);
this.setHeight("100%");
// Setup top layout with controls and fields
HorizontalLayout topLayout = new HorizontalLayout();
topLayout.setSpacing(true);
// Foobar Content
final TextArea smsContent = new TextArea("Foobar Content");
topLayout.addComponent(smsContent);
topLayout.setExpandRatio(smsContent, 1);
smsContent.setRows(3);
smsContent.setColumns(40);
// topLayout.setWidth("100%");
this.addComponent(topLayout);
// Foobar phone #
final TextField smsNumber = new TextField("Foobar Phone #");
smsNumber.setSizeUndefined();
smsNumber.setColumns(12);
smsNumber.setMaxLength(16);
// smsNumber.setStyleName("pexp-fixed-width");
// Phone number and button layout
VerticalLayout buttonNumberLayout = new VerticalLayout();
buttonNumberLayout.setSizeUndefined();
buttonNumberLayout.setHeight("100%");
buttonNumberLayout.addComponent(smsNumber);
buttonNumberLayout.addComponent(myLabel);
Button button = new Button("Receive Foobar");
buttonNumberLayout.addComponent(button);
buttonNumberLayout.setExpandRatio(button, 1);
buttonNumberLayout.setComponentAlignment(button,
Alignment.BOTTOM_LEFT);
topLayout.addComponent(buttonNumberLayout);
// Add message table
table = new Table();
table.setWidth("100%");
table.setHeight("100%");
this.addComponent(table);
setExpandRatio(table, 1);
// Message table controls
VerticalLayout tableControlsLayout = new VerticalLayout();
tableControlsLayout.setSizeUndefined();
tableControlsLayout.setSpacing(true);
// Configure filter for phone #
filterPhoneField.setSizeUndefined();
filterPhoneField.setImmediate(true);
filterPhoneField.setColumns(12);
filterPhoneField.setMaxLength(16);
// this.filterPhoneField.setStyleName("pexp-fixed-width");
// Configure filter for foobar ID
filterFoobarField.setSizeUndefined();
filterFoobarField.setImmediate(true);
filterFoobarField.setColumns(16);
filterFoobarField.setMaxLength(16);
// this.filterFoobarField.setStyleName("pexp-fixed-width");
// Add filter inputs for phone # and foobar ID
tableControlsLayout.addComponent(filterPhoneField);
tableControlsLayout.addComponent(filterFoobarField);
topLayout.addComponent(tableControlsLayout);
topLayout.addComponent(incomingOnlyField);
topLayout.setComponentAlignment(incomingOnlyField,
Alignment.BOTTOM_LEFT);
}
}
@Override
protected String getTestDescription() {
return "foobar";
}
@Override
protected Integer getTicketNumber() {
return 10098;
}
}