]> source.dussan.org Git - vaadin-framework.git/commitdiff
Split CssLayout into widget + paintable
authorArtur Signell <artur@vaadin.com>
Tue, 31 Jan 2012 07:57:33 +0000 (09:57 +0200)
committerArtur Signell <artur@vaadin.com>
Tue, 31 Jan 2012 08:00:11 +0000 (10:00 +0200)
src/com/vaadin/terminal/gwt/client/ui/VCssLayout.java
src/com/vaadin/terminal/gwt/client/ui/VCssLayoutPaintable.java [new file with mode: 0644]
src/com/vaadin/ui/CssLayout.java

index ffd7fc49b2bbbfbd86c259d608d3661ea4c407d2..8a13beceefbc0aa58f14c91ee414a8da274e82f7 100644 (file)
@@ -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 <H extends EventHandler> HandlerRegistration registerHandler(
-                H handler, Type<H> 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<Widget, VCaption> widgetToCaption = new HashMap<Widget, VCaption>();
@@ -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 (file)
index 0000000..d8640e3
--- /dev/null
@@ -0,0 +1,61 @@
+package com.vaadin.terminal.gwt.client.ui;\r
+\r
+import com.google.gwt.core.client.GWT;\r
+import com.google.gwt.event.dom.client.DomEvent.Type;\r
+import com.google.gwt.event.shared.EventHandler;\r
+import com.google.gwt.event.shared.HandlerRegistration;\r
+import com.google.gwt.user.client.Element;\r
+import com.google.gwt.user.client.ui.Widget;\r
+import com.vaadin.terminal.gwt.client.ApplicationConnection;\r
+import com.vaadin.terminal.gwt.client.EventId;\r
+import com.vaadin.terminal.gwt.client.UIDL;\r
+import com.vaadin.terminal.gwt.client.VPaintableWidget;\r
+\r
+public class VCssLayoutPaintable extends VAbstractPaintableWidgetContainer {\r
+\r
+    private LayoutClickEventHandler clickEventHandler = new LayoutClickEventHandler(\r
+            this, EventId.LAYOUT_CLICK) {\r
+\r
+        @Override\r
+        protected VPaintableWidget getChildComponent(Element element) {\r
+            return getWidgetForPaintable().panel.getComponent(element);\r
+        }\r
+\r
+        @Override\r
+        protected <H extends EventHandler> HandlerRegistration registerHandler(\r
+                H handler, Type<H> type) {\r
+            return getWidgetForPaintable().addDomHandler(handler, type);\r
+        }\r
+    };\r
+\r
+    public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {\r
+        getWidgetForPaintable().rendering = true;\r
+\r
+        if (client.updateComponent(this, uidl, true)) {\r
+            getWidgetForPaintable().rendering = false;\r
+            return;\r
+        }\r
+        clickEventHandler.handleEventHandlerRegistration(client);\r
+\r
+        getWidgetForPaintable().setMarginAndSpacingStyles(\r
+                new VMarginInfo(uidl.getIntAttribute("margins")),\r
+                uidl.hasAttribute("spacing"));\r
+        getWidgetForPaintable().panel.updateFromUIDL(uidl, client);\r
+        getWidgetForPaintable().rendering = false;\r
+    }\r
+\r
+    @Override\r
+    public VCssLayout getWidgetForPaintable() {\r
+        return (VCssLayout) super.getWidgetForPaintable();\r
+    }\r
+\r
+    @Override\r
+    protected Widget createWidget() {\r
+        return GWT.create(VCssLayout.class);\r
+    }\r
+\r
+    public void updateCaption(VPaintableWidget component, UIDL uidl) {\r
+        getWidgetForPaintable().panel.updateCaption(component, uidl);\r
+    }\r
+\r
+}\r
index b9432df6b60b5f9d7dcea7224ea4563b00555cae..ebfee5a78791168a00c2c320900e1687468dbc0e 100644 (file)
@@ -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;