From 3fd0b1ef442b904641dcbf13d963ea696bdda13e Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Tue, 2 Dec 2008 12:55:41 +0000 Subject: [PATCH] Fixed #2257 for Accordion. svn changeset:6071/svn branch:trunk --- .../terminal/gwt/client/ui/IAccordion.java | 38 +++++++++++++++---- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/IAccordion.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/IAccordion.java index 7c36cdb2fb..c303914e3c 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/IAccordion.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IAccordion.java @@ -32,7 +32,7 @@ public class IAccordion extends ITabsheetBase implements private String height; - private String width; + private String width = ""; private HashMap lazyUpdateMap = new HashMap(); @@ -112,7 +112,7 @@ public class IAccordion extends ITabsheetBase implements if (selected) { selectedUIDLItemIndex = itemIndex; } - + if (tabUidl.getChildCount() > 0) { lazyUpdateMap.put(item, tabUidl.getChildUIDL(0)); } @@ -120,19 +120,22 @@ public class IAccordion extends ITabsheetBase implements private void open(int itemIndex) { StackItem item = stack.get(itemIndex); + boolean alreadyOpen = false; if (openTab != null) { if (openTab.isOpen()) { if (openTab == item) { - return; + alreadyOpen = true; } else { openTab.close(); } } } - item.open(); - activeTabIndex = itemIndex; - openTab = item; + if (!alreadyOpen) { + item.open(); + activeTabIndex = itemIndex; + openTab = item; + } // Update the size for the open tab updateOpenTabSize(); @@ -173,10 +176,25 @@ public class IAccordion extends ITabsheetBase implements } public void setWidth(String width) { + if (this.width.equals(width)) { + return; + } + super.setWidth(width); this.width = width; if (!rendering) { updateOpenTabSize(); + + if (isDynamicHeight()) { + Util.updateRelativeChildrenAndSendSizeUpdateEvent(client, + openTab, this); + updateOpenTabSize(); + } + + if (isDynamicHeight()) { + openTab.setHeightFromWidget(); + } + iLayout(); } } @@ -410,7 +428,13 @@ public class IAccordion extends ITabsheetBase implements replacePaintable(newPntbl); } newPntbl.updateFromUIDL(contentUidl, client); - + if (contentUidl.getBooleanAttribute("cached")) { + /* + * The size of a cached, relative sized component must be + * updated to report correct size. + */ + client.handleComponentRelativeSize((Widget) newPntbl); + } if (isOpen() && isDynamicHeight()) { setHeightFromWidget(); } -- 2.39.5