From a5a0f646388da4c92c6d81a847d684822bff01ef Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Tue, 31 Jan 2012 09:57:33 +0200 Subject: [PATCH] Split CssLayout into widget + paintable --- .../terminal/gwt/client/ui/VCssLayout.java | 85 +++++++------------ .../gwt/client/ui/VCssLayoutPaintable.java | 61 +++++++++++++ src/com/vaadin/ui/CssLayout.java | 4 +- 3 files changed, 92 insertions(+), 58 deletions(-) create mode 100644 src/com/vaadin/terminal/gwt/client/ui/VCssLayoutPaintable.java diff --git a/src/com/vaadin/terminal/gwt/client/ui/VCssLayout.java b/src/com/vaadin/terminal/gwt/client/ui/VCssLayout.java index ffd7fc49b2..8a13beceef 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VCssLayout.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VCssLayout.java @@ -11,9 +11,6 @@ import java.util.Iterator; import java.util.Set; import com.google.gwt.dom.client.Style; -import com.google.gwt.event.dom.client.DomEvent.Type; -import com.google.gwt.event.shared.EventHandler; -import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Element; import com.google.gwt.user.client.ui.FlowPanel; @@ -21,8 +18,6 @@ import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.Widget; import com.vaadin.terminal.gwt.client.ApplicationConnection; import com.vaadin.terminal.gwt.client.BrowserInfo; -import com.vaadin.terminal.gwt.client.Container; -import com.vaadin.terminal.gwt.client.EventId; import com.vaadin.terminal.gwt.client.RenderSpace; import com.vaadin.terminal.gwt.client.StyleConstants; import com.vaadin.terminal.gwt.client.UIDL; @@ -33,33 +28,17 @@ import com.vaadin.terminal.gwt.client.VPaintableMap; import com.vaadin.terminal.gwt.client.VPaintableWidget; import com.vaadin.terminal.gwt.client.ValueMap; -public class VCssLayout extends SimplePanel implements VPaintableWidget, - Container { +public class VCssLayout extends SimplePanel { public static final String TAGNAME = "csslayout"; public static final String CLASSNAME = "v-" + TAGNAME; - private FlowPane panel = new FlowPane(); + FlowPane panel = new FlowPane(); - private Element margin = DOM.createDiv(); - - private LayoutClickEventHandler clickEventHandler = new LayoutClickEventHandler( - this, EventId.LAYOUT_CLICK) { - - @Override - protected VPaintableWidget getChildComponent(Element element) { - return panel.getComponent(element); - } - - @Override - protected HandlerRegistration registerHandler( - H handler, Type type) { - return addDomHandler(handler, type); - } - }; + Element margin = DOM.createDiv(); private boolean hasHeight; private boolean hasWidth; - private boolean rendering; + boolean rendering; public VCssLayout() { super(); @@ -94,32 +73,6 @@ public class VCssLayout extends SimplePanel implements VPaintableWidget, } } - public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - rendering = true; - - if (client.updateComponent(this, uidl, true)) { - rendering = false; - return; - } - clickEventHandler.handleEventHandlerRegistration(client); - - final VMarginInfo margins = new VMarginInfo( - uidl.getIntAttribute("margins")); - setStyleName(margin, CLASSNAME + "-" + StyleConstants.MARGIN_TOP, - margins.hasTop()); - setStyleName(margin, CLASSNAME + "-" + StyleConstants.MARGIN_RIGHT, - margins.hasRight()); - setStyleName(margin, CLASSNAME + "-" + StyleConstants.MARGIN_BOTTOM, - margins.hasBottom()); - setStyleName(margin, CLASSNAME + "-" + StyleConstants.MARGIN_LEFT, - margins.hasLeft()); - - setStyleName(margin, CLASSNAME + "-" + "spacing", - uidl.hasAttribute("spacing")); - panel.updateFromUIDL(uidl, client); - rendering = false; - } - public boolean hasChildComponent(Widget component) { return panel.hasChildComponent(component); } @@ -128,10 +81,6 @@ public class VCssLayout extends SimplePanel implements VPaintableWidget, panel.replaceChildComponent(oldComponent, newComponent); } - public void updateCaption(VPaintableWidget component, UIDL uidl) { - panel.updateCaption(component, uidl); - } - public class FlowPane extends FlowPanel { private final HashMap widgetToCaption = new HashMap(); @@ -275,7 +224,7 @@ public class VCssLayout extends SimplePanel implements VPaintableWidget, } } - private VPaintableWidget getComponent(Element element) { + VPaintableWidget getComponent(Element element) { return Util .getPaintableForElement(client, VCssLayout.this, element); } @@ -347,4 +296,28 @@ public class VCssLayout extends SimplePanel implements VPaintableWidget, public Widget getWidgetForPaintable() { return this; } + + /** + * Sets CSS classes for margin and spacing based on the given parameters. + * + * @param margins + * A {@link VMarginInfo} object that provides info on + * top/left/bottom/right margins + * @param spacing + * true to enable spacing, false otherwise + */ + protected void setMarginAndSpacingStyles(VMarginInfo margins, + boolean spacing) { + setStyleName(margin, VCssLayout.CLASSNAME + "-" + + StyleConstants.MARGIN_TOP, margins.hasTop()); + setStyleName(margin, VCssLayout.CLASSNAME + "-" + + StyleConstants.MARGIN_RIGHT, margins.hasRight()); + setStyleName(margin, VCssLayout.CLASSNAME + "-" + + StyleConstants.MARGIN_BOTTOM, margins.hasBottom()); + setStyleName(margin, VCssLayout.CLASSNAME + "-" + + StyleConstants.MARGIN_LEFT, margins.hasLeft()); + + setStyleName(margin, VCssLayout.CLASSNAME + "-" + "spacing", spacing); + + } } diff --git a/src/com/vaadin/terminal/gwt/client/ui/VCssLayoutPaintable.java b/src/com/vaadin/terminal/gwt/client/ui/VCssLayoutPaintable.java new file mode 100644 index 0000000000..d8640e3fe5 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/ui/VCssLayoutPaintable.java @@ -0,0 +1,61 @@ +package com.vaadin.terminal.gwt.client.ui; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.dom.client.DomEvent.Type; +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.user.client.Element; +import com.google.gwt.user.client.ui.Widget; +import com.vaadin.terminal.gwt.client.ApplicationConnection; +import com.vaadin.terminal.gwt.client.EventId; +import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.VPaintableWidget; + +public class VCssLayoutPaintable extends VAbstractPaintableWidgetContainer { + + private LayoutClickEventHandler clickEventHandler = new LayoutClickEventHandler( + this, EventId.LAYOUT_CLICK) { + + @Override + protected VPaintableWidget getChildComponent(Element element) { + return getWidgetForPaintable().panel.getComponent(element); + } + + @Override + protected HandlerRegistration registerHandler( + H handler, Type type) { + return getWidgetForPaintable().addDomHandler(handler, type); + } + }; + + public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { + getWidgetForPaintable().rendering = true; + + if (client.updateComponent(this, uidl, true)) { + getWidgetForPaintable().rendering = false; + return; + } + clickEventHandler.handleEventHandlerRegistration(client); + + getWidgetForPaintable().setMarginAndSpacingStyles( + new VMarginInfo(uidl.getIntAttribute("margins")), + uidl.hasAttribute("spacing")); + getWidgetForPaintable().panel.updateFromUIDL(uidl, client); + getWidgetForPaintable().rendering = false; + } + + @Override + public VCssLayout getWidgetForPaintable() { + return (VCssLayout) super.getWidgetForPaintable(); + } + + @Override + protected Widget createWidget() { + return GWT.create(VCssLayout.class); + } + + public void updateCaption(VPaintableWidget component, UIDL uidl) { + getWidgetForPaintable().panel.updateCaption(component, uidl); + } + +} diff --git a/src/com/vaadin/ui/CssLayout.java b/src/com/vaadin/ui/CssLayout.java index b9432df6b6..ebfee5a787 100644 --- a/src/com/vaadin/ui/CssLayout.java +++ b/src/com/vaadin/ui/CssLayout.java @@ -14,7 +14,7 @@ import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; import com.vaadin.terminal.Paintable; import com.vaadin.terminal.gwt.client.EventId; -import com.vaadin.terminal.gwt.client.ui.VCssLayout; +import com.vaadin.terminal.gwt.client.ui.VCssLayoutPaintable; /** * CssLayout is a layout component that can be used in browser environment only. @@ -57,7 +57,7 @@ import com.vaadin.terminal.gwt.client.ui.VCssLayout; * @since 6.1 brought in from "FastLayouts" incubator project * */ -@ClientWidget(VCssLayout.class) +@ClientWidget(VCssLayoutPaintable.class) public class CssLayout extends AbstractLayout implements LayoutClickNotifier { private static final String CLICK_EVENT = EventId.LAYOUT_CLICK; -- 2.39.5