From 47c134a14e5e4b851d4d73b6f802993d90760da4 Mon Sep 17 00:00:00 2001 From: Teppo Kurki Date: Tue, 13 Jan 2009 08:53:28 +0000 Subject: [PATCH] Fixed ComboBox example, added windowing examples. svn changeset:6511/svn branch:trunk --- .../toolkit/demo/sampler/FeatureSet.java | 15 ++++ .../selects/ComboBoxNewItemsExample.java | 29 ++++---- .../sampler/features/windows/WindowChild.java | 33 +++++++++ .../features/windows/WindowChildExample.java | 54 +++++++++++++++ .../features/windows/WindowNativeNew.java | 39 +++++++++++ .../windows/WindowNativeNewExample.java | 63 +++++++++++++++++ .../features/windows/WindowNativeShared.java | 41 +++++++++++ .../windows/WindowNativeSharedExample.java | 69 +++++++++++++++++++ 8 files changed, 330 insertions(+), 13 deletions(-) create mode 100644 src/com/itmill/toolkit/demo/sampler/features/windows/WindowChild.java create mode 100644 src/com/itmill/toolkit/demo/sampler/features/windows/WindowChildExample.java create mode 100644 src/com/itmill/toolkit/demo/sampler/features/windows/WindowNativeNew.java create mode 100644 src/com/itmill/toolkit/demo/sampler/features/windows/WindowNativeNewExample.java create mode 100644 src/com/itmill/toolkit/demo/sampler/features/windows/WindowNativeShared.java create mode 100644 src/com/itmill/toolkit/demo/sampler/features/windows/WindowNativeSharedExample.java diff --git a/src/com/itmill/toolkit/demo/sampler/FeatureSet.java b/src/com/itmill/toolkit/demo/sampler/FeatureSet.java index 610558996d..ce2990a317 100644 --- a/src/com/itmill/toolkit/demo/sampler/FeatureSet.java +++ b/src/com/itmill/toolkit/demo/sampler/FeatureSet.java @@ -39,6 +39,9 @@ import com.itmill.toolkit.demo.sampler.features.selects.TwinColumnSelect; import com.itmill.toolkit.demo.sampler.features.tabsheets.TabSheetDisabled; import com.itmill.toolkit.demo.sampler.features.tabsheets.TabSheetIcons; import com.itmill.toolkit.demo.sampler.features.tabsheets.TabSheetScrolling; +import com.itmill.toolkit.demo.sampler.features.windows.WindowChild; +import com.itmill.toolkit.demo.sampler.features.windows.WindowNativeNew; +import com.itmill.toolkit.demo.sampler.features.windows.WindowNativeShared; /** * Contains the FeatureSet implementation and the structure for the feature @@ -85,6 +88,7 @@ public class FeatureSet extends Feature { new Tabsheets(), // new Accordions(), // new Panels(), // + new Windows(), // }); } } @@ -199,6 +203,17 @@ public class FeatureSet extends Feature { } } + public static class Windows extends FeatureSet { + public Windows() { + super("Windows", new Feature[] { + // + new WindowNativeShared(), // + new WindowNativeNew(), // + new WindowChild(), // + }); + } + } + // ---------------------------------------------------------- /* * FeatureSet implementation follows. diff --git a/src/com/itmill/toolkit/demo/sampler/features/selects/ComboBoxNewItemsExample.java b/src/com/itmill/toolkit/demo/sampler/features/selects/ComboBoxNewItemsExample.java index 2c4e57c25a..339babd2a0 100644 --- a/src/com/itmill/toolkit/demo/sampler/features/selects/ComboBoxNewItemsExample.java +++ b/src/com/itmill/toolkit/demo/sampler/features/selects/ComboBoxNewItemsExample.java @@ -2,16 +2,17 @@ package com.itmill.toolkit.demo.sampler.features.selects; import com.itmill.toolkit.data.Property; import com.itmill.toolkit.data.Property.ValueChangeEvent; +import com.itmill.toolkit.ui.AbstractSelect; import com.itmill.toolkit.ui.ComboBox; import com.itmill.toolkit.ui.VerticalLayout; import com.itmill.toolkit.ui.AbstractSelect.Filtering; public class ComboBoxNewItemsExample extends VerticalLayout implements - Property.ValueChangeListener { - + Property.ValueChangeListener, AbstractSelect.NewItemHandler { private static final String[] cities = new String[] { "Berlin", "Brussels", "Helsinki", "Madrid", "Oslo", "Paris", "Stockholm" }; private ComboBox l; + private Boolean lastAdded = false; public ComboBoxNewItemsExample() { setSpacing(true); @@ -23,6 +24,7 @@ public class ComboBoxNewItemsExample extends VerticalLayout implements l.setFilteringMode(Filtering.FILTERINGMODE_OFF); l.setNewItemsAllowed(true); + l.setNewItemHandler(this); l.setImmediate(true); l.addListener(this); @@ -33,18 +35,19 @@ public class ComboBoxNewItemsExample extends VerticalLayout implements * Shows a notification when a selection is made. */ public void valueChange(ValueChangeEvent event) { - Boolean newItem = true; - String s = event.getProperty().toString(); - - for (int i = 0; i < cities.length; i++) { - if (s == null || s.equals(cities[i])) { - newItem = false; - } + if (!lastAdded) { + getWindow().showNotification( + "Selected city: " + event.getProperty()); } - if (newItem) { - getWindow().showNotification("Selected an added item: " + s); - } else { - getWindow().showNotification("Selected city: " + s); + lastAdded = false; + } + + public void addNewItem(String newItemCaption) { + if (!l.containsId(newItemCaption)) { + getWindow().showNotification("Added city: " + newItemCaption); + lastAdded = true; + l.addItem(newItemCaption); + l.setValue(newItemCaption); } } } diff --git a/src/com/itmill/toolkit/demo/sampler/features/windows/WindowChild.java b/src/com/itmill/toolkit/demo/sampler/features/windows/WindowChild.java new file mode 100644 index 0000000000..7ec9d0f85b --- /dev/null +++ b/src/com/itmill/toolkit/demo/sampler/features/windows/WindowChild.java @@ -0,0 +1,33 @@ +package com.itmill.toolkit.demo.sampler.features.windows; + +import com.itmill.toolkit.demo.sampler.APIResource; +import com.itmill.toolkit.demo.sampler.Feature; +import com.itmill.toolkit.demo.sampler.NamedExternalResource; +import com.itmill.toolkit.ui.Window; + +public class WindowChild extends Feature { + + @Override + public String getDescription() { + return "Creates and opens a new floating child window with its own state." + + "
Child windows are typically used for Dialog Windows and" + + " Multiple Document Interface applications."; + } + + @Override + public APIResource[] getRelatedAPI() { + return new APIResource[] { new APIResource(Window.class) }; + } + + @Override + public Class[] getRelatedFeatures() { + return new Class[] { WindowNativeShared.class, WindowNativeNew.class }; + } + + @Override + public NamedExternalResource[] getRelatedResources() { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/src/com/itmill/toolkit/demo/sampler/features/windows/WindowChildExample.java b/src/com/itmill/toolkit/demo/sampler/features/windows/WindowChildExample.java new file mode 100644 index 0000000000..69e2a3d890 --- /dev/null +++ b/src/com/itmill/toolkit/demo/sampler/features/windows/WindowChildExample.java @@ -0,0 +1,54 @@ +package com.itmill.toolkit.demo.sampler.features.windows; + +import com.itmill.toolkit.ui.Button; +import com.itmill.toolkit.ui.Label; +import com.itmill.toolkit.ui.VerticalLayout; +import com.itmill.toolkit.ui.Window; +import com.itmill.toolkit.ui.Button.ClickEvent; +import com.itmill.toolkit.ui.Window.CloseEvent; + +public class WindowChildExample extends VerticalLayout implements + Window.CloseListener { + + private Button b1; + private Button b2; + private Label l; + + public WindowChildExample() { + setSpacing(true); + + b1 = new Button( + "Create and open a new child window with its own state", this, + "openButtonClick"); + addComponent(b1); + + l = new Label("Amount of child windows attached to the main window: x"); + addComponent(l); + + b2 = new Button("Refresh", this, "refreshButtonClick"); + addComponent(b2); + } + + public void openButtonClick(ClickEvent event) { + Window w = new Window("New child window"); + Label desc = new Label("This is a new child window with its own state." + + " The child window is added to the main window" + + " instead of the application."); + w.addComponent(desc); + w.addListener(this); + w.setResizable(false); + getApplication().getMainWindow().addWindow(w); + } + + public void refreshButtonClick(ClickEvent event) { + l.setValue("Amount of child windows attached to the main window: " + + getApplication().getMainWindow().getChildWindows().size()); + } + + public void windowClose(CloseEvent e) { + // In this example, the window will be removed after closing + getApplication().getMainWindow().removeWindow(e.getWindow()); + System.err.println("Sampler->WindowChildExample: Window close event"); + } + +} \ No newline at end of file diff --git a/src/com/itmill/toolkit/demo/sampler/features/windows/WindowNativeNew.java b/src/com/itmill/toolkit/demo/sampler/features/windows/WindowNativeNew.java new file mode 100644 index 0000000000..d4bf5e7f06 --- /dev/null +++ b/src/com/itmill/toolkit/demo/sampler/features/windows/WindowNativeNew.java @@ -0,0 +1,39 @@ +package com.itmill.toolkit.demo.sampler.features.windows; + +import com.itmill.toolkit.demo.sampler.APIResource; +import com.itmill.toolkit.demo.sampler.Feature; +import com.itmill.toolkit.demo.sampler.NamedExternalResource; +import com.itmill.toolkit.ui.Window; + +public class WindowNativeNew extends Feature { + + @Override + public String getDescription() { + return "Creates and opens a new native browser window with its own state." + + "
Native browser" + + " windows can either share the same state (instance) or have their own" + + " internal state (instance). In practice the former option means that the" + + " URL of the window will always be same (pointing to the same Window object" + + ", whereas using the latter option generates a new URL (and Window instance)" + + " for each new window." + + "
It is essential to remember to remove the closed windows from the" + + " application e.g. by implementing the Window.CloseListener interface."; + } + + @Override + public APIResource[] getRelatedAPI() { + return new APIResource[] { new APIResource(Window.class) }; + } + + @Override + public Class[] getRelatedFeatures() { + return new Class[] { WindowNativeShared.class, WindowChild.class }; + } + + @Override + public NamedExternalResource[] getRelatedResources() { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/src/com/itmill/toolkit/demo/sampler/features/windows/WindowNativeNewExample.java b/src/com/itmill/toolkit/demo/sampler/features/windows/WindowNativeNewExample.java new file mode 100644 index 0000000000..cd91e0e2eb --- /dev/null +++ b/src/com/itmill/toolkit/demo/sampler/features/windows/WindowNativeNewExample.java @@ -0,0 +1,63 @@ +package com.itmill.toolkit.demo.sampler.features.windows; + +import com.itmill.toolkit.terminal.ExternalResource; +import com.itmill.toolkit.ui.Button; +import com.itmill.toolkit.ui.Label; +import com.itmill.toolkit.ui.VerticalLayout; +import com.itmill.toolkit.ui.Window; +import com.itmill.toolkit.ui.Button.ClickEvent; +import com.itmill.toolkit.ui.Window.CloseEvent; + +public class WindowNativeNewExample extends VerticalLayout implements + Window.CloseListener { + + private Button b1; + private Button b2; + private Label l; + + public WindowNativeNewExample() { + setSpacing(true); + + b1 = new Button( + "Create and open a new native window with its own state", this, + "openButtonClick"); + addComponent(b1); + + l = new Label("Amount of windows in memory:"); + addComponent(l); + + b2 = new Button("Refresh", this, "refreshButtonClick"); + addComponent(b2); + } + + public void openButtonClick(ClickEvent event) { + Window w = new Window("Native subwindow"); + Label desc = new Label( + "This is a new native window with its own state." + + " You'll notice that if you open a new window several" + + " times, the URL will be unique for each window, and the" + + " amount of windows in memory will increase by one." + + " When you close this window, the amount of windows in" + + " memory should decrease by one." + + " The window is added to the application and then" + + " opened through its unique URL."); + w.addComponent(desc); + w.addListener(this); + getApplication().addWindow(w); + getApplication().getMainWindow().open(new ExternalResource(w.getURL()), + "_blank"); + } + + public void refreshButtonClick(ClickEvent event) { + l.setValue("Amount of windows in memory: " + + getApplication().getWindows().size()); + } + + public void windowClose(CloseEvent e) { + // In this example, the window will be removed after closing, + getApplication().removeWindow(e.getWindow()); + System.err + .println("Sampler->WindowNativeNewExample: Window close event"); + } + +} \ No newline at end of file diff --git a/src/com/itmill/toolkit/demo/sampler/features/windows/WindowNativeShared.java b/src/com/itmill/toolkit/demo/sampler/features/windows/WindowNativeShared.java new file mode 100644 index 0000000000..33b0baa6b1 --- /dev/null +++ b/src/com/itmill/toolkit/demo/sampler/features/windows/WindowNativeShared.java @@ -0,0 +1,41 @@ +package com.itmill.toolkit.demo.sampler.features.windows; + +import com.itmill.toolkit.demo.sampler.APIResource; +import com.itmill.toolkit.demo.sampler.Feature; +import com.itmill.toolkit.demo.sampler.NamedExternalResource; +import com.itmill.toolkit.ui.Window; + +public class WindowNativeShared extends Feature { + + @Override + public String getDescription() { + return "Creates and opens a new native browser window with shared state. If the" + + " window object has already been created, it will only be reopened." + + "
Native browser" + + " windows can either share the same state (instance) or have their own" + + " internal state (instance). In practice the former option means that the" + + " URL of the window will always be same (pointing to the same Window object" + + ", whereas using the latter option generates a new URL (and Window instance)" + + " for each new window." + + "
When using the latter option it is essential to remember to remove" + + " the closed windows from the" + + " application e.g. by implementing the Window.CloseListener interface."; + } + + @Override + public APIResource[] getRelatedAPI() { + return new APIResource[] { new APIResource(Window.class) }; + } + + @Override + public Class[] getRelatedFeatures() { + return new Class[] { WindowNativeNew.class, WindowChild.class }; + } + + @Override + public NamedExternalResource[] getRelatedResources() { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/src/com/itmill/toolkit/demo/sampler/features/windows/WindowNativeSharedExample.java b/src/com/itmill/toolkit/demo/sampler/features/windows/WindowNativeSharedExample.java new file mode 100644 index 0000000000..1166d3ecf1 --- /dev/null +++ b/src/com/itmill/toolkit/demo/sampler/features/windows/WindowNativeSharedExample.java @@ -0,0 +1,69 @@ +package com.itmill.toolkit.demo.sampler.features.windows; + +import java.net.URL; + +import com.itmill.toolkit.terminal.ExternalResource; +import com.itmill.toolkit.ui.Button; +import com.itmill.toolkit.ui.Label; +import com.itmill.toolkit.ui.VerticalLayout; +import com.itmill.toolkit.ui.Window; +import com.itmill.toolkit.ui.Button.ClickEvent; +import com.itmill.toolkit.ui.Window.CloseEvent; + +public class WindowNativeSharedExample extends VerticalLayout implements + Window.CloseListener { + + private URL nativeWindowURL = null; + private Button b1; + private Button b2; + private Label l; + + public WindowNativeSharedExample() { + setSpacing(true); + + b1 = new Button("Create/open a new native window with shared state", + this, "openButtonClick"); + addComponent(b1); + + l = new Label("Amount of windows in memory:"); + addComponent(l); + + b2 = new Button("Refresh", this, "refreshButtonClick"); + addComponent(b2); + } + + public void openButtonClick(ClickEvent event) { + if (nativeWindowURL == null) { + final Window w = new Window("Native subwindow"); + final Label desc = new Label( + "This is a new native window with a shared state." + + " You'll notice that even if you open this several" + + " times, the URL will always be the same, and the" + + " amount of windows in memory will not increase. " + + " The window is added to the application and then" + + " opened through its unique URL."); + w.addComponent(desc); + w.addListener(this); + getApplication().addWindow(w); + nativeWindowURL = w.getURL(); + } + getApplication().getMainWindow().open( + new ExternalResource(nativeWindowURL), "_blank"); + } + + public void refreshButtonClick(ClickEvent event) { + l.setValue("Amount of windows in memory: " + + getApplication().getWindows().size()); + } + + public void windowClose(CloseEvent e) { + // In this example, the window will not be removed after closing, + // in order to preserve the window's URL functional. Normally you would + // remove the window after closing as follows: + // getApplication().removeWindow(e.getWindow()); + + System.err + .println("Sampler->WindowNativeSharedExample: Window close event"); + } + +} \ No newline at end of file -- 2.39.5