diff options
Diffstat (limited to 'uitest/src/com/vaadin/tests/tickets/Ticket1435.java')
-rw-r--r-- | uitest/src/com/vaadin/tests/tickets/Ticket1435.java | 234 |
1 files changed, 234 insertions, 0 deletions
diff --git a/uitest/src/com/vaadin/tests/tickets/Ticket1435.java b/uitest/src/com/vaadin/tests/tickets/Ticket1435.java new file mode 100644 index 0000000000..d46a56f73a --- /dev/null +++ b/uitest/src/com/vaadin/tests/tickets/Ticket1435.java @@ -0,0 +1,234 @@ +package com.vaadin.tests.tickets; + +import com.vaadin.Application; +import com.vaadin.ui.AbstractOrderedLayout; +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.CustomComponent; +import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.Label; +import com.vaadin.ui.Layout; +import com.vaadin.ui.Layout.MarginHandler; +import com.vaadin.ui.Panel; +import com.vaadin.ui.UI.LegacyWindow; +import com.vaadin.ui.Table; +import com.vaadin.ui.VerticalLayout; + +public class Ticket1435 extends Application.LegacyApplication { + + private static final boolean useWorkaround = true; + + @Override + public void init() { + + final LegacyWindow mainWin = new LegacyWindow( + "ButtonPanel containing a table test"); + setMainWindow(mainWin); + ((AbstractOrderedLayout) mainWin.getContent()).setSpacing(true); + + ButtonPanel dataCardView1 = buildButtonPanel("My Tickets"); + ButtonPanel dataCardView2 = buildButtonPanel("My Tickets 2"); + + mainWin.addComponent(dataCardView1); + mainWin.addComponent(dataCardView2); + + } + + /** + * A ButtonPanel is a Panel, which has context specific Buttons in its + * header. + * + * ButtonPanel also provides buttons for controlling its visibility + * (collapse/expand). + */ + public class ButtonPanel extends CustomComponent { + + VerticalLayout root = new VerticalLayout(); + + // In header are the panel's title and the control buttons. + // Panel title is expanded by default. + HorizontalLayout header = new HorizontalLayout(); + + // This is where the actual data is put. + Panel container = new Panel(); + + // Last known height before the panel was collapsed + private float lastHeight = -1; + private Unit lastHeightUnit = null; + + public ButtonPanel(String labelString) { + setCompositionRoot(root); + root.setSizeFull(); + + root.setStyleName("toolbarpanel"); + header.setStyleName("toolbar"); + + initHeader(labelString); + + initContainer(); + } + + private void initHeader(String labelString) { + root.addComponent(header); + header.setWidth("100%"); + header.setHeight("26px"); + Label label = new Label(labelString); + label.setStyleName("caption"); + header.addComponent(label); + + final Layout buttonContainer; + if (useWorkaround) { + buttonContainer = header; + + } else { + buttonContainer = new HorizontalLayout(); + header.addComponent(buttonContainer); + + } + + Button edit = new Button("Edit"); + edit.setStyleName("link"); + buttonContainer.addComponent(edit); + + Button copy = new Button("Copy"); + copy.setStyleName("link"); + buttonContainer.addComponent(copy); + + Button move = new Button("Move"); + move.setStyleName("link"); + buttonContainer.addComponent(move); + + Button delete = new Button("Delete"); + delete.setStyleName("link"); + buttonContainer.addComponent(delete); + + Button bind = new Button("Bind"); + bind.setStyleName("link"); + buttonContainer.addComponent(bind); + + Button options = new Button("Options..."); + options.setStyleName("link"); + buttonContainer.addComponent(options); + + final Button expand = new Button("Expand"); + + final Button collapse = new Button("Collapse"); + buttonContainer.addComponent(collapse); + + collapse.setStyleName("collapse"); + collapse.addListener(new Button.ClickListener() { + @Override + public void buttonClick(Button.ClickEvent event) { + if (useWorkaround) { + container.setVisible(false); + lastHeight = root.getHeight(); + lastHeightUnit = root.getHeightUnits(); + root.setHeight("26px"); + buttonContainer.replaceComponent(collapse, expand); + } else { + boolean visible = container.isVisible(); + container.setVisible(!visible); + if (visible) { + lastHeight = root.getHeight(); + lastHeightUnit = root.getHeightUnits(); + root.setHeight("26px"); + } else { + root.setHeight(lastHeight, lastHeightUnit); + } + event.getButton().setCaption( + visible ? "Expand" : "Collapse"); + } + } + }); + + if (useWorkaround) { + expand.addListener(new Button.ClickListener() { + + @Override + public void buttonClick(ClickEvent event) { + container.setVisible(true); + root.setHeight(lastHeight, lastHeightUnit); + buttonContainer.replaceComponent(expand, collapse); + } + }); + } + + } + + private void initContainer() { + container.setStyleName("custompanel"); + container.setSizeFull(); + ((MarginHandler) container.getContent()).setMargin(false); + container.getContent().setSizeFull(); + root.addComponent(container); + root.setExpandRatio(container, 1); + } + + public void setHeight(int height, Unit unit) { + root.setHeight(height, unit); + lastHeight = height; + lastHeightUnit = unit; + container.setHeight("100%"); + } + + @Override + public void setHeight(String height) { + root.setHeight(height); + lastHeight = root.getHeight(); + lastHeightUnit = root.getHeightUnits(); + container.setHeight("100%"); + } + + @Override + public void setWidth(String width) { + root.setWidth(width); + } + + public void setWidth(int width, Unit unit) { + root.setWidth(width, unit); + } + + @Override + public void setSizeFull() { + setWidth("100%"); + setHeight("100%"); + } + + public void setPanelComponent(Component component) { + container.removeAllComponents(); + container.addComponent(component); + } + } + + public ButtonPanel buildButtonPanel(String caption) { + ButtonPanel panel = new ButtonPanel(caption); + + panel.setHeight("250px"); + panel.setWidth("500px"); + + Table table = new Table(); + + table.setSizeFull(); + + table.addContainerProperty("checkbox", CheckBox.class, new CheckBox()); + table.setColumnWidth("checkbox", 30); + table.setColumnHeader("checkbox", ""); + + table.addContainerProperty("Tickets", String.class, null); + table.setColumnWidth("Tickets", 150); + + table.addContainerProperty("Deadline", String.class, null); + + for (int i = 0; i < 10; i++) { + String name = "Name " + i; + table.addItem(new Object[] { new CheckBox(), name, + "02-22-2007 13:37" }, new Integer(i)); + } + + panel.setPanelComponent(table); + + return panel; + } +}
\ No newline at end of file |