aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com/vaadin/terminal/gwt/client/VPaintableWidgetContainer.java4
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/VAbstractPaintableWidgetContainer.java34
2 files changed, 37 insertions, 1 deletions
diff --git a/src/com/vaadin/terminal/gwt/client/VPaintableWidgetContainer.java b/src/com/vaadin/terminal/gwt/client/VPaintableWidgetContainer.java
index baf266546d..da48eeb2fb 100644
--- a/src/com/vaadin/terminal/gwt/client/VPaintableWidgetContainer.java
+++ b/src/com/vaadin/terminal/gwt/client/VPaintableWidgetContainer.java
@@ -4,6 +4,8 @@
package com.vaadin.terminal.gwt.client;
+import java.util.Collection;
+
import com.google.gwt.user.client.ui.HasWidgets;
/**
@@ -40,6 +42,6 @@ public interface VPaintableWidgetContainer extends VPaintableWidget {
* @return A collection of children for this paintable. An empty collection
* if there are no children.
*/
- // public Collection<VPaintableWidget> getChildren();
+ public Collection<VPaintableWidget> getChildren();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/VAbstractPaintableWidgetContainer.java b/src/com/vaadin/terminal/gwt/client/ui/VAbstractPaintableWidgetContainer.java
index 1f78c02f58..ebdb05a6c8 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/VAbstractPaintableWidgetContainer.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/VAbstractPaintableWidgetContainer.java
@@ -3,6 +3,13 @@
*/
package com.vaadin.terminal.gwt.client.ui;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import com.google.gwt.user.client.ui.HasWidgets;
+import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.terminal.gwt.client.VPaintableMap;
+import com.vaadin.terminal.gwt.client.VPaintableWidget;
import com.vaadin.terminal.gwt.client.VPaintableWidgetContainer;
public abstract class VAbstractPaintableWidgetContainer extends
@@ -14,4 +21,31 @@ public abstract class VAbstractPaintableWidgetContainer extends
public VAbstractPaintableWidgetContainer() {
}
+ public Collection<VPaintableWidget> getChildren() {
+ Collection<VPaintableWidget> children = new ArrayList<VPaintableWidget>();
+
+ addDescendantPaintables(getWidgetForPaintable(), children,
+ VPaintableMap.get(getConnection()));
+
+ return children;
+ }
+
+ private static void addDescendantPaintables(Widget widget,
+ Collection<VPaintableWidget> paintables, VPaintableMap paintableMap) {
+ // FIXME: Store hierarchy instead of doing lookup every time
+
+ if (widget instanceof HasWidgets) {
+ for (Widget child : (HasWidgets) widget) {
+ VPaintableWidget paintable = paintableMap.getPaintable(child);
+ if (paintable != null) {
+ // If child is a paintable, add it to the collection
+ paintables.add(paintable);
+ } else {
+ // Else keep looking for paintables inside the child widget
+ addDescendantPaintables(child, paintables, paintableMap);
+ }
+ }
+ }
+ }
+
}