aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatti Tahvonen <matti.tahvonen@itmill.com>2009-02-04 08:04:05 +0000
committerMatti Tahvonen <matti.tahvonen@itmill.com>2009-02-04 08:04:05 +0000
commitcdf8e09a836fa8c0c54a10899df92689f530cd2d (patch)
treea95f264e75561cab6301b082464c71306325b9a3
parentcf1d692c63920b69be0acf81bf932034741b631f (diff)
downloadvaadin-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.java15
-rw-r--r--src/com/itmill/toolkit/terminal/gwt/client/ui/IOrderedLayout.java30
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) {