]> source.dussan.org Git - vaadin-framework.git/commitdiff
Make Grid recalculate columns on resize (#16539)
authorTeemu Suo-Anttila <teemusa@vaadin.com>
Thu, 26 Feb 2015 09:29:02 +0000 (11:29 +0200)
committerLeif Åstrand <leif@vaadin.com>
Tue, 3 Mar 2015 11:19:15 +0000 (11:19 +0000)
Change-Id: Ib2b9ecc995ec6fe2627c545efc2a312a59df6b9c

client/src/com/vaadin/client/widgets/Grid.java
uitest/src/com/vaadin/tests/components/grid/GridWidthIncrease.java [new file with mode: 0644]
uitest/src/com/vaadin/tests/components/grid/GridWidthIncreaseTest.java [new file with mode: 0644]

index f0b5e590597243606392c1d2ad09f71a6008c7a7..3c2d070fa0febed781d38356833311a17e1a74ba 100644 (file)
@@ -6182,6 +6182,23 @@ public class Grid<T> extends ResizeComposite implements
         }
     }
 
+    @Override
+    public void onResize() {
+        super.onResize();
+        /*
+         * Delay calculation to be deferred so Escalator can do it's magic.
+         */
+        Scheduler.get().scheduleDeferred(new ScheduledCommand() {
+
+            @Override
+            public void execute() {
+                if (!autoColumnWidthsRecalculator.isScheduled()) {
+                    autoColumnWidthsRecalculator.schedule();
+                }
+            }
+        });
+    }
+
     /**
      * Grid does not support adding Widgets this way.
      * <p>
diff --git a/uitest/src/com/vaadin/tests/components/grid/GridWidthIncrease.java b/uitest/src/com/vaadin/tests/components/grid/GridWidthIncrease.java
new file mode 100644 (file)
index 0000000..6726400
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2000-2014 Vaadin Ltd.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.components.grid;
+
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Grid;
+
+public class GridWidthIncrease extends AbstractTestUI {
+
+    public static int COLUMN_COUNT = 5;
+
+    @Override
+    protected void setup(VaadinRequest request) {
+        final Grid grid = new Grid();
+        Object[] rowData = new String[COLUMN_COUNT];
+        for (int i = 0; i < COLUMN_COUNT; ++i) {
+            grid.addColumn("Column " + i, String.class);
+            rowData[i] = "Foo (0, " + i + ")";
+        }
+        grid.addRow(rowData);
+        grid.setWidth(400 + "px");
+        addComponent(grid);
+        addComponent(new Button("Increase Grid Width",
+                new Button.ClickListener() {
+
+                    @Override
+                    public void buttonClick(ClickEvent event) {
+                        grid.setWidth((grid.getWidth() + 50) + "px");
+                    }
+                }));
+    }
+}
diff --git a/uitest/src/com/vaadin/tests/components/grid/GridWidthIncreaseTest.java b/uitest/src/com/vaadin/tests/components/grid/GridWidthIncreaseTest.java
new file mode 100644 (file)
index 0000000..bf9110b
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2000-2014 Vaadin Ltd.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.components.grid;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.GridElement;
+import com.vaadin.tests.tb3.MultiBrowserTest;
+
+public class GridWidthIncreaseTest extends MultiBrowserTest {
+
+    private static int INCREASE_COUNT = 3;
+
+    @Test
+    public void testColumnsExpandWithGrid() {
+        openTestURL();
+
+        GridElement grid = $(GridElement.class).first();
+
+        int[] widths = new int[GridWidthIncrease.COLUMN_COUNT];
+        for (int i = 0; i < INCREASE_COUNT; ++i) {
+            int totalWidth = 0;
+            $(ButtonElement.class).first().click();
+            for (int c = 0; c < GridWidthIncrease.COLUMN_COUNT; ++c) {
+                int width = grid.getCell(0, c).getSize().getWidth();
+                totalWidth += width;
+                widths[c] = width;
+                if (c > 0) {
+                    // check that columns are roughly the same width.
+                    assertEquals("Difference in column widths", widths[c],
+                            widths[c - 1], 1.0d);
+                }
+            }
+            // Column widths should be the same as table wrapper size
+            assertTrue(totalWidth == grid.getTableWrapper().getSize()
+                    .getWidth());
+        }
+    }
+}