]> source.dussan.org Git - vaadin-framework.git/commitdiff
ContainerResizedListener for tabsheet
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Wed, 10 Oct 2007 10:15:37 +0000 (10:15 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Wed, 10 Oct 2007 10:15:37 +0000 (10:15 +0000)
svn changeset:2476/svn branch:trunk

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

index 134fd30064eb5ba0f475e3e0773997fda1ba8c77..71a6302be3af49b06a7d1122ae5d1c8d2883ba4c 100644 (file)
@@ -11,10 +11,12 @@ import com.google.gwt.user.client.ui.TabBar;
 import com.google.gwt.user.client.ui.TabListener;
 import com.google.gwt.user.client.ui.Widget;
 import com.itmill.toolkit.terminal.gwt.client.ApplicationConnection;
+import com.itmill.toolkit.terminal.gwt.client.ContainerResizedListener;
 import com.itmill.toolkit.terminal.gwt.client.Paintable;
 import com.itmill.toolkit.terminal.gwt.client.UIDL;
+import com.itmill.toolkit.terminal.gwt.client.Util;
 
-public class ITabsheet extends FlowPanel implements Paintable {
+public class ITabsheet extends FlowPanel implements Paintable, ContainerResizedListener {
 
        public static final String CLASSNAME = "i-tabsheet";
 
@@ -47,6 +49,8 @@ public class ITabsheet extends FlowPanel implements Paintable {
 
        };
 
+       private String height;
+
        public ITabsheet() {
                setStyleName(CLASSNAME);
 
@@ -84,17 +88,9 @@ public class ITabsheet extends FlowPanel implements Paintable {
 
                // Try to calculate the height as close as possible
                if (h != null) {
-                       // First, calculate needed pixel height
                        setHeight(h);
-                       int neededHeight = getOffsetHeight();
-                       setHeight("");
-                       // Then calculate the size the content area needs to be
-                       tp.setHeight("0");
-                       DOM.setStyleAttribute(tp.getElement(), "overflow", "hidden");
-                       int height = getOffsetHeight();
-                       tp.setHeight(neededHeight - height + "px");
-                       DOM.setStyleAttribute(tp.getElement(), "overflow", "");
                } else {
+                       this.height = null;
                        tp.setHeight("auto");
                        // We don't need overflow:auto when tabsheet height is not set
                        DOM.setStyleAttribute(tp.getElement(), "overflow", "hidden");
@@ -168,4 +164,25 @@ public class ITabsheet extends FlowPanel implements Paintable {
                                DOM.getChild(tr, DOM.getChildCount(tr) - 1), 0);
                DOM.removeElementAttribute(rest, "style");
        }
+       
+       public void setHeight(String height) {
+               this.height = height;
+               iLayout();
+       }
+
+       public void iLayout() {
+               if(height != null) {
+                       // First, calculate needed pixel height
+                       super.setHeight(height);
+                       int neededHeight = getOffsetHeight();
+                       super.setHeight("");
+                       // Then calculate the size the content area needs to be
+                       tp.setHeight("0");
+                       DOM.setStyleAttribute(tp.getElement(), "overflow", "hidden");
+                       int pixelHeight = getOffsetHeight();
+                       tp.setHeight(neededHeight - pixelHeight + "px");
+                       DOM.setStyleAttribute(tp.getElement(), "overflow", "");                 
+               }
+               Util.runAnchestorsLayout(this);
+       }
 }