From 60d577b459948acd6ffb2b154a08e77803df49b1 Mon Sep 17 00:00:00 2001 From: Jani Laakso Date: Mon, 26 Nov 2007 09:50:29 +0000 Subject: [PATCH] Brought multiple new demos which demonstrate (SplitPanel, ExpandLayout, RichTextEditor) and new functionality such as alignment API. svn changeset:2946/svn branch:trunk --- .../itmill/toolkit/demo/NativeWindowing.java | 124 +++++++ .../toolkit/demo/testbench/TestBench.java | 203 +++++++++++ .../demo/testbench/TestForAlignments.java | 62 ++++ .../TestForBasicApplicationLayout.java | 115 ++++++ .../testbench/TestForContainerFilterable.java | 93 +++++ .../testbench/TestForMultipleStyleNames.java | 92 +++++ .../TestForPreconfiguredComponents.java | 182 +++++++++ .../demo/testbench/TestForRichTextEditor.java | 51 +++ .../toolkit/demo/testbench/TestForTrees.java | 162 ++++++++ .../toolkit/demo/testbench/TestForUpload.java | 345 ++++++++++++++++++ .../demo/testbench/TestForWindowOpen.java | 55 +++ .../demo/testbench/TestForWindowing.java | 84 +++++ .../testbench/TestSetVisibleAndCaching.java | 77 ++++ .../demo/testbench/TestSplitPanel.java | 22 ++ 14 files changed, 1667 insertions(+) create mode 100644 src/com/itmill/toolkit/demo/NativeWindowing.java create mode 100644 src/com/itmill/toolkit/demo/testbench/TestBench.java create mode 100644 src/com/itmill/toolkit/demo/testbench/TestForAlignments.java create mode 100644 src/com/itmill/toolkit/demo/testbench/TestForBasicApplicationLayout.java create mode 100644 src/com/itmill/toolkit/demo/testbench/TestForContainerFilterable.java create mode 100644 src/com/itmill/toolkit/demo/testbench/TestForMultipleStyleNames.java create mode 100644 src/com/itmill/toolkit/demo/testbench/TestForPreconfiguredComponents.java create mode 100644 src/com/itmill/toolkit/demo/testbench/TestForRichTextEditor.java create mode 100644 src/com/itmill/toolkit/demo/testbench/TestForTrees.java create mode 100644 src/com/itmill/toolkit/demo/testbench/TestForUpload.java create mode 100644 src/com/itmill/toolkit/demo/testbench/TestForWindowOpen.java create mode 100644 src/com/itmill/toolkit/demo/testbench/TestForWindowing.java create mode 100644 src/com/itmill/toolkit/demo/testbench/TestSetVisibleAndCaching.java create mode 100644 src/com/itmill/toolkit/demo/testbench/TestSplitPanel.java diff --git a/src/com/itmill/toolkit/demo/NativeWindowing.java b/src/com/itmill/toolkit/demo/NativeWindowing.java new file mode 100644 index 0000000000..9b4429262b --- /dev/null +++ b/src/com/itmill/toolkit/demo/NativeWindowing.java @@ -0,0 +1,124 @@ +package com.itmill.toolkit.demo; + +import java.net.MalformedURLException; +import java.net.URL; + +import com.itmill.toolkit.Application; +import com.itmill.toolkit.ui.Button; +import com.itmill.toolkit.ui.Label; +import com.itmill.toolkit.ui.Window; +import com.itmill.toolkit.ui.Button.ClickEvent; + +public class NativeWindowing extends Application { + + Window main = new Window("Windowing test"); + + public void init() { + + setMainWindow(main); + + main.addComponent(new Button("Add new subwindow", + new Button.ClickListener() { + public void buttonClick(ClickEvent event) { + final Window w = new Window("sw " + + System.currentTimeMillis()); + main.addWindow(w); + w.setPositionX(100); + w.setPositionY(100); + w.setWidth(200); + w.setHeight(200); + + w.setWidth(100); + w.setHeight(400); + + Button closebutton = new Button("Close " + + w.getCaption(), new Button.ClickListener() { + public void buttonClick(ClickEvent event) { + main.removeWindow(w); + } + + }); + w.addComponent(closebutton); + + w.addComponent(new Label( + "

Lorem ipsum dolor sit amet.

" + + "

Lorem ipsum dolor sit amet.

" + + "

Lorem ipsum dolor sit amet.

" + + "

Lorem ipsum dolor sit amet.

" + + "

Lorem ipsum dolor sit amet.

" + + "

Lorem ipsum dolor sit amet.

" + + "

Lorem ipsum dolor sit amet.

" + + "

Lorem ipsum dolor sit amet.

" + + "

Lorem ipsum dolor sit amet.

" + + "

Lorem ipsum dolor sit amet.

" + + "

Lorem ipsum dolor sit amet.

" + + "

Lorem ipsum dolor sit amet.

" + + "

Lorem ipsum dolor sit amet.

" + + "

Lorem ipsum dolor sit amet.

" + + "

Lorem ipsum dolor sit amet.

" + + "

Lorem ipsum dolor sit amet.

" + + "

Lorem ipsum dolor sit amet.

" + + "

Lorem ipsum dolor sit amet.

" + + "

Lorem ipsum dolor sit amet.

" + + "

Lorem ipsum dolor sit amet.

" + + "

Lorem ipsum dolor sit amet.

" + + "

Lorem ipsum dolor sit amet.

", + Label.CONTENT_XHTML)); + + } + })); + + main.addComponent(new Button( + "Open a currently uncreated application level window", + new Button.ClickListener() { + public void buttonClick(ClickEvent event) { + try { + main + .open( + new com.itmill.toolkit.terminal.ExternalResource( + new URL( + getURL(), + "mainwin-" + + System + .currentTimeMillis() + + "/")), + null); + } catch (MalformedURLException e) { + } + } + })); + + main.addComponent(new Button( + "Commit (saves window state: size, place, scrollpos)")); + } + + public Window getWindow(String name) { + + Window w = super.getWindow(name); + if (w != null) { + return w; + } + + if (name != null && name.startsWith("mainwin-")) { + String postfix = name.substring("mainwin-".length()); + final Window ww = new Window("Window: " + postfix); + ww.setName(name); + ww.addComponent(new Label( + "This is a application-level window opened with name: " + + name)); + ww.addComponent(new Button("Click me", new Button.ClickListener() { + int state = 0; + + public void buttonClick(ClickEvent event) { + ww.addComponent(new Label("Button clicked " + (++state) + + " times")); + } + })); + addWindow(ww); + return ww; + } + + return null; + } + +} diff --git a/src/com/itmill/toolkit/demo/testbench/TestBench.java b/src/com/itmill/toolkit/demo/testbench/TestBench.java new file mode 100644 index 0000000000..46a55652cf --- /dev/null +++ b/src/com/itmill/toolkit/demo/testbench/TestBench.java @@ -0,0 +1,203 @@ +package com.itmill.toolkit.demo.testbench; + +import java.io.File; +import java.net.URL; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; + +import com.itmill.toolkit.Application; +import com.itmill.toolkit.data.Property; +import com.itmill.toolkit.data.util.HierarchicalContainer; +import com.itmill.toolkit.terminal.Sizeable; +import com.itmill.toolkit.ui.Component; +import com.itmill.toolkit.ui.CustomComponent; +import com.itmill.toolkit.ui.ExpandLayout; +import com.itmill.toolkit.ui.Label; +import com.itmill.toolkit.ui.Panel; +import com.itmill.toolkit.ui.SplitPanel; +import com.itmill.toolkit.ui.Tree; +import com.itmill.toolkit.ui.Window; + +/** + * TestBench finds out testable classes within given java packages and adds them + * to menu from where they can be executed. Class is considered testable if it + * is of class CustomComponent. + * + * Note: edit TestBench.testablePackages array + * + * @author IT Mill Ltd. + * + */ +public class TestBench extends com.itmill.toolkit.Application implements + Property.ValueChangeListener { + + // Add here packages which are used for finding testable classes + String[] testablePackages = { "com.itmill.toolkit.demo.tests" }; + + HierarchicalContainer testables = new HierarchicalContainer(); + + Window mainWindow = new Window("TestBench window"); + + // Main layout consists of tree menu and body layout + SplitPanel mainLayout = new SplitPanel(SplitPanel.ORIENTATION_HORIZONTAL); + + Tree menu; + + Panel bodyLayout = new Panel(); + + HashMap itemCaptions = new HashMap(); + + public void init() { + + // Add testable classes to hierarchical container + for (int p = 0; p < testablePackages.length; p++) { + testables.addItem(testablePackages[p]); + try { + List testableClasses = getTestableClassesForPackage(testablePackages[p]); + for (Iterator it = testableClasses.iterator(); it.hasNext();) { + Class t = (Class) it.next(); + // ignore TestBench itself + if (t.equals(TestBench.class)) { + continue; + } + try { + testables.addItem(t); + itemCaptions.put(t, t.getName()); + testables.setParent(t, testablePackages[p]); + continue; + } catch (Exception e) { + try { + testables.addItem(t); + itemCaptions.put(t, t.getName()); + testables.setParent(t, testablePackages[p]); + continue; + } catch (Exception e1) { + e1.printStackTrace(); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + menu = new Tree("Testables", testables); + // simplify captions + for (Iterator i = itemCaptions.keySet().iterator(); i.hasNext();) { + Class testable = (Class) i.next(); + menu.setItemCaption(testable, testable.getName()); + } + menu.addListener(this); + menu.setImmediate(true); + + mainLayout.addComponent(menu); + + bodyLayout.addStyleName("light"); + bodyLayout.setHeight(100); + bodyLayout.setHeightUnits(Sizeable.UNITS_PERCENTAGE); + bodyLayout.setLayout(new ExpandLayout()); + + mainLayout.addComponent(bodyLayout); + + mainLayout.setSplitPosition(30); + + mainWindow.setLayout(mainLayout); + + setMainWindow(mainWindow); + } + + private Component createTestable(Class c) { + try { + Application app = (Application) c.newInstance(); + app.init(); + return app.getMainWindow().getLayout(); + } catch (Exception e) { + try { + CustomComponent cc = (CustomComponent) c.newInstance(); + return cc; + } catch (Exception e1) { + e1.printStackTrace(); + return new Label("Cannot create custom component: " + + e1.toString()); + } + } + } + + // Handle menu selection and update body + public void valueChange(Property.ValueChangeEvent event) { + bodyLayout.removeAllComponents(); + bodyLayout.setCaption(null); + + String title = ((Class) menu.getValue()).getName(); + bodyLayout.setCaption(title); + bodyLayout.addComponent(createTestable((Class) menu.getValue())); + } + + /** + * Return all testable classes within given package. Class is considered + * testable if it's superclass is CustomComponent. + * + * @param packageName + * @return + * @throws ClassNotFoundException + */ + public static List getTestableClassesForPackage(String packageName) + throws Exception { + ArrayList directories = new ArrayList(); + try { + ClassLoader cld = Thread.currentThread().getContextClassLoader(); + if (cld == null) { + throw new ClassNotFoundException("Can't get class loader."); + } + String path = packageName.replace('.', '/'); + // Ask for all resources for the path + Enumeration resources = cld.getResources(path); + while (resources.hasMoreElements()) { + URL url = (URL) resources.nextElement(); + directories.add(new File(url.getFile())); + } + } catch (Exception x) { + throw new Exception(packageName + + " does not appear to be a valid package."); + } + + ArrayList classes = new ArrayList(); + // For every directory identified capture all the .class files + for (Iterator it = directories.iterator(); it.hasNext();) { + File directory = (File) it.next(); + if (directory.exists()) { + // Get the list of the files contained in the package + String[] files = directory.list(); + for (int j = 0; j < files.length; j++) { + // we are only interested in .class files + if (files[j].endsWith(".class")) { + // removes the .class extension + String p = packageName + '.' + + files[j].substring(0, files[j].length() - 6); + Class c = Class.forName(p); + if (c.getSuperclass() != null) { + // if ((c.getSuperclass() + // .equals(com.itmill.toolkit.Application.class))) { + // classes.add(c); + // } else + if ((c.getSuperclass() + .equals(com.itmill.toolkit.ui.CustomComponent.class))) { + classes.add(c); + } + } + } + } + } else { + throw new ClassNotFoundException(packageName + " (" + + directory.getPath() + + ") does not appear to be a valid package"); + } + } + + return classes; + } + +} diff --git a/src/com/itmill/toolkit/demo/testbench/TestForAlignments.java b/src/com/itmill/toolkit/demo/testbench/TestForAlignments.java new file mode 100644 index 0000000000..2fe53445ad --- /dev/null +++ b/src/com/itmill/toolkit/demo/testbench/TestForAlignments.java @@ -0,0 +1,62 @@ +package com.itmill.toolkit.demo.testbench; + +import com.itmill.toolkit.ui.Button; +import com.itmill.toolkit.ui.CustomComponent; +import com.itmill.toolkit.ui.DateField; +import com.itmill.toolkit.ui.OrderedLayout; +import com.itmill.toolkit.ui.TextField; + +public class TestForAlignments extends CustomComponent { + + public TestForAlignments() { + + OrderedLayout main = new OrderedLayout(); + + Button b1 = new Button("Right"); + Button b2 = new Button("Left"); + Button b3 = new Button("Bottom"); + Button b4 = new Button("Top"); + TextField t1 = new TextField("Right aligned"); + TextField t2 = new TextField("Bottom aligned"); + DateField d1 = new DateField("Center aligned"); + DateField d2 = new DateField("Center aligned"); + + OrderedLayout vert = new OrderedLayout(); + vert.addComponent(b1); + vert.addComponent(b2); + vert.addComponent(t1); + vert.addComponent(d1); + vert.setWidth(500); + vert.setComponentAlignment(b1, OrderedLayout.ALIGNMENT_RIGHT, + OrderedLayout.ALIGNMENT_TOP); + vert.setComponentAlignment(b2, OrderedLayout.ALIGNMENT_LEFT, + OrderedLayout.ALIGNMENT_TOP); + vert.setComponentAlignment(t1, OrderedLayout.ALIGNMENT_RIGHT, + OrderedLayout.ALIGNMENT_TOP); + vert.setComponentAlignment(d1, + OrderedLayout.ALIGNMENT_HORIZONTAL_CENTER, + OrderedLayout.ALIGNMENT_TOP); + OrderedLayout hori = new OrderedLayout( + OrderedLayout.ORIENTATION_HORIZONTAL); + hori.addComponent(b3); + hori.addComponent(b4); + hori.addComponent(t2); + hori.addComponent(d2); + hori.setHeight(200); + hori.setComponentAlignment(b3, OrderedLayout.ALIGNMENT_LEFT, + OrderedLayout.ALIGNMENT_BOTTOM); + hori.setComponentAlignment(b4, OrderedLayout.ALIGNMENT_LEFT, + OrderedLayout.ALIGNMENT_TOP); + hori.setComponentAlignment(t2, OrderedLayout.ALIGNMENT_LEFT, + OrderedLayout.ALIGNMENT_BOTTOM); + hori.setComponentAlignment(d2, OrderedLayout.ALIGNMENT_LEFT, + OrderedLayout.ALIGNMENT_VERTICAL_CENTER); + + main.addComponent(vert); + main.addComponent(hori); + + setCompositionRoot(main); + + } + +} diff --git a/src/com/itmill/toolkit/demo/testbench/TestForBasicApplicationLayout.java b/src/com/itmill/toolkit/demo/testbench/TestForBasicApplicationLayout.java new file mode 100644 index 0000000000..77f671cb58 --- /dev/null +++ b/src/com/itmill/toolkit/demo/testbench/TestForBasicApplicationLayout.java @@ -0,0 +1,115 @@ +package com.itmill.toolkit.demo.testbench; + +import java.sql.SQLException; +import java.util.Locale; + +import com.itmill.toolkit.data.util.QueryContainer; +import com.itmill.toolkit.demo.util.SampleDatabase; +import com.itmill.toolkit.terminal.Sizeable; +import com.itmill.toolkit.ui.Button; +import com.itmill.toolkit.ui.CustomComponent; +import com.itmill.toolkit.ui.DateField; +import com.itmill.toolkit.ui.ExpandLayout; +import com.itmill.toolkit.ui.Label; +import com.itmill.toolkit.ui.OrderedLayout; +import com.itmill.toolkit.ui.Panel; +import com.itmill.toolkit.ui.SplitPanel; +import com.itmill.toolkit.ui.TabSheet; +import com.itmill.toolkit.ui.Table; +import com.itmill.toolkit.ui.Button.ClickEvent; +import com.itmill.toolkit.ui.Button.ClickListener; + +public class TestForBasicApplicationLayout extends CustomComponent { + + private Button click; + private Button click2; + private TabSheet tab; + + // Database provided with sample data + private SampleDatabase sampleDatabase; + + public TestForBasicApplicationLayout() { + + click = new Button("Set height -1", new ClickListener() { + + public void buttonClick(ClickEvent event) { + tab.setHeight(-1); + } + + }); + + click2 = new Button("Set height 100%", new ClickListener() { + + public void buttonClick(ClickEvent event) { + tab.setHeight(100); + tab.setHeightUnits(Sizeable.UNITS_PERCENTAGE); + } + + }); + + SplitPanel sp = new SplitPanel(SplitPanel.ORIENTATION_HORIZONTAL); + sp.setSplitPosition(290, Sizeable.UNITS_PIXELS); + + SplitPanel sp2 = new SplitPanel(SplitPanel.ORIENTATION_VERTICAL); + sp2.setSplitPosition(255, Sizeable.UNITS_PIXELS); + + Panel p = new Panel("Accordion Panel"); + p.setSizeFull(); + + tab = new TabSheet(); + tab.setSizeFull(); + + Panel report = new Panel("Monthly Program Runs", new ExpandLayout()); + OrderedLayout controls = new OrderedLayout(); + controls.setMargin(true); + controls.addComponent(new Label("Report tab")); + controls.addComponent(click); + controls.addComponent(click2); + report.addComponent(controls); + DateField cal = new DateField(); + cal.setResolution(DateField.RESOLUTION_DAY); + cal.setLocale(new Locale("en", "US")); + report.addComponent(cal); + ((ExpandLayout) report.getLayout()).expand(controls); + report.addStyleName(Panel.STYLE_LIGHT); + report.setHeight(100); + report.setHeightUnits(Sizeable.UNITS_PERCENTAGE); + + sp2.setFirstComponent(report); + + Table table = new Table(); + // populate Toolkit table component with test SQL table rows + try { + QueryContainer qc = new QueryContainer("SELECT * FROM employee", + sampleDatabase.getConnection()); + table.setContainerDataSource(qc); + } catch (SQLException e) { + e.printStackTrace(); + } + // define which columns should be visible on Table component + table.setVisibleColumns(new Object[] { "FIRSTNAME", "LASTNAME", + "TITLE", "UNIT" }); + table.setItemCaptionPropertyId("ID"); + table.setPageLength(15); + table.setSelectable(true); + table.setRowHeaderMode(Table.ROW_HEADER_MODE_INDEX); + table.setColumnCollapsingAllowed(true); + table.setColumnReorderingAllowed(true); + table.setSortDisabled(false); + table.setSizeFull(); + table.addStyleName("table-inline"); + sp2.setSecondComponent(table); + + tab.addTab(new Label("Tab1"), "Summary", null); + tab.addTab(sp2, "Reports", null); + tab.addTab(new Label("Tab 3"), "Statistics", null); + tab.addTab(new Label("Tab 4"), "Error Tracking", null); + tab.setSelectedTab(sp2); + + sp.setFirstComponent(p); + sp.setSecondComponent(tab); + + setCompositionRoot(sp); + } + +} diff --git a/src/com/itmill/toolkit/demo/testbench/TestForContainerFilterable.java b/src/com/itmill/toolkit/demo/testbench/TestForContainerFilterable.java new file mode 100644 index 0000000000..946c605fa8 --- /dev/null +++ b/src/com/itmill/toolkit/demo/testbench/TestForContainerFilterable.java @@ -0,0 +1,93 @@ +package com.itmill.toolkit.demo.testbench; + +import com.itmill.toolkit.data.util.IndexedContainer; +import com.itmill.toolkit.terminal.Sizeable; +import com.itmill.toolkit.ui.Button; +import com.itmill.toolkit.ui.CustomComponent; +import com.itmill.toolkit.ui.Label; +import com.itmill.toolkit.ui.OrderedLayout; +import com.itmill.toolkit.ui.Panel; +import com.itmill.toolkit.ui.Table; +import com.itmill.toolkit.ui.TextField; +import com.itmill.toolkit.ui.Button.ClickEvent; + +public class TestForContainerFilterable extends CustomComponent { + + OrderedLayout lo = new OrderedLayout(); + IndexedContainer ic = new IndexedContainer(); + Table t = new Table(); + private static String parts[] = { "Neo", "Sa", "rem", "the", "adi", "za", + "tre", "day", "Ca", "re", "cen", "ter", "mi", "nal" }; + TextField fooFilter = new TextField("foo-filter"); + TextField barFilter = new TextField("bar-filter"); + Button filterButton = new Button("Filter"); + Label count = new Label(); + + public TestForContainerFilterable() { + setCompositionRoot(lo); + + // Init datasource + ic.addContainerProperty("foo", String.class, ""); + ic.addContainerProperty("bar", String.class, ""); + for (int i = 0; i < 1000; i++) { + Object id = ic.addItem(); + ic.getContainerProperty(id, "foo").setValue(randomWord()); + ic.getContainerProperty(id, "bar").setValue(randomWord()); + } + + // Init filtering view + Panel filterPanel = new Panel("Filter", new OrderedLayout( + OrderedLayout.ORIENTATION_HORIZONTAL)); + filterPanel.setWidth(100); + filterPanel.setWidthUnits(Sizeable.UNITS_PERCENTAGE); + lo.addComponent(filterPanel); + filterPanel.addComponent(fooFilter); + filterPanel.addComponent(barFilter); + filterPanel.addComponent(filterButton); + fooFilter + .setDescription("Filters foo column in case-sensitive contains manner."); + barFilter + .setDescription("Filters bar column in case-insensitive prefix manner."); + filterPanel.addComponent(count); + + // Table + lo.addComponent(t); + t.setPageLength(12); + t.setWidth(100); + t.setWidthUnits(Sizeable.UNITS_PERCENTAGE); + t.setContainerDataSource(ic); + + // Handler + filterButton.addListener(new Button.ClickListener() { + public void buttonClick(ClickEvent event) { + ic.removeAllContainerFilters(); + if (fooFilter.toString().length() > 0) { + ic.addContainerFilter("foo", fooFilter.toString(), false, + false); + } + if (barFilter.toString().length() > 0) { + ic.addContainerFilter("bar", barFilter.toString(), true, + true); + } + count.setValue("Rows in table: " + ic.size()); + } + }); + + // Resetbutton + lo.addComponent(new Button("Rebind table datasource", + new Button.ClickListener() { + public void buttonClick(ClickEvent event) { + t.setContainerDataSource(ic); + } + })); + } + + private String randomWord() { + int len = (int) (Math.random() * 4); + StringBuffer buf = new StringBuffer(); + while (len-- >= 0) { + buf.append(parts[(int) (Math.random() * parts.length)]); + } + return buf.toString(); + } +} diff --git a/src/com/itmill/toolkit/demo/testbench/TestForMultipleStyleNames.java b/src/com/itmill/toolkit/demo/testbench/TestForMultipleStyleNames.java new file mode 100644 index 0000000000..d8f8649965 --- /dev/null +++ b/src/com/itmill/toolkit/demo/testbench/TestForMultipleStyleNames.java @@ -0,0 +1,92 @@ +package com.itmill.toolkit.demo.testbench; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; + +import com.itmill.toolkit.data.Property.ValueChangeEvent; +import com.itmill.toolkit.data.Property.ValueChangeListener; +import com.itmill.toolkit.data.util.IndexedContainer; +import com.itmill.toolkit.ui.CustomComponent; +import com.itmill.toolkit.ui.Label; +import com.itmill.toolkit.ui.OrderedLayout; +import com.itmill.toolkit.ui.TwinColSelect; + +/** + * TODO: Note you need to add Theme under WebContent/ITMILL/Themes/mytheme in + * order to see actual visible results on the browser. Currently changes are + * visible only by inspecting DOM. + * + * @author IT Mill Ltd. + */ +public class TestForMultipleStyleNames extends CustomComponent implements + ValueChangeListener { + + private final OrderedLayout main = new OrderedLayout(); + + private Label l; + + private final TwinColSelect s = new TwinColSelect(); + + private ArrayList styleNames2; + + public TestForMultipleStyleNames() { + setCompositionRoot(main); + createNewView(); + } + + public void createNewView() { + main.removeAllComponents(); + main.addComponent(new Label( + "TK5 supports multiple stylenames for components.")); + main.addComponent(new Label("Note you need to add Theme under" + + " WebContent/ITMILL/Themes/mytheme" + + " in order to see actual visible results" + + " on the browser. Currently changes are" + + " visible only by inspecting DOM.")); + + styleNames2 = new ArrayList(); + + styleNames2.add("red"); + styleNames2.add("bold"); + styleNames2.add("italic"); + + s.setContainerDataSource(new IndexedContainer(styleNames2)); + s.addListener(this); + s.setImmediate(true); + main.addComponent(s); + + l = new Label("Test labele"); + main.addComponent(l); + + } + + public void valueChange(ValueChangeEvent event) { + + String currentStyle = l.getStyle(); + String[] tmp = currentStyle.split(" "); + ArrayList curStyles = new ArrayList(); + for (int i = 0; i < tmp.length; i++) { + if (tmp[i] != "") { + curStyles.add(tmp[i]); + } + } + + Collection styles = (Collection) s.getValue(); + + for (Iterator iterator = styles.iterator(); iterator.hasNext();) { + String styleName = (String) iterator.next(); + if (curStyles.contains(styleName)) { + // already added + curStyles.remove(styleName); + } else { + l.addStyleName(styleName); + } + } + for (Iterator iterator2 = curStyles.iterator(); iterator2.hasNext();) { + String object = (String) iterator2.next(); + l.removeStyleName(object); + } + } + +} diff --git a/src/com/itmill/toolkit/demo/testbench/TestForPreconfiguredComponents.java b/src/com/itmill/toolkit/demo/testbench/TestForPreconfiguredComponents.java new file mode 100644 index 0000000000..e3d21eed2a --- /dev/null +++ b/src/com/itmill/toolkit/demo/testbench/TestForPreconfiguredComponents.java @@ -0,0 +1,182 @@ +package com.itmill.toolkit.demo.testbench; + +import com.itmill.toolkit.event.Action; +import com.itmill.toolkit.event.Action.Handler; +import com.itmill.toolkit.ui.AbstractSelect; +import com.itmill.toolkit.ui.Button; +import com.itmill.toolkit.ui.CheckBox; +import com.itmill.toolkit.ui.Component; +import com.itmill.toolkit.ui.CustomComponent; +import com.itmill.toolkit.ui.Label; +import com.itmill.toolkit.ui.NativeSelect; +import com.itmill.toolkit.ui.OptionGroup; +import com.itmill.toolkit.ui.OrderedLayout; +import com.itmill.toolkit.ui.Panel; +import com.itmill.toolkit.ui.Tree; +import com.itmill.toolkit.ui.TwinColSelect; +import com.itmill.toolkit.ui.Button.ClickEvent; +import com.itmill.toolkit.ui.Button.ClickListener; + +/** + * @author IT Mill Ltd. + */ +public class TestForPreconfiguredComponents extends CustomComponent implements + Handler { + + private static final String[] firstnames = new String[] { "John", "Mary", + "Joe", "Sarah", "Jeff", "Jane", "Peter", "Marc", "Josie", "Linus" }; + + private static final String[] lastnames = new String[] { "Torvalds", + "Smith", "Jones", "Beck", "Sheridan", "Picard", "Hill", "Fielding", + "Einstein" }; + + private final OrderedLayout main = new OrderedLayout(); + + private final Action[] actions = new Action[] { new Action("edit"), + new Action("delete") }; + + private Panel al; + + private Tree contextTree; + + public TestForPreconfiguredComponents() { + + setCompositionRoot(main); + createNewView(); + } + + public void createNewView() { + main.removeAllComponents(); + main + .addComponent(new Label( + "In Toolkit 5 we introduce new componens. Previously we" + + " usually used setStyle or some other methods on possibly " + + "multiple steps to configure component for ones needs. These new " + + "server side components are mostly just classes that in constructor " + + "set base class to state that programmer wants.")); + + main.addComponent(new Button("commit")); + + Panel test = createTestBench(new CheckBox()); + test.setCaption("CheckBox (configured from button)"); + main.addComponent(test); + + AbstractSelect s = new TwinColSelect(); + fillSelect(s, 20); + test = createTestBench(s); + test.setCaption("TwinColSelect (configured from select)"); + main.addComponent(test); + + s = new NativeSelect(); + fillSelect(s, 20); + test = createTestBench(s); + test.setCaption("Native (configured from select)"); + main.addComponent(test); + + s = new OptionGroup(); + fillSelect(s, 20); + test = createTestBench(s); + test.setCaption("OptionGroup (configured from select)"); + main.addComponent(test); + + s = new OptionGroup(); + fillSelect(s, 20); + s.setMultiSelect(true); + test = createTestBench(s); + test + .setCaption("OptionGroup + multiselect manually (configured from select)"); + main.addComponent(test); + + Button b = new Button("refresh view", this, "createNewView"); + main.addComponent(b); + + } + + public static void fillSelect(AbstractSelect s, int items) { + for (int i = 0; i < items; i++) { + String name = firstnames[(int) (Math.random() * (firstnames.length - 1))] + + " " + + lastnames[(int) (Math.random() * (lastnames.length - 1))]; + s.addItem(name); + } + } + + public Tree createTestTree() { + Tree t = new Tree("Tree"); + String[] names = new String[100]; + for (int i = 0; i < names.length; i++) { + names[i] = firstnames[(int) (Math.random() * (firstnames.length - 1))] + + " " + + lastnames[(int) (Math.random() * (lastnames.length - 1))]; + } + + // Create tree + t = new Tree("Organization Structure"); + for (int i = 0; i < 100; i++) { + t.addItem(names[i]); + String parent = names[(int) (Math.random() * (names.length - 1))]; + if (t.containsId(parent)) { + t.setParent(names[i], parent); + } + } + + // Forbid childless people to have children (makes them leaves) + for (int i = 0; i < 100; i++) { + if (!t.hasChildren(names[i])) { + t.setChildrenAllowed(names[i], false); + } + } + return t; + } + + public Panel createTestBench(Component t) { + Panel ol = new Panel(); + ol.setLayout(new OrderedLayout(OrderedLayout.ORIENTATION_HORIZONTAL)); + + ol.addComponent(t); + + final OrderedLayout ol2 = new OrderedLayout( + OrderedLayout.ORIENTATION_HORIZONTAL); + final Panel status = new Panel("Events"); + final Button clear = new Button("clear event log"); + clear.addListener(new ClickListener() { + public void buttonClick(ClickEvent event) { + status.removeAllComponents(); + status.addComponent(ol2); + } + }); + ol2.addComponent(clear); + final Button commit = new Button("commit changes"); + ol2.addComponent(commit); + status.addComponent(ol2); + + status.setHeight(300); + status.setWidth(400); + + ol.addComponent(status); + + t.addListener(new Listener() { + public void componentEvent(Event event) { + status.addComponent(new Label(event.getClass().getName())); + status.addComponent(new Label("selected: " + + event.getSource().toString())); + } + }); + + return ol; + } + + public Action[] getActions(Object target, Object sender) { + return actions; + } + + public void handleAction(Action action, Object sender, Object target) { + if (action == actions[1]) { + al.addComponent(new Label("Delete selected on " + target)); + contextTree.removeItem(target); + + } else { + al.addComponent(new Label("Edit selected on " + target)); + } + } +} diff --git a/src/com/itmill/toolkit/demo/testbench/TestForRichTextEditor.java b/src/com/itmill/toolkit/demo/testbench/TestForRichTextEditor.java new file mode 100644 index 0000000000..b0897e91c2 --- /dev/null +++ b/src/com/itmill/toolkit/demo/testbench/TestForRichTextEditor.java @@ -0,0 +1,51 @@ +package com.itmill.toolkit.demo.testbench; + +import com.itmill.toolkit.data.Property.ValueChangeEvent; +import com.itmill.toolkit.data.Property.ValueChangeListener; +import com.itmill.toolkit.ui.Button; +import com.itmill.toolkit.ui.CustomComponent; +import com.itmill.toolkit.ui.Label; +import com.itmill.toolkit.ui.OrderedLayout; +import com.itmill.toolkit.ui.RichTextArea; + +/** + * + * @author IT Mill Ltd. + */ +public class TestForRichTextEditor extends CustomComponent implements + ValueChangeListener { + + private OrderedLayout main = new OrderedLayout(); + + private Label l; + + private RichTextArea rte; + + public TestForRichTextEditor() { + + setCompositionRoot(main); + createNewView(); + } + + public void createNewView() { + main.removeAllComponents(); + main.addComponent(new Label( + "RTE uses google richtextArea and their examples toolbar.")); + + rte = new RichTextArea(); + rte.addListener(this); + + main.addComponent(rte); + + main.addComponent(new Button("commit content to label below")); + + l = new Label("", Label.CONTENT_XHTML); + main.addComponent(l); + + } + + public void valueChange(ValueChangeEvent event) { + l.setValue(rte.getValue()); + } + +} diff --git a/src/com/itmill/toolkit/demo/testbench/TestForTrees.java b/src/com/itmill/toolkit/demo/testbench/TestForTrees.java new file mode 100644 index 0000000000..a13cf4d4a4 --- /dev/null +++ b/src/com/itmill/toolkit/demo/testbench/TestForTrees.java @@ -0,0 +1,162 @@ +package com.itmill.toolkit.demo.testbench; + +import com.itmill.toolkit.event.Action; +import com.itmill.toolkit.event.Action.Handler; +import com.itmill.toolkit.ui.Button; +import com.itmill.toolkit.ui.Component; +import com.itmill.toolkit.ui.CustomComponent; +import com.itmill.toolkit.ui.Label; +import com.itmill.toolkit.ui.OrderedLayout; +import com.itmill.toolkit.ui.Panel; +import com.itmill.toolkit.ui.Tree; +import com.itmill.toolkit.ui.Button.ClickEvent; +import com.itmill.toolkit.ui.Button.ClickListener; + +/** + * Some test cases for trees. Events panel logs events that happen server side. + * + * @author IT Mill Ltd. + */ +public class TestForTrees extends CustomComponent implements Handler { + + private static final String[] firstnames = new String[] { "John", "Mary", + "Joe", "Sarah", "Jeff", "Jane", "Peter", "Marc", "Josie", "Linus" }; + + private static final String[] lastnames = new String[] { "Torvalds", + "Smith", "Jones", "Beck", "Sheridan", "Picard", "Hill", "Fielding", + "Einstein" }; + + private OrderedLayout main = new OrderedLayout(); + + private Action[] actions = new Action[] { new Action("edit"), + new Action("delete") }; + + private Panel al; + + private Tree contextTree; + + public TestForTrees() { + + setCompositionRoot(main); + createNewView(); + } + + public void createNewView() { + main.removeAllComponents(); + main + .addComponent(new Label( + "Some test cases for trees. Events panel logs events that happen server side.")); + + main.addComponent(new Button("commit")); + + Tree t; + + t = createTestTree(); + t.setCaption("Default settings"); + main.addComponent(createTestBench(t)); + + t = createTestTree(); + t.setCaption("Multiselect settings"); + t.setMultiSelect(true); + main.addComponent(createTestBench(t)); + + t = createTestTree(); + t.setCaption("Multiselect and immediate"); + t.setImmediate(true); + t.setMultiSelect(true); + main.addComponent(createTestBench(t)); + + t = createTestTree(); + t.setCaption("immediate"); + t.setImmediate(true); + main.addComponent(createTestBench(t)); + + t = createTestTree(); + t.setCaption("with actions"); + t.setImmediate(true); + t.addActionHandler(this); + OrderedLayout ol = (OrderedLayout) createTestBench(t); + al = new Panel("action log"); + ol.addComponent(al); + main.addComponent(ol); + contextTree = t; + + Button b = new Button("refresh view", this, "createNewView"); + main.addComponent(b); + + } + + public Tree createTestTree() { + Tree t = new Tree("Tree"); + String[] names = new String[100]; + for (int i = 0; i < names.length; i++) { + names[i] = firstnames[(int) (Math.random() * (firstnames.length - 1))] + + " " + + lastnames[(int) (Math.random() * (lastnames.length - 1))]; + } + + // Create tree + t = new Tree("Organization Structure"); + for (int i = 0; i < 100; i++) { + t.addItem(names[i]); + String parent = names[(int) (Math.random() * (names.length - 1))]; + if (t.containsId(parent)) { + t.setParent(names[i], parent); + } + } + + // Forbid childless people to have children (makes them leaves) + for (int i = 0; i < 100; i++) { + if (!t.hasChildren(names[i])) { + t.setChildrenAllowed(names[i], false); + } + } + return t; + } + + public Component createTestBench(Tree t) { + OrderedLayout ol = new OrderedLayout(); + ol.setOrientation(OrderedLayout.ORIENTATION_HORIZONTAL); + + ol.addComponent(t); + + final Panel status = new Panel("Events"); + final Button clear = new Button("c"); + clear.addListener(new ClickListener() { + public void buttonClick(ClickEvent event) { + status.removeAllComponents(); + status.addComponent(clear); + } + }); + status.addComponent(clear); + + status.setHeight(300); + status.setWidth(400); + + ol.addComponent(status); + + t.addListener(new Listener() { + public void componentEvent(Event event) { + status.addComponent(new Label(event.getClass().getName())); + status.addComponent(new Label("selected: " + + event.getSource().toString())); + } + }); + + return ol; + } + + public Action[] getActions(Object target, Object sender) { + return actions; + } + + public void handleAction(Action action, Object sender, Object target) { + if (action == actions[1]) { + al.addComponent(new Label("Delete selected on " + target)); + contextTree.removeItem(target); + + } else { + al.addComponent(new Label("Edit selected on " + target)); + } + } +} diff --git a/src/com/itmill/toolkit/demo/testbench/TestForUpload.java b/src/com/itmill/toolkit/demo/testbench/TestForUpload.java new file mode 100644 index 0000000000..56a381ce66 --- /dev/null +++ b/src/com/itmill/toolkit/demo/testbench/TestForUpload.java @@ -0,0 +1,345 @@ +package com.itmill.toolkit.demo.testbench; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +import com.itmill.toolkit.data.Property.ValueChangeEvent; +import com.itmill.toolkit.terminal.StreamResource; +import com.itmill.toolkit.ui.AbstractField; +import com.itmill.toolkit.ui.Button; +import com.itmill.toolkit.ui.CustomComponent; +import com.itmill.toolkit.ui.Label; +import com.itmill.toolkit.ui.Layout; +import com.itmill.toolkit.ui.Link; +import com.itmill.toolkit.ui.OrderedLayout; +import com.itmill.toolkit.ui.Panel; +import com.itmill.toolkit.ui.ProgressIndicator; +import com.itmill.toolkit.ui.Select; +import com.itmill.toolkit.ui.Upload; +import com.itmill.toolkit.ui.Button.ClickEvent; +import com.itmill.toolkit.ui.Upload.FailedEvent; +import com.itmill.toolkit.ui.Upload.FailedListener; +import com.itmill.toolkit.ui.Upload.FinishedEvent; +import com.itmill.toolkit.ui.Upload.FinishedListener; +import com.itmill.toolkit.ui.Upload.StartedEvent; +import com.itmill.toolkit.ui.Upload.StartedListener; +import com.itmill.toolkit.ui.Upload.SucceededEvent; +import com.itmill.toolkit.ui.Upload.SucceededListener; + +public class TestForUpload extends CustomComponent implements + Upload.FinishedListener, FailedListener, SucceededListener, + Upload.ProgressListener, StartedListener { + + Layout main = new OrderedLayout(); + + Buffer buffer = new MemoryBuffer(); + + Panel status = new Panel("Uploaded file:"); + + private final Upload up; + + private final Label l; + + private final ProgressIndicator pi = new ProgressIndicator(); + + private final Label memoryStatus; + + private final Select uploadBufferSelector; + + public TestForUpload() { + setCompositionRoot(main); + main.addComponent(new Label( + "This is a simple test for upload application. " + + "Upload should work with big files and concurrent " + + "requests should not be blocked. Button 'b' reads " + + "current state into label below it. Memory receiver " + + "streams upload contents into memory. You may track" + + "consumption." + + "tempfile receiver writes upload to file and " + + "should have low memory consumption.")); + + main + .addComponent(new Label( + "Clicking on button b updates information about upload components status or same with garbage collector.")); + + up = new Upload("Upload", buffer); + up.setImmediate(true); + up.addListener((FinishedListener) this); + up.addListener((FailedListener) this); + up.addListener((SucceededListener) this); + up.addListener((StartedListener) this); + + up.setProgressListener(this); + + Button b = new Button("b", this, "readState"); + + Button c = new Button("b with gc", this, "gc"); + + main.addComponent(b); + main.addComponent(c); + + uploadBufferSelector = new Select("Receiver type"); + uploadBufferSelector.setImmediate(true); + uploadBufferSelector.addItem("memory"); + uploadBufferSelector.setValue("memory"); + uploadBufferSelector.addItem("tempfile"); + uploadBufferSelector + .addListener(new AbstractField.ValueChangeListener() { + public void valueChange(ValueChangeEvent event) { + setBuffer(); + } + }); + main.addComponent(uploadBufferSelector); + + main.addComponent(up); + l = new Label("Idle"); + main.addComponent(l); + + pi.setVisible(false); + pi.setPollingInterval(1000); + main.addComponent(pi); + + memoryStatus = new Label(); + main.addComponent(memoryStatus); + + status.setVisible(false); + main.addComponent(status); + + Button restart = new Button("R"); + restart.addListener(new Button.ClickListener() { + + public void buttonClick(ClickEvent event) { + getApplication().close(); + } + }); + main.addComponent(restart); + + } + + private void setBuffer() { + String id = (String) uploadBufferSelector.getValue(); + if ("memory".equals(id)) { + buffer = new MemoryBuffer(); + } else if ("tempfile".equals(id)) { + buffer = new TmpFileBuffer(); + } + up.setReceiver(buffer); + } + + public void gc() { + Runtime.getRuntime().gc(); + readState(); + } + + public void readState() { + StringBuffer sb = new StringBuffer(); + + if (up.isUploading()) { + sb.append("Uploading..."); + sb.append(up.getBytesRead()); + sb.append("/"); + sb.append(up.getUploadSize()); + sb.append(" "); + sb.append(Math.round(100 * up.getBytesRead() + / (double) up.getUploadSize())); + sb.append("%"); + } else { + sb.append("Idle"); + } + l.setValue(sb.toString()); + refreshMemUsage(); + } + + public void uploadFinished(FinishedEvent event) { + status.removeAllComponents(); + InputStream stream = buffer.getStream(); + if (stream == null) { + status.addComponent(new Label( + "Upload finished, but output buffer is null!!")); + } else { + status + .addComponent(new Label("Name: " + + event.getFilename(), Label.CONTENT_XHTML)); + status.addComponent(new Label("Mimetype: " + + event.getMIMEType(), Label.CONTENT_XHTML)); + status.addComponent(new Label("Size: " + event.getLength() + + " bytes.", Label.CONTENT_XHTML)); + + status.addComponent(new Link("Download " + buffer.getFileName(), + new StreamResource(buffer, buffer.getFileName(), + getApplication()))); + + status.setVisible(true); + } + } + + public interface Buffer extends StreamResource.StreamSource, + Upload.Receiver { + + String getFileName(); + } + + public class MemoryBuffer implements Buffer { + ByteArrayOutputStream outputBuffer = null; + + String mimeType; + + String fileName; + + public MemoryBuffer() { + + } + + public InputStream getStream() { + if (outputBuffer == null) { + return null; + } + return new ByteArrayInputStream(outputBuffer.toByteArray()); + } + + /** + * @see com.itmill.toolkit.ui.Upload.Receiver#receiveUpload(String, + * String) + */ + public OutputStream receiveUpload(String filename, String MIMEType) { + fileName = filename; + mimeType = MIMEType; + outputBuffer = new ByteArrayOutputStream(); + return outputBuffer; + } + + /** + * Returns the fileName. + * + * @return String + */ + public String getFileName() { + return fileName; + } + + /** + * Returns the mimeType. + * + * @return String + */ + public String getMimeType() { + return mimeType; + } + + } + + public class TmpFileBuffer implements Buffer { + String mimeType; + + String fileName; + + private File file; + + private FileInputStream stream; + + public TmpFileBuffer() { + String tempFileName = "upload_tmpfile_" + + System.currentTimeMillis(); + try { + file = File.createTempFile(tempFileName, null); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + public InputStream getStream() { + if (file == null) { + return null; + } + try { + return new FileInputStream(file); + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * @see com.itmill.toolkit.ui.Upload.Receiver#receiveUpload(String, + * String) + */ + public OutputStream receiveUpload(String filename, String MIMEType) { + fileName = filename; + mimeType = MIMEType; + try { + return new FileOutputStream(file); + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * Returns the fileName. + * + * @return String + */ + public String getFileName() { + return fileName; + } + + /** + * Returns the mimeType. + * + * @return String + */ + public String getMimeType() { + return mimeType; + } + + } + + public void uploadFailed(FailedEvent event) { + System.out.println(event); + + System.out.println(event.getSource()); + + } + + public void uploadSucceeded(SucceededEvent event) { + pi.setVisible(false); + l.setValue("Finished upload, idle"); + System.out.println(event); + setBuffer(); + } + + public void updateProgress(long readBytes, long contentLenght) { + pi.setValue(new Float(readBytes / (float) contentLenght)); + + refreshMemUsage(); + } + + private void refreshMemUsage() { + memoryStatus.setValue("Not available in Java 1.4"); + /* + * StringBuffer mem = new StringBuffer(); MemoryMXBean mmBean = + * ManagementFactory.getMemoryMXBean(); mem.append("Heap (M):"); + * mem.append(mmBean.getHeapMemoryUsage().getUsed() / 1048576); + * mem.append(" |�Non-Heap (M):"); + * mem.append(mmBean.getNonHeapMemoryUsage().getUsed() / 1048576); + * memoryStatus.setValue(mem.toString()); + */ + } + + public void uploadStarted(StartedEvent event) { + pi.setVisible(true); + l.setValue("Started uploading file " + event.getFilename()); + } + +} diff --git a/src/com/itmill/toolkit/demo/testbench/TestForWindowOpen.java b/src/com/itmill/toolkit/demo/testbench/TestForWindowOpen.java new file mode 100644 index 0000000000..4c1546285d --- /dev/null +++ b/src/com/itmill/toolkit/demo/testbench/TestForWindowOpen.java @@ -0,0 +1,55 @@ +package com.itmill.toolkit.demo.testbench; + +import com.itmill.toolkit.terminal.ExternalResource; +import com.itmill.toolkit.ui.Button; +import com.itmill.toolkit.ui.CustomComponent; +import com.itmill.toolkit.ui.OrderedLayout; +import com.itmill.toolkit.ui.Button.ClickEvent; + +public class TestForWindowOpen extends CustomComponent { + + public TestForWindowOpen() { + + OrderedLayout main = new OrderedLayout(); + setCompositionRoot(main); + + main.addComponent(new Button("Open in this window", + new Button.ClickListener() { + + public void buttonClick(ClickEvent event) { + ExternalResource r = new ExternalResource( + "http://www.google.com"); + getApplication().getMainWindow().open(r); + + } + + })); + + main.addComponent(new Button("Open in target \"mytarget\"", + new Button.ClickListener() { + + public void buttonClick(ClickEvent event) { + ExternalResource r = new ExternalResource( + "http://www.google.com"); + getApplication().getMainWindow().open(r, "mytarget"); + + } + + })); + + main.addComponent(new Button("Open in target \"secondtarget\"", + new Button.ClickListener() { + + public void buttonClick(ClickEvent event) { + ExternalResource r = new ExternalResource( + "http://www.google.com"); + getApplication().getMainWindow() + .open(r, "secondtarget"); + + } + + })); + + } + +} diff --git a/src/com/itmill/toolkit/demo/testbench/TestForWindowing.java b/src/com/itmill/toolkit/demo/testbench/TestForWindowing.java new file mode 100644 index 0000000000..41b1b03516 --- /dev/null +++ b/src/com/itmill/toolkit/demo/testbench/TestForWindowing.java @@ -0,0 +1,84 @@ +package com.itmill.toolkit.demo.testbench; + +import com.itmill.toolkit.data.Property.ValueChangeEvent; +import com.itmill.toolkit.data.Property.ValueChangeListener; +import com.itmill.toolkit.ui.AbstractSelect; +import com.itmill.toolkit.ui.Button; +import com.itmill.toolkit.ui.CustomComponent; +import com.itmill.toolkit.ui.Label; +import com.itmill.toolkit.ui.OptionGroup; +import com.itmill.toolkit.ui.OrderedLayout; +import com.itmill.toolkit.ui.Select; +import com.itmill.toolkit.ui.Slider; +import com.itmill.toolkit.ui.Window; +import com.itmill.toolkit.ui.Button.ClickEvent; +import com.itmill.toolkit.ui.Button.ClickListener; + +public class TestForWindowing extends CustomComponent { + + private Select s2; + + public TestForWindowing() { + + OrderedLayout main = new OrderedLayout(); + + main.addComponent(new Label( + "Click the button to create a new inline window.")); + + Button create = new Button("Create a new window", new ClickListener() { + + public void buttonClick(ClickEvent event) { + Window w = new Window("Testing Window"); + + AbstractSelect s1 = new OptionGroup(); + s1.setCaption("1. Select output format"); + s1.addItem("Excel sheet"); + s1.addItem("CSV plain text"); + s1.setValue("Excel sheet"); + + s2 = new Select(); + s2.addItem("Separate by comma (,)"); + s2.addItem("Separate by colon (:)"); + s2.addItem("Separate by semicolon (;)"); + s2.setEnabled(false); + + s1.addListener(new ValueChangeListener() { + + public void valueChange(ValueChangeEvent event) { + String v = (String) event.getProperty().getValue(); + if (v.equals("CSV plain text")) { + s2.setEnabled(true); + } else { + s2.setEnabled(false); + } + } + + }); + + w.addComponent(s1); + w.addComponent(s2); + + Slider s = new Slider(); + s.setCaption("Volume"); + s.setMax(13); + s.setMin(12); + s.setResolution(2); + s.setImmediate(true); + // s.setOrientation(Slider.ORIENTATION_VERTICAL); + // s.setArrows(false); + + w.addComponent(s); + + getApplication().getMainWindow().addWindow(w); + + } + + }); + + main.addComponent(create); + + setCompositionRoot(main); + + } + +} diff --git a/src/com/itmill/toolkit/demo/testbench/TestSetVisibleAndCaching.java b/src/com/itmill/toolkit/demo/testbench/TestSetVisibleAndCaching.java new file mode 100644 index 0000000000..037e3f3c82 --- /dev/null +++ b/src/com/itmill/toolkit/demo/testbench/TestSetVisibleAndCaching.java @@ -0,0 +1,77 @@ +package com.itmill.toolkit.demo.testbench; + +import com.itmill.toolkit.ui.Button; +import com.itmill.toolkit.ui.Label; +import com.itmill.toolkit.ui.Panel; +import com.itmill.toolkit.ui.Window; +import com.itmill.toolkit.ui.Button.ClickEvent; +import com.itmill.toolkit.ui.Button.ClickListener; + +public class TestSetVisibleAndCaching extends com.itmill.toolkit.Application { + + Panel panelA = new Panel("Panel A"); + Panel panelB = new Panel("Panel B"); + Panel panelC = new Panel("Panel C"); + + Button buttonNextPanel = new Button("Show next panel"); + + int selectedPanel = 0; + + public void init() { + Window mainWindow = new Window("TestSetVisibleAndCaching"); + setMainWindow(mainWindow); + + panelA.addComponent(new Label( + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")); + panelB.addComponent(new Label( + "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB")); + panelC.addComponent(new Label( + "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC")); + + mainWindow + .addComponent(new Label( + "Inspect transfered data from server to " + + "client using firebug (http request / response cycles)." + + " See how widgets are re-used," + + " after each panel is once shown in GUI then" + + " their contents are not resend.")); + mainWindow.addComponent(buttonNextPanel); + mainWindow.addComponent(panelA); + mainWindow.addComponent(panelB); + mainWindow.addComponent(panelC); + + selectPanel(selectedPanel); + + buttonNextPanel.addListener(new ClickListener() { + public void buttonClick(ClickEvent event) { + selectedPanel++; + if (selectedPanel > 2) { + selectedPanel = 0; + } + selectPanel(selectedPanel); + } + }); + + } + + private void selectPanel(int selectedPanel) { + System.err.println("Selecting panel " + selectedPanel); + switch (selectedPanel) { + case 0: + panelA.setVisible(true); + panelB.setVisible(false); + panelC.setVisible(false); + break; + case 1: + panelA.setVisible(false); + panelB.setVisible(true); + panelC.setVisible(false); + break; + case 2: + panelA.setVisible(false); + panelB.setVisible(false); + panelC.setVisible(true); + break; + } + } +} diff --git a/src/com/itmill/toolkit/demo/testbench/TestSplitPanel.java b/src/com/itmill/toolkit/demo/testbench/TestSplitPanel.java new file mode 100644 index 0000000000..7493d0fd07 --- /dev/null +++ b/src/com/itmill/toolkit/demo/testbench/TestSplitPanel.java @@ -0,0 +1,22 @@ +package com.itmill.toolkit.demo.testbench; + +import com.itmill.toolkit.ui.Label; +import com.itmill.toolkit.ui.SplitPanel; +import com.itmill.toolkit.ui.Window; + +public class TestSplitPanel extends com.itmill.toolkit.Application { + + SplitPanel verticalSplit = new SplitPanel(SplitPanel.ORIENTATION_VERTICAL); + + public void init() { + Window mainWindow = new Window("Feature Browser"); + setMainWindow(mainWindow); + + verticalSplit.setFirstComponent(new Label("vertical first")); + verticalSplit.setSecondComponent(new Label("vertical second")); + + mainWindow.setLayout(verticalSplit); + + } + +} -- 2.39.5