]> source.dussan.org Git - vaadin-framework.git/commitdiff
fixes #1618
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Wed, 7 May 2008 06:53:32 +0000 (06:53 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Wed, 7 May 2008 06:53:32 +0000 (06:53 +0000)
svn changeset:4359/svn branch:trunk

src/com/itmill/toolkit/terminal/gwt/client/ui/IAccordion.java
src/com/itmill/toolkit/terminal/gwt/client/ui/ITabsheet.java
src/com/itmill/toolkit/terminal/gwt/client/ui/ITabsheetBase.java
src/com/itmill/toolkit/ui/TabSheet.java

index be4e0f27d6c54f80d5b11ea5d0c4968dba6a7736..a21c5e14e6ab3cfed9dc666a81d0068197c46c1a 100644 (file)
@@ -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) {
index be5c1b1acdbc9fd6806cec57fb706bab8fb7cf12..51e7f7e36c6b25a15117bc78badb061d5707dddc 100644 (file)
@@ -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(""));
index 90e53f294d450f9eaff03672a9922c1721b01fd0..c5a9f6130b930b4a113fe07bf9d2d666f988f37f 100644 (file)
@@ -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++;
             }
index 18f9216a23b490dd80240ad3c21178924972ece4..8aeed7c169cf3712047119c2baa58248ec4c502c 100644 (file)
@@ -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();
+    }
+
 }