package org.vaadin.touchkit.itest.oldtests; import java.util.Date; import java.util.logging.Logger; import org.vaadin.touchkit.ui.EmailField; import org.vaadin.touchkit.ui.HorizontalButtonGroup; import org.vaadin.touchkit.ui.NavigationButton; import org.vaadin.touchkit.ui.NavigationManager; import org.vaadin.touchkit.ui.NavigationView; import org.vaadin.touchkit.ui.NumberField; import org.vaadin.touchkit.ui.Popover; import org.vaadin.touchkit.ui.Switch; import org.vaadin.touchkit.ui.TabBarView; import org.vaadin.touchkit.ui.Toolbar; import org.vaadin.touchkit.ui.VerticalComponentGroup; import com.vaadin.server.ClassResource; import com.vaadin.server.Resource; import com.vaadin.server.ThemeResource; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickListener; import com.vaadin.v7.ui.CheckBox; import com.vaadin.v7.ui.ComboBox; import com.vaadin.ui.Component; import com.vaadin.ui.ComponentContainer; import com.vaadin.ui.CssLayout; import com.vaadin.v7.ui.DateField; import com.vaadin.ui.Embedded; import com.vaadin.ui.FormLayout; import com.vaadin.v7.ui.HorizontalLayout; import com.vaadin.v7.ui.Label; import com.vaadin.v7.ui.NativeSelect; import com.vaadin.ui.Notification; import com.vaadin.v7.ui.Slider; import com.vaadin.ui.TabSheet.Tab; import com.vaadin.v7.ui.TextField; import com.vaadin.ui.UI; import com.vaadin.v7.ui.VerticalLayout; import com.vaadin.v7.ui.themes.BaseTheme; public class NavPanelTestWithViews extends NavigationManager implements ComponentContainer { private SimpleNavView[] views; private Button fullScreen; static UI app; private Button notRelative; public NavPanelTestWithViews() { addNavigationListener(new NavigationListener() { @Override public void navigate(NavigationEvent event) { Logger.getAnonymousLogger().info( "Navigated " + event.getDirection()); } }); views = new SimpleNavView[7]; for (int i = 0; i < views.length; i++) { SimpleNavView v = new SimpleNavView(null, i); views[i] = v; } navigateTo(views[0]); NavigationView currentComponent2 = (NavigationView) getCurrentComponent(); ComponentContainer content = (ComponentContainer) currentComponent2 .getContent(); NavigationView testView = new NavigationView( "TestView modal sub windows"); testView.setPreviousComponent(currentComponent2); Button.ClickListener listener = new Button.ClickListener() { private int i; @Override public void buttonClick(ClickEvent event) { Popover popover = new Popover(); popover.setWidth("360px"); popover.setHeight("80%"); // VerticalLayout content = new VerticalLayout(); // content.setSpacing(true); // content.setMargin(true); NavigationManager content = new NavPanelTestWithViews(); /* * HorizontalLayout topStuff = new HorizontalLayout(); * topStuff.setWidth("100%"); content.addComponent(topStuff); * topStuff.setSpacing(true); topStuff.setMargin(false); * * topStuff.addComponent(new Button("Foo")); * * Label header = new Label("Some section"); * topStuff.addComponent(header); * topStuff.setExpandRatio(header, 1.0f); * * topStuff.addComponent(new Button("Close", new * Button.ClickListener() { * * public void buttonClick(ClickEvent event) { event.getButton() * .getWindow() .getParent() .removeWindow( * event.getButton().getWindow()); * * } })); */ if (i++ % 2 == 1) { // Test that popover with navigationview should look fine // without toolbar too NavigationView currentComponent3 = (NavigationView) content .getCurrentComponent(); currentComponent3.setToolbar(null); } popover.setContent(content); if (event.getButton() == fullScreen) { popover.setSizeFull(); popover.setModal(false); TabBarView touchKitTabsheet = new TabBarView(); popover.setContent(touchKitTabsheet); content.setCaption("TAB1"); Tab addTab = touchKitTabsheet.addTab(content); addTab.setCaption("TAB1??"); CssLayout cssLayout = new CssLayout(); cssLayout.setCaption("TAB2"); touchKitTabsheet.addTab(cssLayout); cssLayout.addComponent(new Label( "Nothing here actually, close button on tab1.")); } if (event.getButton() == notRelative) { popover.setWidth("50%"); popover.setHeight("100%"); popover.center(); popover.requestRepaint(); getUI().addWindow(popover); } else { popover.showRelativeTo(event.getButton()); } } }; final Button button = new Button( "Try me (TouchKit's modal window impl)", listener); fullScreen = new Button("Fullscreen modal", listener); notRelative = new Button("Non-relative modal", listener); CssLayout cssLayout = new CssLayout() { @Override protected String getCss(Component c) { if (c == button) { /* * To test centering. */ return "margin-left: 40%;"; } return super.getCss(c); } }; cssLayout.addComponent(button); cssLayout.addComponent(fullScreen); cssLayout.addComponent(notRelative); testView.setContent(cssLayout); Button b = new Button("Yes"); b.setStyleName("green"); cssLayout.addComponent(b); b = new Button("No"); b.setStyleName("red"); cssLayout.addComponent(b); b = new Button("OK"); b.setStyleName("blue"); cssLayout.addComponent(b); Button button2 = new Button("Link style"); button2.setStyleName(BaseTheme.BUTTON_LINK); cssLayout.addComponent(button2); HorizontalButtonGroup group = new HorizontalButtonGroup(); testView.setRightComponent(group); Component metoo = new Button("T", listener); metoo.addStyleName("blue"); group.addComponent(new Button("No toolbar", new Button.ClickListener() { @Override public void buttonClick(ClickEvent event) { Popover popover = new Popover(); popover.setWidth("360px"); ((VerticalLayout) popover.getContent()).setMargin(false); // touchKitSubWindow.setHeight("80%"); Button b = new Button("Save Draft"); b.addStyleName("white"); b.setWidth("100%"); popover.addComponent(b); b = new Button("Delete Draft"); b.addStyleName("red"); b.setWidth("100%"); popover.addComponent(b); b = new Button("Cancel"); b.setWidth("100%"); popover.addComponent(b); popover.showRelativeTo(event.getButton()); } })); group.addComponent(metoo); NavigationButton navigationButton = new NavigationButton(testView); content.addComponent(navigationButton); Toolbar toolbar = new Toolbar(); toolbar.addComponent(new Button("below", listener)); testView.setToolbar(toolbar); } static class SimpleNavView extends NavigationView implements ClickListener { static int counter = 0; public SimpleNavView(SimpleNavView parent, int index) { setId("SNV" + counter++); String caption2; if (parent == null) { caption2 = "View " + index; } else { setPreviousComponent(parent); caption2 = parent.getCaption() + "." + index; } setCaption(caption2); if (getDepth() < 3) { generateSubViews(); } else { generateLeafContent(); } Toolbar toolbar2 = new Toolbar(); setToolbar(toolbar2); toolbar2.addComponent(createActionButton1()); toolbar2.addComponent(createActionButton2()); toolbar2.addComponent(createActionButton3()); toolbar2.addComponent(createActionButton4()); toolbar2.addComponent(createActionButton1()); setRightComponent(createActionButton5()); } private Component createActionButton5() { Button button = new Button("Delete", this); button.addStyleName("red"); return button; } private Component createActionButton1() { Button button = new Button(null, this); button.setIcon(new ThemeResource("../runo/icons/64/email.png")); button.setIcon(new ClassResource("mail.png")); return button; } private Component createActionButton2() { Button button = new Button(null, this); button.setIcon(new ThemeResource("../runo/icons/64/email-reply.png")); return button; } private Component createActionButton3() { Button button = new Button(null, this); button.setIcon(new ThemeResource("../runo/icons/64/email-send.png")); return button; } private Component createActionButton4() { Button button = new Button(null, this); button.setIcon(new ThemeResource("../runo/icons/64/folder.png")); button.setCaption("Send"); return button; } private void generateLeafContent() { CssLayout cssLayout = new CssLayout(); // cssLayout.setWidth("100%"); // cssLayout.setMargin(true); Component label = new Label("Foobar"); label.setStyleName("grey-title"); cssLayout.addComponent(label); VerticalComponentGroup componentGroup = new VerticalComponentGroup(); Component textField = new TextField("Name"); textField.setWidth("100%"); componentGroup.addComponent(textField); // email field EmailField emailField = new EmailField("Email"); emailField.setIcon(new ThemeResource("../runo/icons/64/email.png")); emailField.setWidth("100%"); componentGroup.addComponent(emailField); // number field NumberField numberField = new NumberField("Age"); numberField.setWidth("100%"); componentGroup.addComponent(numberField); DateField df = new DateField("Datefield"); df.setWidth("100%"); df.setValue(new Date()); componentGroup.addComponent(df); ComboBox comboBox = new ComboBox("Combobox"); comboBox.setWidth("100%"); comboBox.addItem("Pekka"); comboBox.addItem("Pirjo"); comboBox.addItem("Irma"); comboBox.addItem("Marko"); componentGroup.addComponent(comboBox); addSliderWithIcons(componentGroup); componentGroup.addComponent(new CheckBox("Setting böö")); NativeSelect nativeSelect = new NativeSelect("Some setting"); nativeSelect.addItem("Foo"); nativeSelect.addItem("Bar"); nativeSelect.addItem("Three"); componentGroup.addComponent(nativeSelect); cssLayout.addComponent(componentGroup); label = new Label("Foobar"); label.setStyleName("grey-title"); cssLayout.addComponent(label); componentGroup = new VerticalComponentGroup(); textField = new TextField("Name"); textField.setWidth("100%"); componentGroup.addComponent(textField); // email field emailField = new EmailField( "Longer caption for non 100% width field which might be clipped with ellipsis"); // emailField.setWidth("100%"); componentGroup.addComponent(emailField); // number field numberField = new NumberField("Age"); numberField.setWidth("100%"); componentGroup.addComponent(numberField); addSliderWithIcons(componentGroup); componentGroup.addComponent(new CheckBox("Setting böö")); cssLayout.addComponent(componentGroup); label = new Label("FormLayout in ComponentGroup"); label.setStyleName("grey-title"); cssLayout.addComponent(label); VerticalComponentGroup optionLayout2 = new VerticalComponentGroup(); FormLayout formLayout = new FormLayout(); formLayout.setSpacing(false); formLayout.setMargin(false); textField = new TextField("Name"); textField.setWidth("100%"); formLayout.addComponent(textField); // email field emailField = new EmailField("Email"); emailField.setWidth("100%"); formLayout.addComponent(emailField); // number field numberField = new NumberField("Age"); numberField.setWidth("100%"); formLayout.addComponent(numberField); df = new DateField("Datefield"); df.setWidth("100%"); df.setValue(new Date()); formLayout.addComponent(df); comboBox = new ComboBox("Combobox"); comboBox.addItem("Pekka"); comboBox.addItem("Pirjo"); comboBox.addItem("Irma"); comboBox.addItem("Marko"); comboBox.setWidth("100%"); formLayout.addComponent(comboBox); addSliderWithIcons(formLayout); formLayout.addComponent(new CheckBox("Setting böö")); optionLayout2.addComponent(formLayout); cssLayout.addComponent(optionLayout2); setContent(cssLayout); } private void addSliderWithIcons(ComponentContainer optionLayout) { final Component emb = new Embedded(null, getNextIcon()); emb.setWidth("32px"); final Embedded emb2 = new Embedded(null, getNextIcon()); emb2.setWidth("32px"); final Slider slider = new Slider(0, 100); slider.setWidth(100, UNITS_PERCENTAGE); HorizontalLayout hl = new HorizontalLayout(); hl.addComponent(emb); hl.addComponent(slider); hl.addComponent(emb2); hl.setWidth(100, UNITS_PERCENTAGE); hl.setExpandRatio(slider, 1); hl.setComponentAlignment(slider, Alignment.MIDDLE_CENTER); optionLayout.addComponent(hl); } private int getDepth() { int depth = 1; SimpleNavView parent = (SimpleNavView) getPreviousComponent(); if (parent != null) { depth += parent.getDepth(); } return depth; } private void generateSubViews() { VerticalComponentGroup components = new VerticalComponentGroup(); // components.setMargin(true); int amount = getDepth() % 2 == 1 ? 25 : 3; for (int i = 0; i < amount; i++) { SimpleNavView simpleNavView = new SimpleNavView(this, i); NavigationButton navigationButton = new NavigationButton(); navigationButton.setIcon(getNextIcon()); navigationButton.setTargetView(simpleNavView); if ((i + 1) % 5 == 0) { navigationButton.setDescription("Status quo"); } if ((i + 1) % 7 == 0) { navigationButton.setDescription("Important"); navigationButton.addStyleName("emphasis"); } if ((i + 1) % 9 == 0) { navigationButton.setDescription("123"); navigationButton.addStyleName("pill"); } components.addComponent(navigationButton); } Switch switch1 = new Switch(); switch1.setCaption("ios wannabe check"); switch1.setIcon(getNextIcon()); switch1.setImmediate(true); components.addComponent(switch1); switch1 = new Switch(); switch1.setCaption("ios wannabe checkbox with very long caption that will easily be clipped"); switch1.setIcon(getNextIcon()); components.addComponent(switch1); Switch switch2 = new Switch(); switch2.setCaption("ios wannabe checkbox with so long caption that nobody is sure where it starts and where it ends. Caption's length is infinite, just like the universe."); switch2.setIcon(getNextIcon()); components.addComponent(switch2); NavigationButton navigationButton = new NavigationButton( "NavigationButton with rather long caption in it, which shouldn't cause the caption to pop on next line."); navigationButton.setIcon(getNextIcon()); navigationButton.setDescription("Foobar"); navigationButton.setTargetView(new SimpleNavView(this, i)); components.addComponent(navigationButton); Button b = new Button("Normal button"); // FIXME normal buttons in verticalcomponentgroup // components.addComponent(b); setContent(components); } static Resource[] icons = new Resource[] { new ThemeResource("../runo/icons/64/cancel.png"), new ThemeResource("../runo/icons/64/document-web.png"), new ThemeResource("../runo/icons/64/document-delete.png"), new ThemeResource("../runo/icons/64/document-image.png"), new ThemeResource("../runo/icons/64/document-ppt.png"), new ThemeResource("../runo/icons/64/document-txt.png"), new ThemeResource("../runo/icons/64/lock.png"), new ThemeResource("../runo/icons/64/ok.png"), new ThemeResource("../runo/icons/64/reload.png"), new ThemeResource("../runo/icons/64/trash.png"), new ThemeResource("../runo/icons/64/user.png"), }; static int i = 0; private Resource getNextIcon() { return icons[i++ % icons.length]; } @Override public void buttonClick(ClickEvent event) { Notification.show("Just a demo!"); } } }