From: Matti Tahvonen Date: Wed, 7 May 2008 06:53:32 +0000 (+0000) Subject: fixes #1618 X-Git-Tag: 6.7.0.beta1~4818 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=1a1418a67e7da10531f2c7313defae699ff420e6;p=vaadin-framework.git fixes #1618 svn changeset:4359/svn branch:trunk --- 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 be4e0f27d6..a21c5e14e6 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/IAccordion.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IAccordion.java @@ -68,6 +68,10 @@ public class IAccordion extends ITabsheetBase implements if (selected) { item.open(); item.setContent(tabUidl.getChildUIDL(0)); + } else if (tabUidl.getChildCount() > 0) { + // updating a drawn child on hidden tab + Paintable paintable = client.getPaintable(tabUidl.getChildUIDL(0)); + paintable.updateFromUIDL(tabUidl.getChildUIDL(0), client); } } @@ -232,6 +236,8 @@ public class IAccordion extends ITabsheetBase implements public void setContent(UIDL contentUidl) { final Paintable newPntbl = client.getPaintable(contentUidl); + // due hack #1 in ITabsheetBase + ((Widget) newPntbl).setVisible(true); if (getPaintable() == null) { add((Widget) newPntbl, content); } else if (getPaintable() != newPntbl) { diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/ITabsheet.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/ITabsheet.java index be5c1b1acd..51e7f7e36c 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/ITabsheet.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/ITabsheet.java @@ -148,6 +148,10 @@ public class ITabsheet extends ITabsheetBase implements if (selected) { renderContent(tabUidl.getChildUIDL(0)); tb.selectTab(index); + } else if (tabUidl.getChildCount() > 0) { + // updating a drawn child on hidden tab + Paintable paintable = client.getPaintable(tabUidl.getChildUIDL(0)); + paintable.updateFromUIDL(tabUidl.getChildUIDL(0), client); } // Add place-holder content tp.add(new Label("")); diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/ITabsheetBase.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/ITabsheetBase.java index 90e53f294d..c5a9f6130b 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/ITabsheetBase.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/ITabsheetBase.java @@ -6,6 +6,7 @@ import java.util.Iterator; import java.util.Set; import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.Widget; import com.itmill.toolkit.terminal.gwt.client.ApplicationConnection; import com.itmill.toolkit.terminal.gwt.client.Paintable; import com.itmill.toolkit.terminal.gwt.client.UIDL; @@ -47,6 +48,15 @@ abstract class ITabsheetBase extends FlowPanel implements Paintable { final boolean selected = tab.getBooleanAttribute("selected"); if (selected) { selectTab(index, tab.getChildUIDL(0)); + } else if (tab.getChildCount() > 0) { + // updating a drawn child on hidden tab + Paintable paintable = client.getPaintable(tab + .getChildUIDL(0)); + // TODO widget may flash on screen + paintable.updateFromUIDL(tab.getChildUIDL(0), client); + // Hack #1 in ITabsheetBase: due ITabsheets content has no + // wrappers for each tab, we need to hide the actual widgets + ((Widget) paintable).setVisible(false); } index++; } diff --git a/src/com/itmill/toolkit/ui/TabSheet.java b/src/com/itmill/toolkit/ui/TabSheet.java index 18f9216a23..8aeed7c169 100644 --- a/src/com/itmill/toolkit/ui/TabSheet.java +++ b/src/com/itmill/toolkit/ui/TabSheet.java @@ -54,6 +54,8 @@ public class TabSheet extends AbstractComponentContainer implements */ private boolean tabsHidden; + private LinkedList paintedTabs = new LinkedList(); + /** * Constructs a new Tabsheet. Tabsheet is immediate by default. */ @@ -228,12 +230,10 @@ public class TabSheet extends AbstractComponentContainer implements if (c.equals(selected)) { target.addAttribute("selected", true); c.paint(target); + paintedTabs.add(c); + } else if (paintedTabs.contains(c)) { + c.paint(target); } else { - /* - * Component is kind of painted (caption, enabled, icon ...) - * without paint methdod, so we must manually clear unpainted - * flag. - */ c.requestRepaintRequests(); } target.endTag("tab"); @@ -534,4 +534,9 @@ public class TabSheet extends AbstractComponentContainer implements requestRepaint(); } + public void detach() { + super.detach(); + paintedTabs.clear(); + } + }