]> source.dussan.org Git - vaadin-framework.git/commitdiff
fixes #1729, implemented height handling to IOrderedLayoutHorizontal and using it...
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Mon, 16 Jun 2008 13:49:46 +0000 (13:49 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Mon, 16 Jun 2008 13:49:46 +0000 (13:49 +0000)
svn changeset:4900/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

index 9c4b4aff5df124d7d588d566a5a6b934128032e9..d43c26d6b1877586dbc88d1c8af364432227e5a2 100644 (file)
@@ -212,13 +212,18 @@ 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 (uidl.hasAttribute("height")) {
-                return "com.itmill.toolkit.terminal.gwt.client.ui.absolutegrid.ISizeableOrderedLayout";
-            } else if ("horizontal".equals(uidl
-                    .getStringAttribute("orientation"))) {
-                return "com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutHorizontal";
+            if ("horizontal".equals(uidl.getStringAttribute("orientation"))) {
+                if (uidl.hasAttribute("height") && uidl.hasAttribute("width")) {
+                    return "com.itmill.toolkit.terminal.gwt.client.ui.absolutegrid.ISizeableOrderedLayout";
+                } else {
+                    return "com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutHorizontal";
+                }
             } else {
-                return "com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutVertical";
+                if (uidl.hasAttribute("height")) {
+                    return "com.itmill.toolkit.terminal.gwt.client.ui.absolutegrid.ISizeableOrderedLayout";
+                } else {
+                    return "com.itmill.toolkit.terminal.gwt.client.ui.IOrderedLayoutVertical";
+                }
             }
         } else if ("label".equals(tag)) {
             return "com.itmill.toolkit.terminal.gwt.client.ui.ILabel";
index 851e6c56288a65d4b7329462c89ca418847be59d..6720574bbcb6880bb35aec4788bc7a13d34f0ec3 100644 (file)
@@ -54,6 +54,8 @@ public abstract class IOrderedLayout extends ComplexPanel implements Container {
 
     private boolean hasComponentSpacing;
 
+    private MarginInfo margins = new MarginInfo(0);
+
     public IOrderedLayout(int orientation) {
         orientationMode = orientation;
         constructDOM();
@@ -85,7 +87,9 @@ public abstract class IOrderedLayout extends ComplexPanel implements Container {
         }
 
         // Handle layout margins
-        handleMargins(uidl);
+        if (margins.getBitMask() != uidl.getIntAttribute("margins")) {
+            handleMargins(uidl);
+        }
 
         //
         hasComponentSpacing = uidl.getBooleanAttribute("spacing");
@@ -148,7 +152,11 @@ public abstract class IOrderedLayout extends ComplexPanel implements Container {
                 this.insert(child, index);
             } else {
                 // insert new child before old one
-                final int index = getPaintableIndex(oldChild); // TODO this returns wrong value if captions are used
+                final int index = getPaintableIndex(oldChild); // TODO this
+                // returns wrong
+                // value if
+                // captions are
+                // used
                 insert(child, index);
             }
             ((Paintable) child).updateFromUIDL(childUidl, client);
@@ -307,7 +315,7 @@ public abstract class IOrderedLayout extends ComplexPanel implements Container {
 
     public int getPaintableCount() {
         int size = 0;
-        for(Iterator it = getChildren().iterator(); it.hasNext();) {
+        for (Iterator it = getChildren().iterator(); it.hasNext();) {
             Widget w = (Widget) it.next();
             if (!(w instanceof Caption)) {
                 size++;
@@ -318,7 +326,7 @@ public abstract class IOrderedLayout extends ComplexPanel implements Container {
 
     public int getPaintableIndex(Widget child) {
         int i = 0;
-        for(Iterator it = getChildren().iterator(); it.hasNext();) {
+        for (Iterator it = getChildren().iterator(); it.hasNext();) {
             Widget w = (Widget) it.next();
             if (w == child) {
                 return i;
@@ -330,8 +338,7 @@ public abstract class IOrderedLayout extends ComplexPanel implements Container {
     }
 
     protected void handleMargins(UIDL uidl) {
-        final MarginInfo margins = new MarginInfo(uidl
-                .getIntAttribute("margins"));
+        margins = new MarginInfo(uidl.getIntAttribute("margins"));
         setStyleName(margin, CLASSNAME + "-" + StyleConstants.MARGIN_TOP,
                 margins.hasTop());
         setStyleName(margin, CLASSNAME + "-" + StyleConstants.MARGIN_RIGHT,
index 340b001f2013e89f2a06a575b9602c837e4f07c5..105103e9012fa98bc02695985e8a3646cda40f5d 100644 (file)
@@ -4,9 +4,78 @@
 \r
 package com.itmill.toolkit.terminal.gwt.client.ui;\r
 \r
-public class IOrderedLayoutHorizontal extends IOrderedLayout {\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