From cbf6114cc3935600e1b724434d111cbb516c7ba4 Mon Sep 17 00:00:00 2001 From: Marc Englund Date: Thu, 26 Feb 2009 21:13:39 +0000 Subject: [PATCH] Sampler: Windowing section rewrite done, fixes #2601 and thus #2684 svn changeset:6979/svn branch:trunk --- .../toolkit/demo/sampler/FeatureSet.java | 5 +- .../features/windows/NativeWindow.java | 18 ++-- .../features/windows/NativeWindowExample.java | 85 +++++++++++++------ .../sampler/features/windows/Subwindow.java | 3 +- .../features/windows/SubwindowAutoSized.java | 3 +- .../features/windows/SubwindowClose.java | 5 +- .../features/windows/SubwindowModal.java | 9 +- .../features/windows/SubwindowPositioned.java | 3 +- .../windows/SubwindowPositionedExample.java | 20 +++-- .../features/windows/SubwindowSized.java | 3 +- 10 files changed, 101 insertions(+), 53 deletions(-) diff --git a/src/com/itmill/toolkit/demo/sampler/FeatureSet.java b/src/com/itmill/toolkit/demo/sampler/FeatureSet.java index c36086c3dd..6c9da622ac 100644 --- a/src/com/itmill/toolkit/demo/sampler/FeatureSet.java +++ b/src/com/itmill/toolkit/demo/sampler/FeatureSet.java @@ -76,6 +76,7 @@ import com.itmill.toolkit.demo.sampler.features.trees.TreeActions; import com.itmill.toolkit.demo.sampler.features.trees.TreeMouseEvents; import com.itmill.toolkit.demo.sampler.features.trees.TreeMultiSelect; import com.itmill.toolkit.demo.sampler.features.trees.TreeSingleSelect; +import com.itmill.toolkit.demo.sampler.features.windows.NativeWindow; import com.itmill.toolkit.demo.sampler.features.windows.Subwindow; import com.itmill.toolkit.demo.sampler.features.windows.SubwindowAutoSized; import com.itmill.toolkit.demo.sampler.features.windows.SubwindowClose; @@ -304,7 +305,7 @@ public class FeatureSet extends Feature { super( "Windows", "Windows", - "Windows can for instance organize the UI, save space (popup windows), focus attention (modal windows), provide multiple views for multitasking (native browser windows).", + "Windows can (for instance) organize the UI, save space (popup windows), focus attention (modal windows), or provide multiple views for the same data for multitasking or dual screen setups (native browser windows).", new Feature[] { // new Subwindow(), // @@ -313,7 +314,7 @@ public class FeatureSet extends Feature { new SubwindowSized(), // new SubwindowPositioned(), // new SubwindowClose(), // - // new NativeWindow(), // in progress + new NativeWindow(), // }); } } diff --git a/src/com/itmill/toolkit/demo/sampler/features/windows/NativeWindow.java b/src/com/itmill/toolkit/demo/sampler/features/windows/NativeWindow.java index d82a2c3d12..6b955192d0 100644 --- a/src/com/itmill/toolkit/demo/sampler/features/windows/NativeWindow.java +++ b/src/com/itmill/toolkit/demo/sampler/features/windows/NativeWindow.java @@ -3,20 +3,28 @@ 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.demo.sampler.FeatureSet.Links; +import com.itmill.toolkit.demo.sampler.FeatureSet.Windows; import com.itmill.toolkit.ui.Window; public class NativeWindow extends Feature { @Override public String getName() { - return "Subwindow"; + return "Native window"; } @Override public String getDescription() { - return "A Subwindow is a popup-window within the browser window." - + " There can be multiple subwindows in one (native) browser" - + " window."; + return "A NativeWindow is a separate browser window, which" + + " looks and works just like the main window.
" + + " There are multiple ways to make native windows; you can" + + " override Application.getWindow() (recommended in any case)" + + " but you can also use Application.addWindow() - the added" + + " window will be available from a separate URL (which is" + + " based on the window name.)
When you view Sampler in" + + " a new window, the getWindow() method is used, this example" + + " also uses addWindow()."; } @Override @@ -26,7 +34,7 @@ public class NativeWindow extends Feature { @Override public Class[] getRelatedFeatures() { - return new Class[] { SubwindowModal.class }; + return new Class[] { Subwindow.class, Links.class, Windows.class }; } @Override diff --git a/src/com/itmill/toolkit/demo/sampler/features/windows/NativeWindowExample.java b/src/com/itmill/toolkit/demo/sampler/features/windows/NativeWindowExample.java index 80c377fb11..43cdfdcc18 100644 --- a/src/com/itmill/toolkit/demo/sampler/features/windows/NativeWindowExample.java +++ b/src/com/itmill/toolkit/demo/sampler/features/windows/NativeWindowExample.java @@ -1,54 +1,83 @@ package com.itmill.toolkit.demo.sampler.features.windows; +import java.util.Date; + import com.itmill.toolkit.terminal.ExternalResource; import com.itmill.toolkit.ui.Button; import com.itmill.toolkit.ui.Label; +import com.itmill.toolkit.ui.Link; 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 NativeWindowExample extends VerticalLayout { - Window window; - public NativeWindowExample() { - - // Create the window - window = new Window("Automatically sized subwindow"); - // Native windows should be explicitly removed from the application - // when appropriate; in this case when closed: - window.addListener(new Window.CloseListener() { - // inline close-listener - public void windowClose(CloseEvent e) { - getApplication().removeWindow(window); - } - }); - - // Configure the windows layout; by default a VerticalLayout - VerticalLayout layout = (VerticalLayout) window.getLayout(); - layout.setMargin(true); - layout.setSpacing(true); - // make it undefined for auto-sizing window - layout.setSizeUndefined(); - - // Add some content; - window.addComponent(new Label("This is is native (browser) window.")); + setSpacing(true); // Add a button for opening the window Button open = new Button("Open native window", new Button.ClickListener() { // inline click-listener public void buttonClick(ClickEvent event) { + Window window = new NativeWindow(); + // Add the window to the application getApplication().addWindow(window); - getApplication().getMainWindow().open( - new ExternalResource(window.getURL()), - "NativeWindowExample", 500, 500, - Window.BORDER_NONE); + + // Get the URL for the window, and open that in a new + // browser window, in this case in a small window. + getWindow().open(new ExternalResource(window.getURL()), // URL + "_blank", // window name + 500, // width + 200, // weight + Window.BORDER_NONE // decorations + ); } }); addComponent(open); + // Add a link for opening sampler in a new window; this will cause + // Sampler's getWindow() to create a new Window. + Link openSampler = new Link("Open Sampler in a new window", + new ExternalResource("#"), // URL + "_blank", // window name + 700, // width + 500, // height + Link.TARGET_BORDER_NONE // decorations + ); + addComponent(openSampler); + + } + + /* + * We'll be instantiating the same window multiple times, so we'll make an + * inner class for separation. You could of course just create a new + * Window() and addCompoent to that instead. + */ + class NativeWindow extends Window { + NativeWindow() { + // Configure the layout + VerticalLayout layout = (VerticalLayout) getLayout(); + layout.setMargin(true); + layout.setSpacing(true); + + // Add some content; a label and a close-button + Label message = new Label("This is a native window, created at " + + new Date()); + addComponent(message); + + // It's a good idea to remove the window when it's closed (also + // when the browser window 'x' is used), unless you explicitly + // want the window to persist (if it's not removed from the + // application, it can still be retrieved from it's URL. + addListener(new CloseListener() { + public void windowClose(CloseEvent e) { + // remove from application + getApplication().removeWindow(NativeWindow.this); + } + }); + + } } } \ No newline at end of file diff --git a/src/com/itmill/toolkit/demo/sampler/features/windows/Subwindow.java b/src/com/itmill/toolkit/demo/sampler/features/windows/Subwindow.java index 27a053f66a..b19eb42b3e 100644 --- a/src/com/itmill/toolkit/demo/sampler/features/windows/Subwindow.java +++ b/src/com/itmill/toolkit/demo/sampler/features/windows/Subwindow.java @@ -2,6 +2,7 @@ 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.FeatureSet; import com.itmill.toolkit.demo.sampler.NamedExternalResource; import com.itmill.toolkit.ui.Window; @@ -26,7 +27,7 @@ public class Subwindow extends Feature { @Override public Class[] getRelatedFeatures() { - return new Class[] { SubwindowModal.class }; + return new Class[] { NativeWindow.class, FeatureSet.Windows.class }; } @Override diff --git a/src/com/itmill/toolkit/demo/sampler/features/windows/SubwindowAutoSized.java b/src/com/itmill/toolkit/demo/sampler/features/windows/SubwindowAutoSized.java index 97c44fe885..c3cc0ac636 100644 --- a/src/com/itmill/toolkit/demo/sampler/features/windows/SubwindowAutoSized.java +++ b/src/com/itmill/toolkit/demo/sampler/features/windows/SubwindowAutoSized.java @@ -2,6 +2,7 @@ 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.FeatureSet; import com.itmill.toolkit.demo.sampler.NamedExternalResource; import com.itmill.toolkit.ui.Window; @@ -27,7 +28,7 @@ public class SubwindowAutoSized extends Feature { @Override public Class[] getRelatedFeatures() { - return new Class[] { SubwindowModal.class }; + return new Class[] { SubwindowSized.class, FeatureSet.Windows.class }; } @Override diff --git a/src/com/itmill/toolkit/demo/sampler/features/windows/SubwindowClose.java b/src/com/itmill/toolkit/demo/sampler/features/windows/SubwindowClose.java index 4b86dedb7e..59bb6e3df1 100644 --- a/src/com/itmill/toolkit/demo/sampler/features/windows/SubwindowClose.java +++ b/src/com/itmill/toolkit/demo/sampler/features/windows/SubwindowClose.java @@ -2,6 +2,7 @@ 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.FeatureSet; import com.itmill.toolkit.demo.sampler.NamedExternalResource; import com.itmill.toolkit.ui.Window; @@ -9,7 +10,7 @@ public class SubwindowClose extends Feature { @Override public String getName() { - return "Subwindow"; + return "Window closing"; } @Override @@ -24,7 +25,7 @@ public class SubwindowClose extends Feature { @Override public Class[] getRelatedFeatures() { - return new Class[] { SubwindowModal.class }; + return new Class[] { FeatureSet.Windows.class }; } @Override diff --git a/src/com/itmill/toolkit/demo/sampler/features/windows/SubwindowModal.java b/src/com/itmill/toolkit/demo/sampler/features/windows/SubwindowModal.java index 5625e0b44e..ac57b9fded 100644 --- a/src/com/itmill/toolkit/demo/sampler/features/windows/SubwindowModal.java +++ b/src/com/itmill/toolkit/demo/sampler/features/windows/SubwindowModal.java @@ -2,8 +2,8 @@ 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.FeatureSet; import com.itmill.toolkit.demo.sampler.NamedExternalResource; -import com.itmill.toolkit.demo.sampler.features.blueprints.ProminentPrimaryAction; import com.itmill.toolkit.ui.Window; public class SubwindowModal extends Feature { @@ -15,8 +15,8 @@ public class SubwindowModal extends Feature { @Override public String getDescription() { - return "A modal window blocks access to the rest of the application, " - + "until the window is closed (or made non-modal).
" + return "A modal window blocks access to the rest of the application" + + " until the window is closed (or made non-modal).
" + " Use modal windows when the user must finish the task in the" + " window before continuing."; } @@ -31,8 +31,7 @@ public class SubwindowModal extends Feature { return new Class[] { // Subwindow.class, // - ProminentPrimaryAction.class, // - }; + FeatureSet.Windows.class }; } @Override diff --git a/src/com/itmill/toolkit/demo/sampler/features/windows/SubwindowPositioned.java b/src/com/itmill/toolkit/demo/sampler/features/windows/SubwindowPositioned.java index a14383ee6b..564319cada 100644 --- a/src/com/itmill/toolkit/demo/sampler/features/windows/SubwindowPositioned.java +++ b/src/com/itmill/toolkit/demo/sampler/features/windows/SubwindowPositioned.java @@ -2,6 +2,7 @@ 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.FeatureSet; import com.itmill.toolkit.demo.sampler.NamedExternalResource; import com.itmill.toolkit.ui.Window; @@ -24,7 +25,7 @@ public class SubwindowPositioned extends Feature { @Override public Class[] getRelatedFeatures() { - return new Class[] { SubwindowModal.class }; + return new Class[] { FeatureSet.Windows.class }; } @Override diff --git a/src/com/itmill/toolkit/demo/sampler/features/windows/SubwindowPositionedExample.java b/src/com/itmill/toolkit/demo/sampler/features/windows/SubwindowPositionedExample.java index 54550b9b62..9d6e6fa132 100644 --- a/src/com/itmill/toolkit/demo/sampler/features/windows/SubwindowPositionedExample.java +++ b/src/com/itmill/toolkit/demo/sampler/features/windows/SubwindowPositionedExample.java @@ -40,33 +40,37 @@ public class SubwindowPositionedExample extends VerticalLayout { layout.setComponentAlignment(close, "right bottom"); // Add buttons for opening the subwindow - Button fifty = new Button("Open positioned window at 50x50", + Button fifty = new Button("Open window at position 50x50", new Button.ClickListener() { // inline click-listener public void buttonClick(ClickEvent event) { - subwindow.setPositionX(50); - subwindow.setPositionY(50); if (subwindow.getParent() == null) { // Open the subwindow by adding it to the main // window getApplication().getMainWindow().addWindow( subwindow); } + + // Set window position + subwindow.setPositionX(50); + subwindow.setPositionY(50); } }); addComponent(fifty); - Button onefifty = new Button("Open positioned window at 150x150", + Button onefifty = new Button("Open window at position 150x200", new Button.ClickListener() { // inline click-listener public void buttonClick(ClickEvent event) { - subwindow.setPositionX(150); - subwindow.setPositionY(150); if (subwindow.getParent() == null) { // Open the subwindow by adding it to the main // window getApplication().getMainWindow().addWindow( subwindow); } + + // Set window position + subwindow.setPositionX(150); + subwindow.setPositionY(200); } }); addComponent(onefifty); @@ -74,13 +78,15 @@ public class SubwindowPositionedExample extends VerticalLayout { new Button.ClickListener() { // inline click-listener public void buttonClick(ClickEvent event) { - subwindow.center(); if (subwindow.getParent() == null) { // Open the subwindow by adding it to the main // window getApplication().getMainWindow().addWindow( subwindow); } + + // Center the window + subwindow.center(); } }); addComponent(center); diff --git a/src/com/itmill/toolkit/demo/sampler/features/windows/SubwindowSized.java b/src/com/itmill/toolkit/demo/sampler/features/windows/SubwindowSized.java index cb77a54803..90ec8a82a6 100644 --- a/src/com/itmill/toolkit/demo/sampler/features/windows/SubwindowSized.java +++ b/src/com/itmill/toolkit/demo/sampler/features/windows/SubwindowSized.java @@ -2,6 +2,7 @@ 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.FeatureSet; import com.itmill.toolkit.demo.sampler.NamedExternalResource; import com.itmill.toolkit.ui.Window; @@ -25,7 +26,7 @@ public class SubwindowSized extends Feature { @Override public Class[] getRelatedFeatures() { - return new Class[] { SubwindowModal.class }; + return new Class[] { SubwindowAutoSized.class, FeatureSet.Windows.class }; } @Override -- 2.39.5