From 2b5ea21ff86f3a1152fd817fc2c1e5e9f9e25d2e Mon Sep 17 00:00:00 2001 From: Tatu Lund Date: Tue, 30 Jul 2019 09:42:20 +0300 Subject: Apply offset to column index depending on presense of selection column (#11667) * Apply offset to column index depending on presense of selection column After testing this manually I noticed that offset correction needs to be negative * Add the testing UI --- .../main/java/com/vaadin/client/widgets/Grid.java | 6 +- .../components/grid/GridColumnFrozenColumn.java | 67 ++++++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 uitest/src/main/java/com/vaadin/tests/components/grid/GridColumnFrozenColumn.java diff --git a/client/src/main/java/com/vaadin/client/widgets/Grid.java b/client/src/main/java/com/vaadin/client/widgets/Grid.java index 9f82d3339f..76fe46fbb7 100755 --- a/client/src/main/java/com/vaadin/client/widgets/Grid.java +++ b/client/src/main/java/com/vaadin/client/widgets/Grid.java @@ -7958,7 +7958,11 @@ public class Grid extends ResizeComposite implements HasSelectionHandlers, if (!event.getCell().isHeader()) { return; } - if (event.getCell().getColumnIndex() < getFrozenColumnCount()) { + int offset = 0; // apply offset depending on selection column, see #10546 + if (getSelectionColumn().isPresent()) { + offset = -1; + } + if (event.getCell().getColumnIndex()+offset < getFrozenColumnCount()) { return; } diff --git a/uitest/src/main/java/com/vaadin/tests/components/grid/GridColumnFrozenColumn.java b/uitest/src/main/java/com/vaadin/tests/components/grid/GridColumnFrozenColumn.java new file mode 100644 index 0000000000..057fbaa1da --- /dev/null +++ b/uitest/src/main/java/com/vaadin/tests/components/grid/GridColumnFrozenColumn.java @@ -0,0 +1,67 @@ +package com.vaadin.tests.components.grid; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.vaadin.server.VaadinRequest; +import com.vaadin.shared.ui.ContentMode; +import com.vaadin.tests.components.AbstractTestUI; +import com.vaadin.ui.Grid; +import com.vaadin.ui.Label; +import com.vaadin.ui.VerticalLayout; + +public class GridColumnFrozenColumn extends AbstractTestUI { + @Override + protected void setup(VaadinRequest request) { + final VerticalLayout layout = new VerticalLayout(); + layout.addComponent(new Label( + "Frozen columns can be reordered with unhidden columns with: " + + com.vaadin.shared.Version.getFullVersion())); + Label issueLabel = new Label( + "Demonstrate problem in grid column frozen column reorder issue with SelectionMode.MULTI"); + issueLabel.setContentMode(ContentMode.HTML); + layout.addComponent(issueLabel); + + // Create new Grid + Grid> grid = new Grid<>( + "My test grid to reorder columns"); + + // Fill the grid with data to sort + List> rows = new ArrayList<>(); + String FIRST = "Frozen Column (Should not be reordered)"; + String LAST = "Last Name Column"; + + // Grid for Vaadin 8 without bean class from + // https://vaadin.com/forum/#!/thread/16038356/16816582 + for (int i = 0; i < 20; i++) { + HashMap fakeBean = new HashMap<>(); + fakeBean.put(FIRST, "first" + i); + fakeBean.put(LAST, "last" + i); + rows.add(fakeBean); + } + + grid.setItems(rows); + + // Add the columns based on the first row + HashMap s = rows.get(0); + for (Map.Entry entry : s.entrySet()) { + grid.addColumn(h -> h.get(entry.getKey())) + .setCaption(entry.getKey()).setId(entry.getKey()); + } + grid.getColumn(LAST).setHidable(true); + grid.setSelectionMode(Grid.SelectionMode.MULTI); + // without the selector column the issue cannot be observed + // grid.setSelectionMode(SelectionMode.NONE); + grid.setFrozenColumnCount(1); + grid.setColumnReorderingAllowed(true); + grid.setSizeFull(); + + layout.addComponent(grid); + layout.setMargin(true); + layout.setSpacing(true); + + addComponent(layout); + } +} -- cgit v1.2.3