summaryrefslogtreecommitdiffstats
path: root/src/com/itmill/toolkit
diff options
context:
space:
mode:
authorMatti Tahvonen <matti.tahvonen@itmill.com>2007-11-30 07:18:18 +0000
committerMatti Tahvonen <matti.tahvonen@itmill.com>2007-11-30 07:18:18 +0000
commit49bd9c0cdb9685359783d704b791bc0a69351d83 (patch)
treea3651de166cc5583ebdcdf582023b45f84d38ec7 /src/com/itmill/toolkit
parent31b992b6450b0e566a4dc40736a544e512f009c8 (diff)
downloadvaadin-framework-49bd9c0cdb9685359783d704b791bc0a69351d83.tar.gz
vaadin-framework-49bd9c0cdb9685359783d704b791bc0a69351d83.zip
refactored rendering algorithm for IGridLayout
svn changeset:3052/svn branch:trunk
Diffstat (limited to 'src/com/itmill/toolkit')
-rw-r--r--src/com/itmill/toolkit/terminal/gwt/client/ui/IGridLayout.java50
1 files changed, 24 insertions, 26 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 441c44d045..a8170ead78 100644
--- a/src/com/itmill/toolkit/terminal/gwt/client/ui/IGridLayout.java
+++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IGridLayout.java
@@ -35,7 +35,11 @@ public class IGridLayout extends FlexTable implements Paintable, Container {
}
int row = 0, column = 0;
- ArrayList detachdedPaintables = new ArrayList();
+ ArrayList oldWidgetWrappers = new ArrayList();
+ for (Iterator iterator = iterator(); iterator.hasNext();) {
+ oldWidgetWrappers.add(iterator.next());
+ }
+ clear();
for (Iterator i = uidl.getChildIterator(); i.hasNext();) {
UIDL r = (UIDL) i.next();
@@ -44,6 +48,8 @@ public class IGridLayout extends FlexTable implements Paintable, Container {
for (Iterator j = r.getChildIterator(); j.hasNext();) {
UIDL c = (UIDL) j.next();
if ("gc".equals(c.getTag())) {
+ prepareCell(row, column);
+
// Set cell width
int w;
if (c.hasAttribute("w")) {
@@ -67,25 +73,19 @@ public class IGridLayout extends FlexTable implements Paintable, Container {
UIDL u = c.getChildUIDL(0);
if (u != null) {
Widget child = client.getWidget(u);
- prepareCell(row, column);
- Widget oldChild = getWidget(row, column);
- if (oldChild instanceof CaptionWrapper) {
- CaptionWrapper new_name = (CaptionWrapper) oldChild;
- oldChild = (Widget) new_name.getPaintable();
- }
- if (child != oldChild) {
- if (oldChild != null) {
- detachdedPaintables.add(oldChild);
- CaptionWrapper cw = (CaptionWrapper) widgetToCaptionWrapper
- .get(oldChild);
- cw.removeFromParent();
- widgetToCaptionWrapper.remove(oldChild);
- }
- CaptionWrapper wrapper = new CaptionWrapper(
- (Paintable) child, client);
- setWidget(row, column, wrapper);
- widgetToCaptionWrapper.put(child, wrapper);
+ CaptionWrapper wr;
+ if (widgetToCaptionWrapper.containsKey(child)) {
+ wr = (CaptionWrapper) widgetToCaptionWrapper
+ .get(child);
+ oldWidgetWrappers.remove(wr);
+ } else {
+ wr = new CaptionWrapper((Paintable) child,
+ client);
+ widgetToCaptionWrapper.put(child, wr);
}
+
+ setWidget(row, column, wr);
+
if (!u.getBooleanAttribute("cached")) {
((Paintable) child).updateFromUIDL(u, client);
}
@@ -97,13 +97,11 @@ public class IGridLayout extends FlexTable implements Paintable, Container {
}
}
- // for loop detached widgets and unregister them unless they are
- // attached (case of widget which is moved to another cell)
- for (Iterator it = detachdedPaintables.iterator(); it.hasNext();) {
- Widget w = (Widget) it.next();
- if (!w.isAttached()) {
- client.unregisterPaintable((Paintable) w);
- }
+ // loop oldWidgetWrappers that where not re-attached and unregister them
+ for (Iterator it = oldWidgetWrappers.iterator(); it.hasNext();) {
+ CaptionWrapper w = (CaptionWrapper) it.next();
+ client.unregisterPaintable(w.getPaintable());
+ widgetToCaptionWrapper.remove(w.getPaintable());
}
}