]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fixed ComboBox example, added windowing examples.
authorTeppo Kurki <teppo.kurki@itmill.com>
Tue, 13 Jan 2009 08:53:28 +0000 (08:53 +0000)
committerTeppo Kurki <teppo.kurki@itmill.com>
Tue, 13 Jan 2009 08:53:28 +0000 (08:53 +0000)
svn changeset:6511/svn branch:trunk

src/com/itmill/toolkit/demo/sampler/FeatureSet.java
src/com/itmill/toolkit/demo/sampler/features/selects/ComboBoxNewItemsExample.java
src/com/itmill/toolkit/demo/sampler/features/windows/WindowChild.java [new file with mode: 0644]
src/com/itmill/toolkit/demo/sampler/features/windows/WindowChildExample.java [new file with mode: 0644]
src/com/itmill/toolkit/demo/sampler/features/windows/WindowNativeNew.java [new file with mode: 0644]
src/com/itmill/toolkit/demo/sampler/features/windows/WindowNativeNewExample.java [new file with mode: 0644]
src/com/itmill/toolkit/demo/sampler/features/windows/WindowNativeShared.java [new file with mode: 0644]
src/com/itmill/toolkit/demo/sampler/features/windows/WindowNativeSharedExample.java [new file with mode: 0644]

index 610558996dc6d2a68181662cca150cc5eec40686..ce2990a317eeedd6323f6ba031e5b7a84b49acf2 100644 (file)
@@ -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.
index 2c4e57c25a742e4bdb128b8fb48d0ae8c6ddfc4a..339babd2a0d49be93ede96cda509f83a19bd1ea0 100644 (file)
@@ -2,16 +2,17 @@ package com.itmill.toolkit.demo.sampler.features.selects;
 \r
 import com.itmill.toolkit.data.Property;\r
 import com.itmill.toolkit.data.Property.ValueChangeEvent;\r
+import com.itmill.toolkit.ui.AbstractSelect;\r
 import com.itmill.toolkit.ui.ComboBox;\r
 import com.itmill.toolkit.ui.VerticalLayout;\r
 import com.itmill.toolkit.ui.AbstractSelect.Filtering;\r
 \r
 public class ComboBoxNewItemsExample extends VerticalLayout implements\r
-        Property.ValueChangeListener {\r
-\r
+        Property.ValueChangeListener, AbstractSelect.NewItemHandler {\r
     private static final String[] cities = new String[] { "Berlin", "Brussels",\r
             "Helsinki", "Madrid", "Oslo", "Paris", "Stockholm" };\r
     private ComboBox l;\r
+    private Boolean lastAdded = false;\r
 \r
     public ComboBoxNewItemsExample() {\r
         setSpacing(true);\r
@@ -23,6 +24,7 @@ public class ComboBoxNewItemsExample extends VerticalLayout implements
 \r
         l.setFilteringMode(Filtering.FILTERINGMODE_OFF);\r
         l.setNewItemsAllowed(true);\r
+        l.setNewItemHandler(this);\r
         l.setImmediate(true);\r
         l.addListener(this);\r
 \r
@@ -33,18 +35,19 @@ public class ComboBoxNewItemsExample extends VerticalLayout implements
      * Shows a notification when a selection is made.\r
      */\r
     public void valueChange(ValueChangeEvent event) {\r
-        Boolean newItem = true;\r
-        String s = event.getProperty().toString();\r
-\r
-        for (int i = 0; i < cities.length; i++) {\r
-            if (s == null || s.equals(cities[i])) {\r
-                newItem = false;\r
-            }\r
+        if (!lastAdded) {\r
+            getWindow().showNotification(\r
+                    "Selected city: " + event.getProperty());\r
         }\r
-        if (newItem) {\r
-            getWindow().showNotification("Selected an added item: " + s);\r
-        } else {\r
-            getWindow().showNotification("Selected city: " + s);\r
+        lastAdded = false;\r
+    }\r
+\r
+    public void addNewItem(String newItemCaption) {\r
+        if (!l.containsId(newItemCaption)) {\r
+            getWindow().showNotification("Added city: " + newItemCaption);\r
+            lastAdded = true;\r
+            l.addItem(newItemCaption);\r
+            l.setValue(newItemCaption);\r
         }\r
     }\r
 }\r
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 (file)
index 0000000..7ec9d0f
--- /dev/null
@@ -0,0 +1,33 @@
+package com.itmill.toolkit.demo.sampler.features.windows;\r
+\r
+import com.itmill.toolkit.demo.sampler.APIResource;\r
+import com.itmill.toolkit.demo.sampler.Feature;\r
+import com.itmill.toolkit.demo.sampler.NamedExternalResource;\r
+import com.itmill.toolkit.ui.Window;\r
+\r
+public class WindowChild extends Feature {\r
+\r
+    @Override\r
+    public String getDescription() {\r
+        return "Creates and opens a new floating child window with its own state."\r
+                + "<br>Child windows are typically used for Dialog Windows and"\r
+                + " Multiple Document Interface applications.";\r
+    }\r
+\r
+    @Override\r
+    public APIResource[] getRelatedAPI() {\r
+        return new APIResource[] { new APIResource(Window.class) };\r
+    }\r
+\r
+    @Override\r
+    public Class[] getRelatedFeatures() {\r
+        return new Class[] { WindowNativeShared.class, WindowNativeNew.class };\r
+    }\r
+\r
+    @Override\r
+    public NamedExternalResource[] getRelatedResources() {\r
+        // TODO Auto-generated method stub\r
+        return null;\r
+    }\r
+\r
+}\r
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 (file)
index 0000000..69e2a3d
--- /dev/null
@@ -0,0 +1,54 @@
+package com.itmill.toolkit.demo.sampler.features.windows;\r
+\r
+import com.itmill.toolkit.ui.Button;\r
+import com.itmill.toolkit.ui.Label;\r
+import com.itmill.toolkit.ui.VerticalLayout;\r
+import com.itmill.toolkit.ui.Window;\r
+import com.itmill.toolkit.ui.Button.ClickEvent;\r
+import com.itmill.toolkit.ui.Window.CloseEvent;\r
+\r
+public class WindowChildExample extends VerticalLayout implements\r
+        Window.CloseListener {\r
+\r
+    private Button b1;\r
+    private Button b2;\r
+    private Label l;\r
+\r
+    public WindowChildExample() {\r
+        setSpacing(true);\r
+\r
+        b1 = new Button(\r
+                "Create and open a new child window with its own state", this,\r
+                "openButtonClick");\r
+        addComponent(b1);\r
+\r
+        l = new Label("Amount of child windows attached to the main window: x");\r
+        addComponent(l);\r
+\r
+        b2 = new Button("Refresh", this, "refreshButtonClick");\r
+        addComponent(b2);\r
+    }\r
+\r
+    public void openButtonClick(ClickEvent event) {\r
+        Window w = new Window("New child window");\r
+        Label desc = new Label("This is a new child window with its own state."\r
+                + " The child window is added to the main window"\r
+                + " instead of the application.");\r
+        w.addComponent(desc);\r
+        w.addListener(this);\r
+        w.setResizable(false);\r
+        getApplication().getMainWindow().addWindow(w);\r
+    }\r
+\r
+    public void refreshButtonClick(ClickEvent event) {\r
+        l.setValue("Amount of child windows attached to the main window: "\r
+                + getApplication().getMainWindow().getChildWindows().size());\r
+    }\r
+\r
+    public void windowClose(CloseEvent e) {\r
+        // In this example, the window will be removed after closing\r
+        getApplication().getMainWindow().removeWindow(e.getWindow());\r
+        System.err.println("Sampler->WindowChildExample: Window close event");\r
+    }\r
+\r
+}
\ 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 (file)
index 0000000..d4bf5e7
--- /dev/null
@@ -0,0 +1,39 @@
+package com.itmill.toolkit.demo.sampler.features.windows;\r
+\r
+import com.itmill.toolkit.demo.sampler.APIResource;\r
+import com.itmill.toolkit.demo.sampler.Feature;\r
+import com.itmill.toolkit.demo.sampler.NamedExternalResource;\r
+import com.itmill.toolkit.ui.Window;\r
+\r
+public class WindowNativeNew extends Feature {\r
+\r
+    @Override\r
+    public String getDescription() {\r
+        return "Creates and opens a new native browser window with its own state."\r
+                + "<br>Native browser"\r
+                + " windows can either share the same state (instance) or have their own"\r
+                + " internal state (instance). In practice the former option means that the"\r
+                + " URL of the window will always be same (pointing to the same Window object"\r
+                + ", whereas using the latter option generates a new URL (and Window instance)"\r
+                + " for each new window."\r
+                + "<br>It is essential to remember to remove the closed windows from the"\r
+                + " application e.g. by implementing the Window.CloseListener interface.";\r
+    }\r
+\r
+    @Override\r
+    public APIResource[] getRelatedAPI() {\r
+        return new APIResource[] { new APIResource(Window.class) };\r
+    }\r
+\r
+    @Override\r
+    public Class[] getRelatedFeatures() {\r
+        return new Class[] { WindowNativeShared.class, WindowChild.class };\r
+    }\r
+\r
+    @Override\r
+    public NamedExternalResource[] getRelatedResources() {\r
+        // TODO Auto-generated method stub\r
+        return null;\r
+    }\r
+\r
+}\r
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 (file)
index 0000000..cd91e0e
--- /dev/null
@@ -0,0 +1,63 @@
+package com.itmill.toolkit.demo.sampler.features.windows;\r
+\r
+import com.itmill.toolkit.terminal.ExternalResource;\r
+import com.itmill.toolkit.ui.Button;\r
+import com.itmill.toolkit.ui.Label;\r
+import com.itmill.toolkit.ui.VerticalLayout;\r
+import com.itmill.toolkit.ui.Window;\r
+import com.itmill.toolkit.ui.Button.ClickEvent;\r
+import com.itmill.toolkit.ui.Window.CloseEvent;\r
+\r
+public class WindowNativeNewExample extends VerticalLayout implements\r
+        Window.CloseListener {\r
+\r
+    private Button b1;\r
+    private Button b2;\r
+    private Label l;\r
+\r
+    public WindowNativeNewExample() {\r
+        setSpacing(true);\r
+\r
+        b1 = new Button(\r
+                "Create and open a new native window with its own state", this,\r
+                "openButtonClick");\r
+        addComponent(b1);\r
+\r
+        l = new Label("Amount of windows in memory:");\r
+        addComponent(l);\r
+\r
+        b2 = new Button("Refresh", this, "refreshButtonClick");\r
+        addComponent(b2);\r
+    }\r
+\r
+    public void openButtonClick(ClickEvent event) {\r
+        Window w = new Window("Native subwindow");\r
+        Label desc = new Label(\r
+                "This is a new native window with its own state."\r
+                        + " You'll notice that if you open a new window several"\r
+                        + " times, the URL will be unique for each window, and the"\r
+                        + " amount of windows in memory will increase by one."\r
+                        + " When you close this window, the amount of windows in"\r
+                        + " memory should decrease by one."\r
+                        + " The window is added to the application and then"\r
+                        + " opened through its unique URL.");\r
+        w.addComponent(desc);\r
+        w.addListener(this);\r
+        getApplication().addWindow(w);\r
+        getApplication().getMainWindow().open(new ExternalResource(w.getURL()),\r
+                "_blank");\r
+    }\r
+\r
+    public void refreshButtonClick(ClickEvent event) {\r
+        l.setValue("Amount of windows in memory: "\r
+                + getApplication().getWindows().size());\r
+    }\r
+\r
+    public void windowClose(CloseEvent e) {\r
+        // In this example, the window will be removed after closing,\r
+        getApplication().removeWindow(e.getWindow());\r
+        System.err\r
+                .println("Sampler->WindowNativeNewExample: Window close event");\r
+    }\r
+\r
+}
\ 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 (file)
index 0000000..33b0baa
--- /dev/null
@@ -0,0 +1,41 @@
+package com.itmill.toolkit.demo.sampler.features.windows;\r
+\r
+import com.itmill.toolkit.demo.sampler.APIResource;\r
+import com.itmill.toolkit.demo.sampler.Feature;\r
+import com.itmill.toolkit.demo.sampler.NamedExternalResource;\r
+import com.itmill.toolkit.ui.Window;\r
+\r
+public class WindowNativeShared extends Feature {\r
+\r
+    @Override\r
+    public String getDescription() {\r
+        return "Creates and opens a new native browser window with shared state. If the"\r
+                + " window object has already been created, it will only be reopened."\r
+                + "<br>Native browser"\r
+                + " windows can either share the same state (instance) or have their own"\r
+                + " internal state (instance). In practice the former option means that the"\r
+                + " URL of the window will always be same (pointing to the same Window object"\r
+                + ", whereas using the latter option generates a new URL (and Window instance)"\r
+                + " for each new window."\r
+                + "<br>When using the latter option it is essential to remember to remove"\r
+                + " the closed windows from the"\r
+                + " application e.g. by implementing the Window.CloseListener interface.";\r
+    }\r
+\r
+    @Override\r
+    public APIResource[] getRelatedAPI() {\r
+        return new APIResource[] { new APIResource(Window.class) };\r
+    }\r
+\r
+    @Override\r
+    public Class[] getRelatedFeatures() {\r
+        return new Class[] { WindowNativeNew.class, WindowChild.class };\r
+    }\r
+\r
+    @Override\r
+    public NamedExternalResource[] getRelatedResources() {\r
+        // TODO Auto-generated method stub\r
+        return null;\r
+    }\r
+\r
+}\r
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 (file)
index 0000000..1166d3e
--- /dev/null
@@ -0,0 +1,69 @@
+package com.itmill.toolkit.demo.sampler.features.windows;\r
+\r
+import java.net.URL;\r
+\r
+import com.itmill.toolkit.terminal.ExternalResource;\r
+import com.itmill.toolkit.ui.Button;\r
+import com.itmill.toolkit.ui.Label;\r
+import com.itmill.toolkit.ui.VerticalLayout;\r
+import com.itmill.toolkit.ui.Window;\r
+import com.itmill.toolkit.ui.Button.ClickEvent;\r
+import com.itmill.toolkit.ui.Window.CloseEvent;\r
+\r
+public class WindowNativeSharedExample extends VerticalLayout implements\r
+        Window.CloseListener {\r
+\r
+    private URL nativeWindowURL = null;\r
+    private Button b1;\r
+    private Button b2;\r
+    private Label l;\r
+\r
+    public WindowNativeSharedExample() {\r
+        setSpacing(true);\r
+\r
+        b1 = new Button("Create/open a new native window with shared state",\r
+                this, "openButtonClick");\r
+        addComponent(b1);\r
+\r
+        l = new Label("Amount of windows in memory:");\r
+        addComponent(l);\r
+\r
+        b2 = new Button("Refresh", this, "refreshButtonClick");\r
+        addComponent(b2);\r
+    }\r
+\r
+    public void openButtonClick(ClickEvent event) {\r
+        if (nativeWindowURL == null) {\r
+            final Window w = new Window("Native subwindow");\r
+            final Label desc = new Label(\r
+                    "This is a new native window with a shared state."\r
+                            + " You'll notice that even if you open this several"\r
+                            + " times, the URL will always be the same, and the"\r
+                            + " amount of windows in memory will not increase. "\r
+                            + " The window is added to the application and then"\r
+                            + " opened through its unique URL.");\r
+            w.addComponent(desc);\r
+            w.addListener(this);\r
+            getApplication().addWindow(w);\r
+            nativeWindowURL = w.getURL();\r
+        }\r
+        getApplication().getMainWindow().open(\r
+                new ExternalResource(nativeWindowURL), "_blank");\r
+    }\r
+\r
+    public void refreshButtonClick(ClickEvent event) {\r
+        l.setValue("Amount of windows in memory: "\r
+                + getApplication().getWindows().size());\r
+    }\r
+\r
+    public void windowClose(CloseEvent e) {\r
+        // In this example, the window will not be removed after closing,\r
+        // in order to preserve the window's URL functional. Normally you would\r
+        // remove the window after closing as follows:\r
+        // getApplication().removeWindow(e.getWindow());\r
+\r
+        System.err\r
+                .println("Sampler->WindowNativeSharedExample: Window close event");\r
+    }\r
+\r
+}
\ No newline at end of file