From 3c25fa9105d6344dc426a465d1550edfe6cc3604 Mon Sep 17 00:00:00 2001 From: Matti Tahvonen Date: Mon, 12 Mar 2007 12:26:35 +0000 Subject: [PATCH] DIW windows: now closing mechanism is pretty much complete svn changeset:845/svn branch:trunk --- .../toolkit/demo/features/FeatureWindow.java | 9 +++- src/com/itmill/toolkit/ui/Window.java | 47 ++++++++++++++++++- 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/src/com/itmill/toolkit/demo/features/FeatureWindow.java b/src/com/itmill/toolkit/demo/features/FeatureWindow.java index 7e2a3471f7..193ebc7253 100644 --- a/src/com/itmill/toolkit/demo/features/FeatureWindow.java +++ b/src/com/itmill/toolkit/demo/features/FeatureWindow.java @@ -29,8 +29,9 @@ package com.itmill.toolkit.demo.features; import com.itmill.toolkit.ui.*; +import com.itmill.toolkit.ui.Window.CloseEvent; -public class FeatureWindow extends Feature { +public class FeatureWindow extends Feature implements Window.CloseListener { Button addButton = new Button("Add to application", this, "addWin"); Button removeButton = new Button("Remove from application", this, "delWin"); @@ -49,6 +50,7 @@ public class FeatureWindow extends Feature { OrderedLayout layoutUpper = new OrderedLayout(); OrderedLayout layoutLower = new OrderedLayout(); demoWindow = new Window("Feature Test Window"); + demoWindow.addListener(this); layoutUpper.addComponent(addButton); layoutUpper.addComponent(removeButton); @@ -127,6 +129,7 @@ public class FeatureWindow extends Feature { Label.CONTENT_XHTML)); windowProperties.getField("name").setReadOnly(true); + demoWindow.setVisible(true); updateWinStatus(); } @@ -145,4 +148,8 @@ public class FeatureWindow extends Feature { removeButton.setEnabled(true); } } + + public void windowClose(CloseEvent e) { + delWin(); + } } diff --git a/src/com/itmill/toolkit/ui/Window.java b/src/com/itmill/toolkit/ui/Window.java index 5a3f09a163..215a0c3d56 100644 --- a/src/com/itmill/toolkit/ui/Window.java +++ b/src/com/itmill/toolkit/ui/Window.java @@ -39,6 +39,7 @@ import com.itmill.toolkit.terminal.Terminal; import com.itmill.toolkit.terminal.URIHandler; import java.lang.ref.WeakReference; +import java.lang.reflect.Method; import java.net.MalformedURLException; import java.net.URL; import java.util.HashMap; @@ -674,9 +675,8 @@ public class Window extends Panel implements URIHandler, ParameterHandler { // Closing Boolean close = (Boolean) variables.get("close"); if (close != null && close.booleanValue()) { - - // TODO We should also throw an event to listeners this.setVisible(false); + fireClose(); } } @@ -767,4 +767,47 @@ public class Window extends Panel implements URIHandler, ParameterHandler { public void setPositionY(int positionY) { this.positionY = positionY; } + + private static final Method WINDOW_CLOSE_METHOD; + static { + try { + WINDOW_CLOSE_METHOD = + CloseListener.class.getDeclaredMethod( + "windowClose", + new Class[] { CloseEvent.class }); + } catch (java.lang.NoSuchMethodException e) { + // This should never happen + throw new java.lang.RuntimeException(); + } + } + + + public class CloseEvent extends Component.Event { + /** + * Serial generated by eclipse. + */ + private static final long serialVersionUID = -7235770057344367327L; + public CloseEvent(Component source) { + super(source); + } + public Window getWindow() { + return (Window) getSource(); + } + } + + public interface CloseListener { + public void windowClose(CloseEvent e); + } + + public void addListener(CloseListener listener) { + addListener(CloseEvent.class, listener, WINDOW_CLOSE_METHOD); + } + + public void removeListener(CloseListener listener) { + addListener(CloseEvent.class, listener, WINDOW_CLOSE_METHOD); + } + + protected void fireClose() { + fireEvent(new Window.CloseEvent(this)); + } } -- 2.39.5