]> source.dussan.org Git - vaadin-framework.git/commitdiff
IOrderedLayout implementation is now feature complete and thus horizontal and vertica...
authorJoonas Lehtinen <joonas.lehtinen@itmill.com>
Thu, 3 Jul 2008 22:22:54 +0000 (22:22 +0000)
committerJoonas Lehtinen <joonas.lehtinen@itmill.com>
Thu, 3 Jul 2008 22:22:54 +0000 (22:22 +0000)
svn changeset:5047/svn branch:trunk

src/com/itmill/toolkit/terminal/gwt/client/DefaultWidgetSet.java
src/com/itmill/toolkit/terminal/gwt/client/ui/IOrderedLayout.java
src/com/itmill/toolkit/terminal/gwt/client/ui/IOrderedLayoutHorizontal.java
src/com/itmill/toolkit/terminal/gwt/client/ui/IOrderedLayoutVertical.java

index 7982afda4472b62c4d696b65cd5ceaf96f4e0d63..b98cdec668da53655838acbd077f278c4299c0c1 100644 (file)
@@ -28,8 +28,7 @@ import com.itmill.toolkit.terminal.gwt.client.ui.IListSelect;
 import com.itmill.toolkit.terminal.gwt.client.ui.IMenuBar;
 import com.itmill.toolkit.terminal.gwt.client.ui.INativeSelect;
 import com.itmill.toolkit.terminal.gwt.client.ui.IOptionGroup;
-import com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutHorizontal;
-import com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutVertical;
+import com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayout;
 import com.itmill.toolkit.terminal.gwt.client.ui.IPanel;
 import com.itmill.toolkit.terminal.gwt.client.ui.IPasswordField;
 import com.itmill.toolkit.terminal.gwt.client.ui.IPopupCalendar;
@@ -79,12 +78,9 @@ public class DefaultWidgetSet implements WidgetSet {
         } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IWindow"
                 .equals(className)) {
             return new IWindow();
-        } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutVertical"
+        } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayout"
                 .equals(className)) {
-            return new IOrderedLayoutVertical();
-        } else if ("com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutHorizontal"
-                .equals(className)) {
-            return new IOrderedLayoutHorizontal();
+            return new IOrderedLayout();
         } else if ("com.itmill.toolkit.terminal.gwt.client.ui.ILabel"
                 .equals(className)) {
             return new ILabel();
@@ -212,11 +208,7 @@ public class DefaultWidgetSet implements WidgetSet {
         } else if ("window".equals(tag)) {
             return "com.itmill.toolkit.terminal.gwt.client.ui.IWindow";
         } else if ("orderedlayout".equals(tag)) {
-            if ("horizontal".equals(uidl.getStringAttribute("orientation"))) {
-                return "com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutHorizontal";
-            } else {
-                return "com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutVertical";
-            }
+            return "com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayout";
         } else if ("label".equals(tag)) {
             return "com.itmill.toolkit.terminal.gwt.client.ui.ILabel";
         } else if ("link".equals(tag)) {
index 52e52bf0099e42c305b3b63eff8bcd2acf1868ff..c38014d3463be2c2ec8612eca1c7df26b0110a02 100644 (file)
@@ -16,9 +16,11 @@ import com.itmill.toolkit.terminal.gwt.client.ApplicationConnection;
 import com.itmill.toolkit.terminal.gwt.client.BrowserInfo;
 import com.itmill.toolkit.terminal.gwt.client.Caption;
 import com.itmill.toolkit.terminal.gwt.client.Container;
+import com.itmill.toolkit.terminal.gwt.client.ContainerResizedListener;
 import com.itmill.toolkit.terminal.gwt.client.Paintable;
 import com.itmill.toolkit.terminal.gwt.client.StyleConstants;
 import com.itmill.toolkit.terminal.gwt.client.UIDL;
+import com.itmill.toolkit.terminal.gwt.client.Util;
 
 /**
  * Abstract base class for ordered layouts. Use either vertical or horizontal
@@ -26,7 +28,8 @@ import com.itmill.toolkit.terminal.gwt.client.UIDL;
  * 
  * @author IT Mill Ltd
  */
-public abstract class IOrderedLayout extends Panel implements Container {
+public class IOrderedLayout extends Panel implements Container,
+        ContainerResizedListener {
 
     public static final String CLASSNAME = "i-orderedlayout";
 
@@ -50,7 +53,7 @@ public abstract class IOrderedLayout extends Panel implements Container {
      * Elements that provides the Layout interface implementation. Root element
      * of the component. In vertical mode this is the outmost div.
      */
-    private Element root;
+    private final Element root;
 
     /**
      * Margin element of the component. In vertical mode, this is div inside
@@ -85,13 +88,6 @@ public abstract class IOrderedLayout extends Panel implements Container {
     /** Information about margin states. */
     private MarginInfo margins = new MarginInfo(0);
 
-    /** Construct a nre IOrderedLayout in given orientation mode. */
-    public IOrderedLayout(int orientation) {
-        orientationMode = orientation;
-        constructDOM();
-        setStyleName(CLASSNAME);
-    }
-
     /**
      * Construct the DOM of the orderder layout.
      * 
@@ -108,10 +104,18 @@ public abstract class IOrderedLayout extends Panel implements Container {
      * </p>
      * 
      */
-    private void constructDOM() {
+    public IOrderedLayout() {
+
         root = DOM.createDiv();
         margin = DOM.createDiv();
         DOM.appendChild(root, margin);
+        DOM.setStyleAttribute(margin, "overflow", "hidden");
+        createAndEmptyWrappedChildContainer();
+        setElement(root);
+        setStyleName(CLASSNAME);
+    }
+
+    private void createAndEmptyWrappedChildContainer() {
         if (orientationMode == ORIENTATION_HORIZONTAL) {
             final String structure = "<table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr></tr></tbody></table>";
             DOM.setInnerHTML(margin, structure);
@@ -119,8 +123,29 @@ public abstract class IOrderedLayout extends Panel implements Container {
                     .getFirstChild(margin)));
         } else {
             wrappedChildContainer = margin;
+            DOM.setInnerHTML(margin, "");
         }
-        setElement(root);
+    }
+
+    /** Update orientation, if it has changed */
+    private void updateOrientation(int newOrientationMode) {
+
+        // Only change when needed
+        if (orientationMode == newOrientationMode) {
+            return;
+        }
+
+        orientationMode = newOrientationMode;
+
+        createAndEmptyWrappedChildContainer();
+
+        // Reinsert all widget wrappers to this container
+        for (int i = 0; i < childWidgetWrappers.size(); i++) {
+            DOM.appendChild(wrappedChildContainer,
+                    ((WidgetWrapper) childWidgetWrappers.get(i)).getElement());
+        }
+
+        Util.runDescendentsLayout(this);
     }
 
     /** Update the contents of the layout from UIDL. */
@@ -128,6 +153,10 @@ public abstract class IOrderedLayout extends Panel implements Container {
 
         this.client = client;
 
+        updateOrientation("horizontal".equals(uidl
+                .getStringAttribute("orientation")) ? ORIENTATION_HORIZONTAL
+                : ORIENTATION_VERTICAL);
+
         // Ensure correct implementation
         if (client.updateComponent(this, uidl, false)) {
             return;
@@ -229,33 +258,35 @@ public abstract class IOrderedLayout extends Panel implements Container {
 
     public void setWidth(String width) {
         super.setWidth(width);
-        if (ORIENTATION_VERTICAL == orientationMode) {
-            return;
-        }
-        if (width == null || "".equals(width)) {
 
-            // Removing fixed size is needed only when it is in use
-            if (fixedCellSize) {
+        if (width == null || "".equals(width)) {
+            DOM.setStyleAttribute(margin, "width", "");
+            if (fixedCellSize && orientationMode == ORIENTATION_HORIZONTAL) {
                 removeFixedSizes();
             }
         } else {
-            fixedCellSize = true;
+            DOM.setStyleAttribute(margin, "width", "100%");
+            if (orientationMode == ORIENTATION_HORIZONTAL) {
+                fixedCellSize = true;
+            }
         }
     }
 
     public void setHeight(String height) {
         super.setHeight(height);
-        if (ORIENTATION_HORIZONTAL == orientationMode) {
-            return;
-        }
+
         if (height == null || "".equals(height)) {
+            DOM.setStyleAttribute(margin, "height", "");
 
             // Removing fixed size is needed only when it is in use
-            if (fixedCellSize) {
+            if (fixedCellSize && orientationMode == ORIENTATION_VERTICAL) {
                 removeFixedSizes();
             }
         } else {
-            fixedCellSize = true;
+            DOM.setStyleAttribute(margin, "height", "100%");
+            if (orientationMode == ORIENTATION_VERTICAL) {
+                fixedCellSize = true;
+            }
         }
     }
 
@@ -276,13 +307,10 @@ public abstract class IOrderedLayout extends Panel implements Container {
         for (Iterator i = childWidgetWrappers.iterator(); i.hasNext();) {
             Element we = ((WidgetWrapper) i.next()).getElement();
             DOM.setStyleAttribute(we, wh, "");
-            DOM.setStyleAttribute(we, overflow, "");
+            DOM.setStyleAttribute(we, "overflow", "");
         }
 
         // margin
-        DOM.setStyleAttribute(margin,
-                (orientationMode == ORIENTATION_HORIZONTAL) ? "overflowX"
-                        : "overflowY", "");
         DOM.setStyleAttribute(margin,
                 (orientationMode == ORIENTATION_HORIZONTAL) ? "width"
                         : "height", "");
@@ -307,9 +335,6 @@ public abstract class IOrderedLayout extends Panel implements Container {
             return;
         }
 
-        DOM.setStyleAttribute(margin,
-                (orientationMode == ORIENTATION_HORIZONTAL) ? "overflowX"
-                        : "overflowY", "hidden");
         DOM.setStyleAttribute(margin,
                 (orientationMode == ORIENTATION_HORIZONTAL) ? "width"
                         : "height", "100%");
@@ -352,11 +377,13 @@ public abstract class IOrderedLayout extends Panel implements Container {
             size -= ws;
             DOM.setStyleAttribute(we, wh, "" + ws + "px");
             if (firstTime) {
-                DOM.setStyleAttribute(we, overflow, "hidden");
+                DOM.setStyleAttribute(we, "overflow", "hidden");
             }
         }
 
         fixedCellSize = true;
+
+        Util.runDescendentsLayout(this);
     }
 
     protected void handleMargins(UIDL uidl) {
@@ -735,4 +762,9 @@ public abstract class IOrderedLayout extends Panel implements Container {
         return childWidgets.iterator();
     }
 
+    /* documented at super */
+    public void iLayout() {
+        updateFixedSizes();
+        Util.runDescendentsLayout(this);
+    }
 }
index 105103e9012fa98bc02695985e8a3646cda40f5d..323cced03bfaa1cde583c080f3b1df14706909b8 100644 (file)
@@ -4,78 +4,45 @@
 \r
 package com.itmill.toolkit.terminal.gwt.client.ui;\r
 \r
-import com.google.gwt.user.client.DOM;\r
 import com.itmill.toolkit.terminal.gwt.client.ContainerResizedListener;\r
-import com.itmill.toolkit.terminal.gwt.client.UIDL;\r
-import com.itmill.toolkit.terminal.gwt.client.Util;\r
 \r
 public class IOrderedLayoutHorizontal extends IOrderedLayout implements\r
         ContainerResizedListener {\r
-\r
-    private String height;\r
-    private boolean relativeHeight;\r
-    private int marginHeight = 0;\r
-\r
-    public IOrderedLayoutHorizontal() {\r
-        super(ORIENTATION_HORIZONTAL);\r
-    }\r
-\r
-    public void setHeight(String newHeight) {\r
-        super.setHeight(newHeight);\r
-        if (newHeight != null && !newHeight.equals("")) {\r
-            if (!newHeight.equals(height)) {\r
-                height = newHeight;\r
-                if (newHeight.indexOf("%") > 0) {\r
-                    relativeHeight = true;\r
-                    DOM.setStyleAttribute(getElement(), "overflow", "hidden");\r
-                } else {\r
-                    relativeHeight = false;\r
-                    DOM.setStyleAttribute(getElement(), "overflow", "");\r
-                }\r
-                setInternalHeight();\r
-            }\r
-        } else {\r
-            if (newHeight != null) {\r
-                // clear existing height values\r
-                DOM.setStyleAttribute(getElement(), "overflow", "");\r
-                DOM.setStyleAttribute(DOM.getFirstChild(margin), "height", "");\r
-\r
-                newHeight = null;\r
-                relativeHeight = false;\r
-            }\r
-        }\r
-    }\r
-\r
-    protected void handleMargins(UIDL uidl) {\r
-        super.handleMargins(uidl);\r
-        if (height != null) {\r
-            marginHeight = -1;\r
-            setInternalHeight();\r
-        }\r
-    }\r
-\r
-    private void setInternalHeight() {\r
-        int availSpace = DOM\r
-                .getElementPropertyInt(getElement(), "clientHeight");\r
-        if (marginHeight < 0) {\r
-            DOM.setStyleAttribute(margin, "height", height);\r
-            int tmp = DOM.getElementPropertyInt(margin, "offsetHeight");\r
-            marginHeight = tmp\r
-                    - DOM.getElementPropertyInt(getElement(), "clientHeight");\r
-            DOM.setStyleAttribute(margin, "height", "");\r
-        }\r
-\r
-        availSpace -= marginHeight;\r
-\r
-        DOM.setStyleAttribute(DOM.getFirstChild(margin), "height", availSpace\r
-                + "px");\r
-\r
-    }\r
-\r
-    public void iLayout() {\r
-        if (relativeHeight) {\r
-            setInternalHeight();\r
-        }\r
-        Util.runDescendentsLayout(this);\r
-    }\r
+    /*\r
+     * private String height; private boolean relativeHeight; private final int\r
+     * marginHeight = 0;\r
+     * \r
+     * public IOrderedLayoutHorizontal() { super(ORIENTATION_HORIZONTAL); }\r
+     */\r
+    /*\r
+     * public void setHeight(String newHeight) { super.setHeight(newHeight); if\r
+     * (newHeight != null && !newHeight.equals("")) { if\r
+     * (!newHeight.equals(height)) { height = newHeight; if\r
+     * (newHeight.indexOf("%") > 0) { relativeHeight = true;\r
+     * DOM.setStyleAttribute(getElement(), "overflow", "hidden"); } else {\r
+     * relativeHeight = false; DOM.setStyleAttribute(getElement(), "overflow",\r
+     * ""); } setInternalHeight(); } } else { if (newHeight != null) { // clear\r
+     * existing height values DOM.setStyleAttribute(getElement(), "overflow",\r
+     * ""); DOM.setStyleAttribute(DOM.getFirstChild(margin), "height", "");\r
+     * \r
+     * newHeight = null; relativeHeight = false; } } }\r
+     * \r
+     * protected void handleMargins(UIDL uidl) { super.handleMargins(uidl); if\r
+     * (height != null) { marginHeight = -1; setInternalHeight(); } }\r
+     * \r
+     * private void setInternalHeight() { int availSpace = DOM\r
+     * .getElementPropertyInt(getElement(), "clientHeight"); if (marginHeight <\r
+     * 0) { DOM.setStyleAttribute(margin, "height", height); int tmp =\r
+     * DOM.getElementPropertyInt(margin, "offsetHeight"); marginHeight = tmp -\r
+     * DOM.getElementPropertyInt(getElement(), "clientHeight");\r
+     * DOM.setStyleAttribute(margin, "height", ""); }\r
+     * \r
+     * availSpace -= marginHeight;\r
+     * \r
+     * DOM.setStyleAttribute(DOM.getFirstChild(margin), "height", availSpace +\r
+     * "px"); }\r
+     * \r
+     * public void iLayout() { if (relativeHeight) { setInternalHeight(); }\r
+     * Util.runDescendentsLayout(this); }\r
+     */\r
 }\r
index 1214c8542111cd43cbe000c16ff487ff5dfe8af0..56f827833bf3b680010696fab7b050f64e84de5a 100644 (file)
@@ -5,8 +5,7 @@
 package com.itmill.toolkit.terminal.gwt.client.ui;\r
 \r
 public class IOrderedLayoutVertical extends IOrderedLayout {\r
-\r
-    public IOrderedLayoutVertical() {\r
-        super(ORIENTATION_VERTICAL);\r
-    }\r
+    /*\r
+     * public IOrderedLayoutVertical() { super(ORIENTATION_VERTICAL); }\r
+     */\r
 }\r