diff options
author | Matti Tahvonen <matti.tahvonen@itmill.com> | 2009-02-04 08:04:05 +0000 |
---|---|---|
committer | Matti Tahvonen <matti.tahvonen@itmill.com> | 2009-02-04 08:04:05 +0000 |
commit | cdf8e09a836fa8c0c54a10899df92689f530cd2d (patch) | |
tree | a95f264e75561cab6301b082464c71306325b9a3 | |
parent | cf1d692c63920b69be0acf81bf932034741b631f (diff) | |
download | vaadin-framework-cdf8e09a836fa8c0c54a10899df92689f530cd2d.tar.gz vaadin-framework-cdf8e09a836fa8c0c54a10899df92689f530cd2d.zip |
fixes #2514 and some cleaning in IOrderedLayout
svn changeset:6720/svn branch:trunk
-rw-r--r-- | src/com/itmill/toolkit/terminal/gwt/client/ui/IGridLayout.java | 15 | ||||
-rw-r--r-- | src/com/itmill/toolkit/terminal/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<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); } 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<ChildComponentContainer> relativeSizeComponents = new ArrayList<ChildComponentContainer>();
ArrayList<UIDL> relativeSizeComponentUIDL = new ArrayList<UIDL>();
- ArrayList<Widget> relativeSizeWidgets = new ArrayList<Widget>();
int pos = 0;
for (final Iterator<UIDL> 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) {
|