]> source.dussan.org Git - vaadin-framework.git/commitdiff
fixes #2514 and some cleaning in IOrderedLayout
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Wed, 4 Feb 2009 08:04:05 +0000 (08:04 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Wed, 4 Feb 2009 08:04:05 +0000 (08:04 +0000)
svn changeset:6720/svn branch:trunk

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

index 55442e1428dc113a427aec9ecf25a1733832e9a6..e7f56c0b9b7bde6451fcd2515d90d6e6318429d4 100644 (file)
@@ -64,6 +64,8 @@ public class IGridLayout extends SimplePanel implements Paintable, Container {
 
     private HashMap<Widget, ChildComponentContainer> nonRenderedWidgets;
 
+    private boolean sizeChangedDuringRendering = false;
+
     public IGridLayout() {
         super();
         getElement().appendChild(margin);
@@ -194,6 +196,8 @@ public class IGridLayout extends SimplePanel implements Paintable, Container {
         nonRenderedWidgets = null;
 
         rendering = false;
+        sizeChangedDuringRendering = false;
+
         boolean needsRelativeSizeCheck = false;
 
         if (mightToggleHScrollBar && wBeforeRender != canvas.getOffsetWidth()) {
@@ -246,7 +250,9 @@ public class IGridLayout extends SimplePanel implements Paintable, Container {
         super.setHeight(height);
         if (!height.equals(this.height)) {
             this.height = height;
-            if (!rendering) {
+            if (rendering) {
+                sizeChangedDuringRendering = true;
+            } else {
                 expandRows();
                 layoutCells();
                 for (Paintable c : paintableToCell.keySet()) {
@@ -261,7 +267,9 @@ public class IGridLayout extends SimplePanel implements Paintable, Container {
         super.setWidth(width);
         if (!width.equals(this.width)) {
             this.width = width;
-            if (!rendering) {
+            if (rendering) {
+                sizeChangedDuringRendering = true;
+            } else {
                 int[] oldWidths = cloneArray(columnWidths);
                 expandColumns();
                 boolean heightChanged = false;
@@ -912,6 +920,9 @@ public class IGridLayout extends SimplePanel implements Paintable, Container {
                 }
             }
             cc.renderChild(childUidl, client, -1);
+            if (sizeChangedDuringRendering && Util.isCached(childUidl)) {
+                client.handleComponentRelativeSize(cc.getWidget());
+            }
             cc.updateWidgetSize();
             nonRenderedWidgets.remove(paintable);
         }
index c7ad11f7f88bf026e85b6960da5973eb6dda86a6..fae87ccd88188d218b7145228d319ecaec07aea2 100644 (file)
@@ -34,6 +34,8 @@ public class IOrderedLayout extends CellBasedLayout {
 \r
     private String width = "";\r
 \r
+    private boolean sizeHasChangedDuringRendering = false;\r
+\r
     public IOrderedLayout() {\r
         this(CLASSNAME, ORIENTATION_VERTICAL);\r
         allowOrientationUpdate = true;\r
@@ -73,7 +75,6 @@ public class IOrderedLayout extends CellBasedLayout {
                 .getChildCount());\r
         ArrayList<ChildComponentContainer> relativeSizeComponents = new ArrayList<ChildComponentContainer>();\r
         ArrayList<UIDL> relativeSizeComponentUIDL = new ArrayList<UIDL>();\r
-        ArrayList<Widget> relativeSizeWidgets = new ArrayList<Widget>();\r
 \r
         int pos = 0;\r
         for (final Iterator<UIDL> it = uidl.getChildIterator(); it.hasNext();) {\r
@@ -104,7 +105,6 @@ public class IOrderedLayout extends CellBasedLayout {
             if (childComponentContainer.isComponentRelativeSized(orientation)) {\r
                 relativeSizeComponents.add(childComponentContainer);\r
                 relativeSizeComponentUIDL.add(childUIDL);\r
-                relativeSizeWidgets.add(widget);\r
             } else {\r
                 if (isDynamicWidth()) {\r
                     childComponentContainer.renderChild(childUIDL, client, 0);\r
@@ -112,6 +112,12 @@ public class IOrderedLayout extends CellBasedLayout {
                     childComponentContainer.renderChild(childUIDL, client,\r
                             activeLayoutSize.getWidth());\r
                 }\r
+                if (sizeHasChangedDuringRendering && Util.isCached(childUIDL)) {\r
+                    // notify cached relative sized component about size\r
+                    // chance\r
+                    client.handleComponentRelativeSize(childComponentContainer\r
+                            .getWidget());\r
+                }\r
             }\r
 \r
             uidlWidgets.add(widget);\r
@@ -151,7 +157,12 @@ public class IOrderedLayout extends CellBasedLayout {
 \r
             if (isDynamicWidth()) {\r
                 childComponentContainer.renderChild(childUIDL, client, 0);\r
-            } else if (Util.isCached(childUIDL)) {\r
+            } else {\r
+                childComponentContainer.renderChild(childUIDL, client,\r
+                        activeLayoutSize.getWidth());\r
+            }\r
+\r
+            if (Util.isCached(childUIDL)) {\r
                 /*\r
                  * We must update the size of the relative sized component if\r
                  * the expand ratio or something else in the layout changes\r
@@ -159,10 +170,8 @@ public class IOrderedLayout extends CellBasedLayout {
                  */\r
                 client.handleComponentRelativeSize(childComponentContainer\r
                         .getWidget());\r
-            } else {\r
-                childComponentContainer.renderChild(childUIDL, client,\r
-                        activeLayoutSize.getWidth());\r
             }\r
+\r
             // childComponentContainer.updateWidgetSize();\r
         }\r
 \r
@@ -220,6 +229,7 @@ public class IOrderedLayout extends CellBasedLayout {
 \r
         // w.mark("runDescendentsLayout done");\r
         isRendering = false;\r
+        sizeHasChangedDuringRendering = false;\r
     }\r
 \r
     private void updateWidgetSizes() {\r
@@ -771,7 +781,9 @@ public class IOrderedLayout extends CellBasedLayout {
                     - activeMargins.getVertical());\r
         }\r
 \r
-        if (!isRendering) {\r
+        if (isRendering) {\r
+            sizeHasChangedDuringRendering = true;\r
+        } else {\r
             recalculateLayoutAndComponentSizes();\r
             boolean sameSize = (sizeBefore.equals(activeLayoutSize));\r
             if (!sameSize) {\r
@@ -796,7 +808,9 @@ public class IOrderedLayout extends CellBasedLayout {
                     - activeMargins.getHorizontal());\r
         }\r
 \r
-        if (!isRendering) {\r
+        if (isRendering) {\r
+            sizeHasChangedDuringRendering = true;\r
+        } else {\r
             recalculateLayoutAndComponentSizes();\r
             boolean sameSize = (sizeBefore.equals(activeLayoutSize));\r
             if (!sameSize) {\r