aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatti Tahvonen <matti.tahvonen@itmill.com>2007-03-12 12:26:35 +0000
committerMatti Tahvonen <matti.tahvonen@itmill.com>2007-03-12 12:26:35 +0000
commit3c25fa9105d6344dc426a465d1550edfe6cc3604 (patch)
treee217e9e0c6d32964c073e648875251c7d6318c00
parent22d3109b724e249edb8ef4abf09171d1ff80003a (diff)
downloadvaadin-framework-3c25fa9105d6344dc426a465d1550edfe6cc3604.tar.gz
vaadin-framework-3c25fa9105d6344dc426a465d1550edfe6cc3604.zip
DIW windows: now closing mechanism is pretty much complete
svn changeset:845/svn branch:trunk
-rw-r--r--src/com/itmill/toolkit/demo/features/FeatureWindow.java9
-rw-r--r--src/com/itmill/toolkit/ui/Window.java47
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));
+ }
}