package com.vaadin.tests.components.window; import com.vaadin.server.VaadinRequest; import com.vaadin.tests.components.AbstractTestUI; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.Label; import com.vaadin.ui.Window; import com.vaadin.ui.Window.WindowOrderChangeEvent; import com.vaadin.ui.Window.WindowOrderChangeListener; /** * Test UI for accessing to window order position. * * @author Vaadin Ltd */ public class WindowOrder extends AbstractTestUI { @Override protected void setup(VaadinRequest request) { w1 = new Window(); w1.setCaption("Window1"); w1.addStyleName("window1"); w2 = new Window(); w2.setCaption("Window2"); w2.addStyleName("window2"); w3 = new Window(); w3.setCaption("Window3"); w3.addStyleName("window3"); getUI().addWindow(w1); getUI().addWindow(w2); getUI().addWindow(w3); OrderListener listener = new OrderListener(); for (Window window : getUI().getWindows()) { window.addWindowOrderChangeListener(listener); } w4 = new Window(); w4.setCaption("Window4"); w4.addStyleName("window4"); w4.addWindowOrderChangeListener(listener); infoLabel = createLabel("info-label"); uiLabel = createLabel("ui-label"); getUI().addWindowOrderUpdateListener(new WindowOrderListener()); addComponent(infoLabel); addComponent(uiLabel); Button first = new Button("Bring first to front", event -> w1.bringToFront()); first.addStyleName("bring-to-front-first"); addComponent(first); getLayout().setComponentAlignment(first, Alignment.MIDDLE_RIGHT); Button all = new Button("Bring to front all windows", event -> { w3.bringToFront(); w1.bringToFront(); w2.bringToFront(); }); all.addStyleName("bring-to-front-all"); addComponent(all); getLayout().setComponentAlignment(all, Alignment.MIDDLE_RIGHT); Button detach = new Button("Detach last window", event -> getUI().removeWindow(w3)); detach.addStyleName("detach-window"); addComponent(detach); getLayout().setComponentAlignment(detach, Alignment.MIDDLE_RIGHT); Button add = new Button("Add new window", event -> getUI().addWindow(w4)); add.addStyleName("add-window"); addComponent(add); getLayout().setComponentAlignment(add, Alignment.MIDDLE_RIGHT); } @Override protected String getTestDescription() { return "Window order position access and listeners for order change events."; } @Override protected Integer getTicketNumber() { return 14325; } private Label createLabel(String style) { Label label = new Label(); label.addStyleName(style); return label; } private class OrderListener implements WindowOrderChangeListener { @Override public void windowOrderChanged(WindowOrderChangeEvent event) { infoLabel.removeStyleName("w4--1"); infoLabel.addStyleName("w4-" + w4.getOrderPosition()); if (event.getWindow() == w3 && event.getOrder() == -1) { Label detached = new Label("Window 3 is detached"); detached.addStyleName("w3-detached"); detached.addStyleName("w3-" + w3.getOrderPosition()); addComponent(detached); } Window window = event.getWindow(); Label label = new Label(String.valueOf(window.getOrderPosition())); label.addStyleName("event-order" + event.getOrder()); window.setContent(label); } } private class WindowOrderListener implements WindowOrderUpdateListener { @Override public void windowOrderUpdated(WindowOrderUpdateEvent event) { uiLabel.removeStyleName(infoLabel.getStyleName()); for (Window window : event.getWindows()) { uiLabel.addStyleName(window.getStyleName() + "-" + window.getOrderPosition()); } } } private Window w1; private Window w2; private Window w3; private Window w4; private Label infoLabel; private Label uiLabel; }