]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fix for #2240 OrderedLayout size updates
authorArtur Signell <artur.signell@itmill.com>
Fri, 28 Nov 2008 09:47:08 +0000 (09:47 +0000)
committerArtur Signell <artur.signell@itmill.com>
Fri, 28 Nov 2008 09:47:08 +0000 (09:47 +0000)
svn changeset:6035/svn branch:trunk

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

index 91dc7253f55d13ea4bd19427e660403e5ab337ce..ed3b1711eed3c92354d2e7ca62fd6c61ac03511a 100644 (file)
@@ -123,14 +123,7 @@ public class IOrderedLayout extends CellBasedLayout {
         // w.mark("Alignments and expand ratios updated");\r
 \r
         /* Fetch widget sizes from rendered components */\r
-        for (ChildComponentContainer childComponentContainer : widgetToComponentContainer\r
-                .values()) {\r
-\r
-            /*\r
-             * Update widget size from DOM\r
-             */\r
-            childComponentContainer.updateWidgetSize();\r
-        }\r
+        updateWidgetSizes();\r
         // w.mark("Widget sizes updated");\r
 \r
         recalculateLayout();\r
@@ -209,6 +202,17 @@ public class IOrderedLayout extends CellBasedLayout {
         isRendering = false;\r
     }\r
 \r
+    private void updateWidgetSizes() {\r
+        for (ChildComponentContainer childComponentContainer : widgetToComponentContainer\r
+                .values()) {\r
+\r
+            /*\r
+             * Update widget size from DOM\r
+             */\r
+            childComponentContainer.updateWidgetSize();\r
+        }\r
+    }\r
+\r
     private void recalculateLayout() {\r
 \r
         /* Calculate space for relative size components */\r
@@ -646,6 +650,33 @@ public class IOrderedLayout extends CellBasedLayout {
     private void recalculateLayoutAndComponentSizes() {\r
         recalculateLayout();\r
 \r
+        if (isDynamicHeight()) {\r
+            /*\r
+             * Height is not necessarily correct anymore as the height of\r
+             * components might have changed if the width has changed.\r
+             */\r
+\r
+            /* First update relative sized components */\r
+            for (ChildComponentContainer componentContainer : widgetToComponentContainer\r
+                    .values()) {\r
+                if (componentContainer\r
+                        .isComponentRelativeSized(ORIENTATION_HORIZONTAL)) {\r
+                    client.handleComponentRelativeSize(componentContainer\r
+                            .getWidget());\r
+                }\r
+            }\r
+\r
+            /*\r
+             * Get the new widget sizes from DOM and calculate new container\r
+             * sizes\r
+             */\r
+            updateWidgetSizes();\r
+            calculateContainerSize();\r
+\r
+            /* Finally calculate new layout height */\r
+            calculateLayoutDimensions();\r
+        }\r
+\r
         recalculateComponentSizesAndAlignments();\r
 \r
         setRootSize();\r