From: Artur Signell Date: Thu, 10 Jan 2013 17:26:19 +0000 (+0200) Subject: Changed CustomFieldConnector hierarchy to be consistent with server side (#8797) X-Git-Tag: 7.0.0.rc1~36^2 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=9b2f258bdd7ae0a83d5b08e7a41b3e1c4d34b188;p=vaadin-framework.git Changed CustomFieldConnector hierarchy to be consistent with server side (#8797) Change-Id: I6a2286cd1247ba4f3cd205aa805a62c194c0085b --- diff --git a/client/src/com/vaadin/client/ui/customfield/CustomFieldConnector.java b/client/src/com/vaadin/client/ui/customfield/CustomFieldConnector.java index 541c3d6b62..c6e4b87b73 100644 --- a/client/src/com/vaadin/client/ui/customfield/CustomFieldConnector.java +++ b/client/src/com/vaadin/client/ui/customfield/CustomFieldConnector.java @@ -15,20 +15,109 @@ */ package com.vaadin.client.ui.customfield; -import com.google.gwt.core.client.GWT; -import com.vaadin.client.ui.customcomponent.CustomComponentConnector; -import com.vaadin.shared.AbstractFieldState; -import com.vaadin.shared.communication.SharedState; +import java.util.Collections; +import java.util.List; + +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.client.ComponentConnector; +import com.vaadin.client.ConnectorHierarchyChangeEvent; +import com.vaadin.client.ConnectorHierarchyChangeEvent.ConnectorHierarchyChangeHandler; +import com.vaadin.client.HasComponentsConnector; +import com.vaadin.client.ui.AbstractFieldConnector; +import com.vaadin.client.ui.VCustomComponent; import com.vaadin.shared.ui.Connect; import com.vaadin.ui.CustomField; @Connect(value = CustomField.class) -public class CustomFieldConnector extends CustomComponentConnector { +public class CustomFieldConnector extends AbstractFieldConnector implements + HasComponentsConnector, ConnectorHierarchyChangeHandler { + + List childComponents; + + /** + * Default constructor + */ + public CustomFieldConnector() { + addConnectorHierarchyChangeHandler(this); + } + @Override - protected SharedState createState() { - // Workaround as CustomFieldConnector does not extend - // AbstractFieldConnector. - return GWT.create(AbstractFieldState.class); + public VCustomComponent getWidget() { + return (VCustomComponent) super.getWidget(); + } + + @Override + public void updateCaption(ComponentConnector connector) { + // NOP, custom field does not render the caption of its content + } + + @Override + public void onConnectorHierarchyChange(ConnectorHierarchyChangeEvent event) { + // We always have 1 child, unless the child is hidden + getWidget().setWidget(getContentWidget()); + } + + /* + * (non-Javadoc) + * + * @see com.vaadin.client.HasComponentsConnector#getChildren() + */ + @Override + public List getChildComponents() { + if (childComponents == null) { + return Collections.emptyList(); + } + + return childComponents; + } + + /* + * (non-Javadoc) + * + * @see com.vaadin.client.HasComponentsConnector#setChildren + * (java.util.Collection) + */ + @Override + public void setChildComponents(List childComponents) { + this.childComponents = childComponents; + } + + @Override + public HandlerRegistration addConnectorHierarchyChangeHandler( + ConnectorHierarchyChangeHandler handler) { + return ensureHandlerManager().addHandler( + ConnectorHierarchyChangeEvent.TYPE, handler); + } + + /** + * Returns the content (only/first child) of the container. + * + * @return child connector or null if none (e.g. invisible or not set on + * server) + */ + protected ComponentConnector getContent() { + List children = getChildComponents(); + if (children.isEmpty()) { + return null; + } else { + return children.get(0); + } + } + + /** + * Returns the widget (if any) of the content of the container. + * + * @return widget of the only/first connector of the container, null if no + * content or if there is no widget for the connector + */ + protected Widget getContentWidget() { + ComponentConnector content = getContent(); + if (null != content) { + return content.getWidget(); + } else { + return null; + } } }