From cdf8e09a836fa8c0c54a10899df92689f530cd2d Mon Sep 17 00:00:00 2001 From: Matti Tahvonen Date: Wed, 4 Feb 2009 08:04:05 +0000 Subject: [PATCH] fixes #2514 and some cleaning in IOrderedLayout svn changeset:6720/svn branch:trunk --- .../terminal/gwt/client/ui/IGridLayout.java | 15 ++++++++-- .../gwt/client/ui/IOrderedLayout.java | 30 ++++++++++++++----- 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/IGridLayout.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/IGridLayout.java index 55442e1428..e7f56c0b9b 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/IGridLayout.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IGridLayout.java @@ -64,6 +64,8 @@ public class IGridLayout extends SimplePanel implements Paintable, Container { private HashMap 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); } diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/IOrderedLayout.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/IOrderedLayout.java index c7ad11f7f8..fae87ccd88 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/IOrderedLayout.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IOrderedLayout.java @@ -34,6 +34,8 @@ public class IOrderedLayout extends CellBasedLayout { private String width = ""; + private boolean sizeHasChangedDuringRendering = false; + public IOrderedLayout() { this(CLASSNAME, ORIENTATION_VERTICAL); allowOrientationUpdate = true; @@ -73,7 +75,6 @@ public class IOrderedLayout extends CellBasedLayout { .getChildCount()); ArrayList relativeSizeComponents = new ArrayList(); ArrayList relativeSizeComponentUIDL = new ArrayList(); - ArrayList relativeSizeWidgets = new ArrayList(); int pos = 0; for (final Iterator it = uidl.getChildIterator(); it.hasNext();) { @@ -104,7 +105,6 @@ public class IOrderedLayout extends CellBasedLayout { if (childComponentContainer.isComponentRelativeSized(orientation)) { relativeSizeComponents.add(childComponentContainer); relativeSizeComponentUIDL.add(childUIDL); - relativeSizeWidgets.add(widget); } else { if (isDynamicWidth()) { childComponentContainer.renderChild(childUIDL, client, 0); @@ -112,6 +112,12 @@ public class IOrderedLayout extends CellBasedLayout { childComponentContainer.renderChild(childUIDL, client, activeLayoutSize.getWidth()); } + if (sizeHasChangedDuringRendering && Util.isCached(childUIDL)) { + // notify cached relative sized component about size + // chance + client.handleComponentRelativeSize(childComponentContainer + .getWidget()); + } } uidlWidgets.add(widget); @@ -151,7 +157,12 @@ public class IOrderedLayout extends CellBasedLayout { if (isDynamicWidth()) { childComponentContainer.renderChild(childUIDL, client, 0); - } else if (Util.isCached(childUIDL)) { + } else { + childComponentContainer.renderChild(childUIDL, client, + activeLayoutSize.getWidth()); + } + + if (Util.isCached(childUIDL)) { /* * We must update the size of the relative sized component if * the expand ratio or something else in the layout changes @@ -159,10 +170,8 @@ public class IOrderedLayout extends CellBasedLayout { */ client.handleComponentRelativeSize(childComponentContainer .getWidget()); - } else { - childComponentContainer.renderChild(childUIDL, client, - activeLayoutSize.getWidth()); } + // childComponentContainer.updateWidgetSize(); } @@ -220,6 +229,7 @@ public class IOrderedLayout extends CellBasedLayout { // w.mark("runDescendentsLayout done"); isRendering = false; + sizeHasChangedDuringRendering = false; } private void updateWidgetSizes() { @@ -771,7 +781,9 @@ public class IOrderedLayout extends CellBasedLayout { - activeMargins.getVertical()); } - if (!isRendering) { + if (isRendering) { + sizeHasChangedDuringRendering = true; + } else { recalculateLayoutAndComponentSizes(); boolean sameSize = (sizeBefore.equals(activeLayoutSize)); if (!sameSize) { @@ -796,7 +808,9 @@ public class IOrderedLayout extends CellBasedLayout { - activeMargins.getHorizontal()); } - if (!isRendering) { + if (isRendering) { + sizeHasChangedDuringRendering = true; + } else { recalculateLayoutAndComponentSizes(); boolean sameSize = (sizeBefore.equals(activeLayoutSize)); if (!sameSize) { -- 2.39.5