]> source.dussan.org Git - vaadin-framework.git/commitdiff
Only set height when at least one header cell is shown (#18000)
authorArtur Signell <artur@vaadin.com>
Mon, 1 Jun 2015 19:17:10 +0000 (22:17 +0300)
committerArtur Signell <artur@vaadin.com>
Fri, 5 Jun 2015 11:25:50 +0000 (11:25 +0000)
Change-Id: I252a8223804b5ba45abb20061c3d65d0b80603dc

client/src/com/vaadin/client/widgets/Grid.java
uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridColumnHidingTest.java

index 079207a999e2079e0118f039fda61ac6781b3b1f..67220b6e076458095d8667e470669d4a3fcedb73 100644 (file)
@@ -3238,27 +3238,22 @@ public class Grid<T> extends ResizeComposite implements
         }
 
         private void setHeightToHeaderCellHeight() {
-            try {
-                double height = WidgetUtil
-                        .getRequiredHeightBoundingClientRectDouble(grid.escalator
-                                .getHeader().getRowElement(0)
-                                .getFirstChildElement())
-                        - (WidgetUtil.measureVerticalBorder(getElement()) / 2);
-                openCloseButton.setHeight(height + "px");
-            } catch (NullPointerException npe) {
-                getLogger()
-                        .warning(
-                                "Got null header first row or first row cell when calculating sidebar button height");
-                openCloseButton.setHeight(grid.escalator.getHeader()
-                        .getDefaultRowHeight() + "px");
-            } catch (IndexOutOfBoundsException ioobe) {
-                // happens when escalator doesn't have any headers rendered yet.
+            RowContainer header = grid.escalator.getHeader();
+            if (header.getRowCount() == 0
+                    || !header.getRowElement(0).hasChildNodes()) {
                 getLogger()
-                        .warning(
-                                "No header cell available when calculating sidebar button height");
-                openCloseButton.setHeight(grid.escalator.getHeader()
-                        .getDefaultRowHeight() + "px");
+                        .info("No header cell available when calculating sidebar button height");
+                openCloseButton.setHeight(header.getDefaultRowHeight() + "px");
+
+                return;
             }
+
+            Element firstHeaderCell = header.getRowElement(0)
+                    .getFirstChildElement();
+            double height = WidgetUtil
+                    .getRequiredHeightBoundingClientRectDouble(firstHeaderCell)
+                    - (WidgetUtil.measureVerticalBorder(getElement()) / 2);
+            openCloseButton.setHeight(height + "px");
         }
 
         private void updateVisibility() {
index c4ad2ea3470c528b9323cb1d30f8a5ac835c3f1b..9f63c2b17785c9b832144d519f2e1fdb2651330c 100644 (file)
@@ -840,6 +840,30 @@ public class GridColumnHidingTest extends GridBasicClientFeaturesTest {
                 .getDetails(1));
     }
 
+    @Test
+    public void testHideShowAllColumns() {
+        selectMenuPath("Component", "State", "Width", "1000px");
+        int colCount = 12;
+        for (int i = 0; i < colCount; i++) {
+            toggleHidableColumnAPI(i);
+        }
+        clickSidebarOpenButton();
+        for (int i = 0; i < colCount; i++) {
+            getColumnHidingToggle(i).click();
+        }
+
+        clickSidebarOpenButton();
+        // All columns hidden
+        assertEquals(0, getGridHeaderRowCells().size());
+        clickSidebarOpenButton();
+        for (int i = 0; i < colCount; i++) {
+            getColumnHidingToggle(i).click();
+        }
+
+        assertEquals(colCount, getGridHeaderRowCells().size());
+
+    }
+
     private void loadSpannedCellsFixture() {
         selectMenuPath("Component", "State", "Width", "1000px");
         appendHeaderRow();