You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

AbstractComponentContainerConnector.java 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /*
  2. @VaadinApache2LicenseForJavaFiles@
  3. */
  4. package com.vaadin.terminal.gwt.client.ui;
  5. import java.util.ArrayList;
  6. import java.util.Collection;
  7. import com.google.gwt.user.client.ui.HasOneWidget;
  8. import com.google.gwt.user.client.ui.HasWidgets;
  9. import com.google.gwt.user.client.ui.Widget;
  10. import com.vaadin.terminal.gwt.client.ConnectorMap;
  11. import com.vaadin.terminal.gwt.client.ComponentConnector;
  12. import com.vaadin.terminal.gwt.client.ComponentContainerConnector;
  13. public abstract class AbstractComponentContainerConnector extends
  14. AbstractComponentConnector implements ComponentContainerConnector {
  15. /**
  16. * Default constructor
  17. */
  18. public AbstractComponentContainerConnector() {
  19. }
  20. public Collection<ComponentConnector> getChildren() {
  21. Collection<ComponentConnector> children = new ArrayList<ComponentConnector>();
  22. addDescendantPaintables(getWidget(), children,
  23. ConnectorMap.get(getConnection()));
  24. return children;
  25. }
  26. private static void addDescendantPaintables(Widget widget,
  27. Collection<ComponentConnector> paintables, ConnectorMap paintableMap) {
  28. // FIXME: Store hierarchy instead of doing lookup every time
  29. if (widget instanceof HasWidgets) {
  30. for (Widget child : (HasWidgets) widget) {
  31. addIfPaintable(child, paintables, paintableMap);
  32. }
  33. } else if (widget instanceof HasOneWidget) {
  34. Widget child = ((HasOneWidget) widget).getWidget();
  35. addIfPaintable(child, paintables, paintableMap);
  36. }
  37. }
  38. private static void addIfPaintable(Widget widget,
  39. Collection<ComponentConnector> paintables, ConnectorMap paintableMap) {
  40. ComponentConnector paintable = paintableMap.getConnector(widget);
  41. if (paintable != null) {
  42. // If widget is a paintable, add it to the collection
  43. paintables.add(paintable);
  44. } else {
  45. // Else keep looking for paintables inside the widget
  46. addDescendantPaintables(widget, paintables, paintableMap);
  47. }
  48. }
  49. }