summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatti Tahvonen <matti.tahvonen@itmill.com>2008-05-23 07:20:19 +0000
committerMatti Tahvonen <matti.tahvonen@itmill.com>2008-05-23 07:20:19 +0000
commit8aa09c9b0fc275ad29607d3711f628536456d234 (patch)
tree6094130151970fce63371d06d210dad5552425d3 /src
parent36c12f2c1deafea8ebf87ca614c0e2c12387502d (diff)
downloadvaadin-framework-8aa09c9b0fc275ad29607d3711f628536456d234.tar.gz
vaadin-framework-8aa09c9b0fc275ad29607d3711f628536456d234.zip
support for uri and parameter handlers in subwindows (forwards to main window, still needs logic for non attached subwindows)
svn changeset:4618/svn branch:trunk
Diffstat (limited to 'src')
-rw-r--r--src/com/itmill/toolkit/ui/Window.java92
1 files changed, 57 insertions, 35 deletions
diff --git a/src/com/itmill/toolkit/ui/Window.java b/src/com/itmill/toolkit/ui/Window.java
index f8d8322d7c..d8bc210cd6 100644
--- a/src/com/itmill/toolkit/ui/Window.java
+++ b/src/com/itmill/toolkit/ui/Window.java
@@ -263,20 +263,26 @@ public class Window extends Panel implements URIHandler, ParameterHandler {
/* ********************************************************************* */
/**
- * Adds the new URI handler to this window.
+ * Adds the new URI handler to this window. For sub-windows, URI handlers
+ * are attached to root level window.
*
* @param handler
* the URI handler to add.
*/
public void addURIHandler(URIHandler handler) {
- // TODO Subwindow support
-
- if (uriHandlerList == null) {
- uriHandlerList = new LinkedList();
- }
- synchronized (uriHandlerList) {
- if (!uriHandlerList.contains(handler)) {
- uriHandlerList.addLast(handler);
+ if (getParent() != null) {
+ // this is subwindow, attach to main level instead
+ // TODO hold internal list also and remove on detach
+ Window mainWindow = (Window) getParent();
+ mainWindow.addURIHandler(handler);
+ } else {
+ if (uriHandlerList == null) {
+ uriHandlerList = new LinkedList();
+ }
+ synchronized (uriHandlerList) {
+ if (!uriHandlerList.contains(handler)) {
+ uriHandlerList.addLast(handler);
+ }
}
}
}
@@ -288,15 +294,19 @@ public class Window extends Panel implements URIHandler, ParameterHandler {
* the URI handler to remove.
*/
public void removeURIHandler(URIHandler handler) {
- // TODO Subwindow support
-
- if (handler == null || uriHandlerList == null) {
- return;
- }
- synchronized (uriHandlerList) {
- uriHandlerList.remove(handler);
- if (uriHandlerList.isEmpty()) {
- uriHandlerList = null;
+ if (getParent() != null) {
+ // this is subwindow
+ Window mainWindow = (Window) getParent();
+ mainWindow.removeURIHandler(handler);
+ } else {
+ if (handler == null || uriHandlerList == null) {
+ return;
+ }
+ synchronized (uriHandlerList) {
+ uriHandlerList.remove(handler);
+ if (uriHandlerList.isEmpty()) {
+ uriHandlerList = null;
+ }
}
}
}
@@ -308,7 +318,6 @@ public class Window extends Panel implements URIHandler, ParameterHandler {
* @param relativeUri
*/
public DownloadStream handleURI(URL context, String relativeUri) {
- // TODO Subwindow support
DownloadStream result = null;
if (uriHandlerList != null) {
@@ -335,21 +344,29 @@ public class Window extends Panel implements URIHandler, ParameterHandler {
/* ********************************************************************* */
/**
- * Adds the new parameter handler to this window.
+ * Adds the new parameter handler to this window. For sub windows, parameter
+ * handlers are attached to parent windows.
*
* @param handler
* the parameter handler to add.
*/
public void addParameterHandler(ParameterHandler handler) {
- // TODO Subwindow support
- if (parameterHandlerList == null) {
- parameterHandlerList = new LinkedList();
- }
- synchronized (parameterHandlerList) {
- if (!parameterHandlerList.contains(handler)) {
- parameterHandlerList.addLast(handler);
+ if (getParent() != null) {
+ // this is subwindow
+ // TODO hold internal list also and remove on detach
+ Window mainWindow = (Window) getParent();
+ mainWindow.addParameterHandler(handler);
+ } else {
+ if (parameterHandlerList == null) {
+ parameterHandlerList = new LinkedList();
+ }
+ synchronized (parameterHandlerList) {
+ if (!parameterHandlerList.contains(handler)) {
+ parameterHandlerList.addLast(handler);
+ }
}
}
+
}
/**
@@ -359,14 +376,19 @@ public class Window extends Panel implements URIHandler, ParameterHandler {
* the parameter handler to remove.
*/
public void removeParameterHandler(ParameterHandler handler) {
- // TODO Subwindow support
- if (handler == null || parameterHandlerList == null) {
- return;
- }
- synchronized (parameterHandlerList) {
- parameterHandlerList.remove(handler);
- if (parameterHandlerList.isEmpty()) {
- parameterHandlerList = null;
+ if (getParent() != null) {
+ // this is subwindow
+ Window mainWindow = (Window) getParent();
+ mainWindow.addParameterHandler(handler);
+ } else {
+ if (handler == null || parameterHandlerList == null) {
+ return;
+ }
+ synchronized (parameterHandlerList) {
+ parameterHandlerList.remove(handler);
+ if (parameterHandlerList.isEmpty()) {
+ parameterHandlerList = null;
+ }
}
}
}