]> source.dussan.org Git - vaadin-framework.git/commitdiff
fixes #3793, table now takes possible horizontal scrollbar into account when the...
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Mon, 21 Dec 2009 15:33:32 +0000 (15:33 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Mon, 21 Dec 2009 15:33:32 +0000 (15:33 +0000)
svn changeset:10499/svn branch:6.2

src/com/vaadin/terminal/gwt/client/ui/VScrollTable.java

index 430fd0e6a8f7c0236b69a6c7e48a14bcfeccb4e5..6e8d672493c2c0771fa0fb9fce6e38afdfb634cc 100644 (file)
@@ -709,6 +709,8 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler {
              * We must force an update of the row height as this point as it
              * might have been (incorrectly) calculated earlier
              */
+
+            int bodyHeight;
             if (pageLength == totalRows) {
                 /*
                  * A hack to support variable height rows when paging is off.
@@ -717,13 +719,16 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler {
                  * height.
                  */
                 // int bodyHeight = scrollBody.getOffsetHeight();
-                int bodyHeight = scrollBody.getRequiredHeight();
-                bodyContainer.setHeight(bodyHeight + "px");
-                Util.runWebkitOverflowAutoFix(bodyContainer.getElement());
+                bodyHeight = scrollBody.getRequiredHeight();
             } else {
-                int bodyHeight = (scrollBody.getRowHeight(true) * pageLength);
-                bodyContainer.setHeight(bodyHeight + "px");
+                bodyHeight = (scrollBody.getRowHeight(true) * pageLength);
+            }
+            boolean needsSpaceForHorizontalSrollbar = (total > availW);
+            if (needsSpaceForHorizontalSrollbar) {
+                bodyHeight += Util.getNativeScrollbarSize();
             }
+            bodyContainer.setHeight(bodyHeight + "px");
+            Util.runWebkitOverflowAutoFix(bodyContainer.getElement());
         }
 
         isNewBody = false;
@@ -2805,6 +2810,21 @@ public class VScrollTable extends FlowPanel implements Table, ScrollHandler {
                 }
                 colIndex++;
             }
+            if ((height == null || "".equals(height))
+                    && totalRows == pageLength) {
+                // fix body height (may vary if lazy loading is offhorizontal
+                // scrollbar appears/disappears)
+                int bodyHeight = scrollBody.getRequiredHeight();
+                boolean needsSpaceForHorizontalSrollbar = (availW < usedMinimumWidth);
+                if (needsSpaceForHorizontalSrollbar) {
+                    bodyHeight += Util.getNativeScrollbarSize();
+                }
+                int heightBefore = getOffsetHeight();
+                bodyContainer.setHeight(bodyHeight + "px");
+                if (heightBefore != getOffsetHeight()) {
+                    Util.notifyParentOfSizeChange(VScrollTable.this, false);
+                }
+            }
             scrollBody.reLayoutComponents();
             DeferredCommand.addCommand(new Command() {
                 public void execute() {