From: Leif Åstrand Date: Fri, 20 Mar 2015 14:51:45 +0000 (+0200) Subject: Use special logic for allocating selection col widths (#17091) X-Git-Tag: 7.5.0.beta1~165 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=7fa43952ca1b1e26afe79f5c0a75f9e735431be0;p=vaadin-framework.git Use special logic for allocating selection col widths (#17091) Change-Id: I2d0a80a26e8211d6f5e9110e1476f857803b4d3f --- diff --git a/client/src/com/vaadin/client/widgets/Grid.java b/client/src/com/vaadin/client/widgets/Grid.java index cb9e9c55d1..f4a5b0961c 100644 --- a/client/src/com/vaadin/client/widgets/Grid.java +++ b/client/src/com/vaadin/client/widgets/Grid.java @@ -2528,7 +2528,7 @@ public class Grid extends ResizeComposite implements final double widthFixed = Math.max(widthAsIs, column.getMinimumWidth()); defaultExpandRatios = defaultExpandRatios - && column.getExpandRatio() == -1; + && (column.getExpandRatio() == -1 || column == selectionColumn); if (isFixedWidth) { columnSizes.put(indexOfColumn(column), widthFixed); @@ -2546,7 +2546,8 @@ public class Grid extends ResizeComposite implements .getExpandRatio()); final double newWidth = column.getWidthActual(); final double maxWidth = getMaxWidth(column); - boolean shouldExpand = newWidth < maxWidth && expandRatio > 0; + boolean shouldExpand = newWidth < maxWidth && expandRatio > 0 + && column != selectionColumn; if (shouldExpand) { totalRatios += expandRatio; columnsToExpand.add(column); diff --git a/uitest/src/com/vaadin/tests/components/grid/GridColumnWidthsWithoutData.java b/uitest/src/com/vaadin/tests/components/grid/GridColumnWidthsWithoutData.java index 1dfc7bcf11..b04745f17a 100644 --- a/uitest/src/com/vaadin/tests/components/grid/GridColumnWidthsWithoutData.java +++ b/uitest/src/com/vaadin/tests/components/grid/GridColumnWidthsWithoutData.java @@ -15,21 +15,41 @@ */ package com.vaadin.tests.components.grid; +import java.util.EnumSet; + +import com.vaadin.data.Property.ValueChangeEvent; +import com.vaadin.data.Property.ValueChangeListener; 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; +import com.vaadin.ui.Grid.SelectionMode; +import com.vaadin.ui.NativeSelect; import com.vaadin.ui.VerticalLayout; public class GridColumnWidthsWithoutData extends AbstractTestUI { + private SelectionMode selectionMode = SelectionMode.NONE; private Grid grid = createGrid(true); @Override protected void setup(VaadinRequest request) { addComponent(grid); + NativeSelect selectionModeSelector = new NativeSelect("Selection mode", + EnumSet.allOf(SelectionMode.class)); + selectionModeSelector.setValue(selectionMode); + selectionModeSelector.setNullSelectionAllowed(false); + selectionModeSelector.addValueChangeListener(new ValueChangeListener() { + @Override + public void valueChange(ValueChangeEvent event) { + selectionMode = (SelectionMode) event.getProperty().getValue(); + grid.setSelectionMode(selectionMode); + } + }); + addComponent(selectionModeSelector); + addComponent(new Button("Recreate without data", new Button.ClickListener() { @Override @@ -72,6 +92,7 @@ public class GridColumnWidthsWithoutData extends AbstractTestUI { grid.addColumn("foo"); grid.addColumn("bar"); grid.setWidth("300px"); + grid.setSelectionMode(selectionMode); if (withData) { addDataToGrid(grid); diff --git a/uitest/src/com/vaadin/tests/components/grid/GridColumnWidthsWithoutDataTest.java b/uitest/src/com/vaadin/tests/components/grid/GridColumnWidthsWithoutDataTest.java index dd63d6abc9..c215fa0a59 100644 --- a/uitest/src/com/vaadin/tests/components/grid/GridColumnWidthsWithoutDataTest.java +++ b/uitest/src/com/vaadin/tests/components/grid/GridColumnWidthsWithoutDataTest.java @@ -23,6 +23,7 @@ import org.junit.Test; import com.vaadin.testbench.elements.ButtonElement; import com.vaadin.testbench.elements.GridElement; import com.vaadin.testbench.elements.GridElement.GridCellElement; +import com.vaadin.testbench.elements.NativeSelectElement; import com.vaadin.testbench.elements.NotificationElement; import com.vaadin.tests.tb3.SingleBrowserTest; @@ -49,7 +50,7 @@ public class GridColumnWidthsWithoutDataTest extends SingleBrowserTest { } @Test - public void restWidthsWhenInitiallyEmpty() { + public void testWidthsWhenInitiallyEmpty() { setDebug(true); openTestURL(); $(ButtonElement.class).caption("Recreate without data").first().click(); @@ -74,6 +75,37 @@ public class GridColumnWidthsWithoutDataTest extends SingleBrowserTest { isElementPresent(NotificationElement.class)); } + @Test + public void testMultiSelectWidths() { + setDebug(true); + openTestURL(); + $(NativeSelectElement.class).caption("Selection mode").first() + .selectByText("Multi"); + + GridElement grid = $(GridElement.class).first(); + + int sum = sumUsedWidths(grid); + + // 295 instead of 300 to avoid rounding issues + Assert.assertTrue("Only " + sum + " out of 300px was used", sum > 295); + + $(ButtonElement.class).caption("Recreate without data").first().click(); + + grid = $(GridElement.class).first(); + sum = sumUsedWidths(grid); + + // 295 instead of 300 to avoid rounding issues + Assert.assertTrue("Only " + sum + " out of 300px was used", sum > 295); + } + + private int sumUsedWidths(GridElement grid) { + int sum = 0; + for (int i : getColWidths(grid)) { + sum += i; + } + return sum; + } + private static void assertSameWidths(int[] expected, int[] actual) { Assert.assertEquals("Arrays have differing lengths", expected.length, actual.length);