From 49799b2e3c23ba01d9aa5b204404361cf4039a2a Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Tue, 31 Jan 2012 09:56:14 +0200 Subject: [PATCH] Crude first implementation of getParentPaintable Moved caption handling from Container to newly introduced VPaintableWidgetContainer --- .../gwt/client/ApplicationConnection.java | 38 +++++++++------- .../vaadin/terminal/gwt/client/Container.java | 4 ++ .../terminal/gwt/client/VPaintableWidget.java | 7 +++ .../gwt/client/VPaintableWidgetContainer.java | 45 +++++++++++++++++++ .../client/ui/VAbstractPaintableWidget.java | 35 +++++++++++++-- .../ui/VAbstractPaintableWidgetContainer.java | 17 +++++++ 6 files changed, 126 insertions(+), 20 deletions(-) create mode 100644 src/com/vaadin/terminal/gwt/client/VPaintableWidgetContainer.java create mode 100644 src/com/vaadin/terminal/gwt/client/ui/VAbstractPaintableWidgetContainer.java diff --git a/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java b/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java index e659a18477..796c13c173 100644 --- a/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java +++ b/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java @@ -39,6 +39,7 @@ import com.vaadin.terminal.gwt.client.RenderInformation.FloatSize; import com.vaadin.terminal.gwt.client.RenderInformation.Size; import com.vaadin.terminal.gwt.client.ui.Field; import com.vaadin.terminal.gwt.client.ui.VAbstractPaintableWidget; +import com.vaadin.terminal.gwt.client.ui.VAbstractPaintableWidgetContainer; import com.vaadin.terminal.gwt.client.ui.VContextMenu; import com.vaadin.terminal.gwt.client.ui.VNotification; import com.vaadin.terminal.gwt.client.ui.VNotification.HideEvent; @@ -1659,11 +1660,7 @@ public class ApplicationConnection { // Changed invisibile <-> visible if (wasVisible && manageCaption) { // Must hide caption when component is hidden - final Container parent = Util.getLayout(component); - if (parent != null) { - parent.updateCaption(paintable, uidl); - } - + updateCaption(paintable, uidl); } } @@ -1708,10 +1705,7 @@ public class ApplicationConnection { // Set captions if (manageCaption) { - final Container parent = Util.getLayout(component); - if (parent != null) { - parent.updateCaption(paintable, uidl); - } + updateCaption(paintable, uidl); } // add error classname to components w/ error @@ -1721,13 +1715,6 @@ public class ApplicationConnection { tooltipInfo.setErrorUidl(null); } - // Set captions - if (manageCaption) { - final Container parent = Util.getLayout(component); - if (parent != null) { - parent.updateCaption(paintable, uidl); - } - } /* * updateComponentSize need to be after caption update so caption can be * taken into account @@ -1738,6 +1725,25 @@ public class ApplicationConnection { return false; } + @Deprecated + private void updateCaption(VPaintableWidget paintable, UIDL uidl) { + if (paintable instanceof VAbstractPaintableWidget) { + VPaintableWidget parent = ((VAbstractPaintableWidget) paintable) + .getParentPaintable(); + if (parent instanceof VAbstractPaintableWidgetContainer) { + ((VPaintableWidgetContainer) parent).updateCaption(paintable, + uidl); + return; + } + } + + // Old Container interface + // FIXME: Remove + Util.getLayout(paintable.getWidgetForPaintable()).updateCaption( + paintable, uidl); + + } + /** * Generates the style name for the widget based on the given primary style * name (typically returned by Widget.getPrimaryStyleName()) and the UIDL. diff --git a/src/com/vaadin/terminal/gwt/client/Container.java b/src/com/vaadin/terminal/gwt/client/Container.java index db6bbf0ee4..d78177f3f9 100644 --- a/src/com/vaadin/terminal/gwt/client/Container.java +++ b/src/com/vaadin/terminal/gwt/client/Container.java @@ -8,6 +8,10 @@ import java.util.Set; import com.google.gwt.user.client.ui.Widget; +/** + * @deprecated To be removed before 7.0.0 + */ +@Deprecated public interface Container extends VPaintableWidget { /** diff --git a/src/com/vaadin/terminal/gwt/client/VPaintableWidget.java b/src/com/vaadin/terminal/gwt/client/VPaintableWidget.java index 2f0cae1cc1..0c1556208e 100644 --- a/src/com/vaadin/terminal/gwt/client/VPaintableWidget.java +++ b/src/com/vaadin/terminal/gwt/client/VPaintableWidget.java @@ -21,4 +21,11 @@ public interface VPaintableWidget extends VPaintable { */ public Widget getWidgetForPaintable(); + /** + * Returns the parent {@link VPaintableWidgetContainer} + * + * @return + */ + // FIXME: Rename to getParent() + // public VPaintableWidget getParentPaintable(); } diff --git a/src/com/vaadin/terminal/gwt/client/VPaintableWidgetContainer.java b/src/com/vaadin/terminal/gwt/client/VPaintableWidgetContainer.java new file mode 100644 index 0000000000..baf266546d --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/VPaintableWidgetContainer.java @@ -0,0 +1,45 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ + +package com.vaadin.terminal.gwt.client; + +import com.google.gwt.user.client.ui.HasWidgets; + +/** + * An interface used by client-side paintables whose widget is a component + * container (implements {@link HasWidgets}). + */ +public interface VPaintableWidgetContainer extends VPaintableWidget { + + /** + * Update child components caption, description and error message. + * + *

+ * Each component is responsible for maintaining its caption, description + * and error message. In most cases components doesn't want to do that and + * those elements reside outside of the component. Because of this layouts + * must provide service for it's childen to show those elements for them. + *

+ * + * @param paintable + * Child component for which service is requested. + * @param uidl + * UIDL of the child component. + */ + void updateCaption(VPaintableWidget paintable, UIDL uidl); + + /** + * Returns the children for this paintable. + *

+ * The children for this paintable are defined as all + * {@link VPaintableWidget}s whose parent is this + * {@link VPaintableWidgetContainer}. + *

+ * + * @return A collection of children for this paintable. An empty collection + * if there are no children. + */ + // public Collection getChildren(); + +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/VAbstractPaintableWidget.java b/src/com/vaadin/terminal/gwt/client/ui/VAbstractPaintableWidget.java index 9a2e728454..7c82f39e6b 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VAbstractPaintableWidget.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VAbstractPaintableWidget.java @@ -5,15 +5,17 @@ package com.vaadin.terminal.gwt.client.ui; import com.google.gwt.user.client.ui.Widget; import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.VPaintableMap; import com.vaadin.terminal.gwt.client.VPaintableWidget; public abstract class VAbstractPaintableWidget implements VPaintableWidget { private Widget widget; private ApplicationConnection connection; + private String id; /* State variables */ - // private boolean enabled = true; + private boolean enabled = true; /** * Default constructor @@ -69,7 +71,32 @@ public abstract class VAbstractPaintableWidget implements VPaintableWidget { this.connection = connection; } - // public boolean isEnabled() { - // return enabled; - // } + public boolean isEnabled() { + return enabled; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public VPaintableWidget getParentPaintable() { + // FIXME: Return VPaintableWidgetContainer + // FIXME: Store hierarchy instead of doing lookup every time + + VPaintableMap paintableMap = VPaintableMap.get(getConnection()); + + Widget w = getWidgetForPaintable(); + while (w != null) { + w = w.getParent(); + if (paintableMap.isPaintable(w)) { + return paintableMap.getPaintable(w); + } + } + + return null; + } } diff --git a/src/com/vaadin/terminal/gwt/client/ui/VAbstractPaintableWidgetContainer.java b/src/com/vaadin/terminal/gwt/client/ui/VAbstractPaintableWidgetContainer.java new file mode 100644 index 0000000000..b3e19f037a --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/VAbstractPaintableWidgetContainer.java @@ -0,0 +1,17 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client.ui; + +import com.vaadin.terminal.gwt.client.VPaintableWidgetContainer; + +public abstract class VAbstractPaintableWidgetContainer extends + VAbstractPaintableWidget implements VPaintableWidgetContainer { + + /** + * Default constructor + */ + public VAbstractPaintableWidgetContainer() { + } + +} -- 2.39.5