diff options
author | Pekka Hyvönen <pekka@vaadin.com> | 2015-03-03 14:26:44 +0200 |
---|---|---|
committer | Pekka Hyvönen <pekka@vaadin.com> | 2015-03-04 07:44:50 +0000 |
commit | 3abaa644d90c6460e6514b2e8207c178db01b52d (patch) | |
tree | bd329b68ec0ea817187c7d39217df470961ebb22 | |
parent | de2172eda96ca3f34b2ab4e2e926b13957c113de (diff) | |
download | vaadin-framework-3abaa644d90c6460e6514b2e8207c178db01b52d.tar.gz vaadin-framework-3abaa644d90c6460e6514b2e8207c178db01b52d.zip |
Take footer into account in column dnd-reorder (#16643)
Change-Id: I0358d1b18f65d40325b6c1bc3f3e4d3b9249fb5f
-rw-r--r-- | client/src/com/vaadin/client/widgets/Grid.java | 14 | ||||
-rw-r--r-- | uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridColumnReorderTest.java | 75 |
2 files changed, 82 insertions, 7 deletions
diff --git a/client/src/com/vaadin/client/widgets/Grid.java b/client/src/com/vaadin/client/widgets/Grid.java index 26e7ba4650..432228be1e 100644 --- a/client/src/com/vaadin/client/widgets/Grid.java +++ b/client/src/com/vaadin/client/widgets/Grid.java @@ -139,6 +139,8 @@ import com.vaadin.client.widget.grid.sort.SortHandler; import com.vaadin.client.widget.grid.sort.SortOrder; import com.vaadin.client.widgets.Escalator.AbstractRowContainer; import com.vaadin.client.widgets.Grid.Editor.State; +import com.vaadin.client.widgets.Grid.StaticSection.StaticCell; +import com.vaadin.client.widgets.Grid.StaticSection.StaticRow; import com.vaadin.shared.data.sort.SortDirection; import com.vaadin.shared.ui.grid.GridConstants; import com.vaadin.shared.ui.grid.GridStaticCellType; @@ -3183,15 +3185,15 @@ public class Grid<T> extends ResizeComposite implements int leftBound = -1; int rightBound = getColumnCount() + 1; - for (int r = 0; r < getHeaderRowCount(); r++) { - HeaderRow headerRow = getHeaderRow(r); - if (!headerRow.hasSpannedCells()) { + final List<StaticRow<?>> rows = new ArrayList<StaticRow<?>>(); + rows.addAll(header.getRows()); + rows.addAll(footer.getRows()); + for (StaticRow<?> row : rows) { + if (!row.hasSpannedCells()) { continue; } for (int c = frozenColumns; c < getColumnCount(); c++) { - HeaderCell cell = headerRow.getCell(getColumn(c)); - assert cell != null : "Somehow got a null cell for row:cell " - + r + ":" + c; + StaticCell cell = row.getCell(getColumn(c)); int colspan = cell.getColspan(); if (colspan <= 1) { continue; diff --git a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridColumnReorderTest.java b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridColumnReorderTest.java index 39c6082bed..a7fc3f435d 100644 --- a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridColumnReorderTest.java +++ b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridColumnReorderTest.java @@ -236,7 +236,7 @@ public class GridColumnReorderTest extends GridBasicClientFeaturesTest { } @Test - public void testColumnReorder_cellInsideASpannedHeader_cantBeDroppedOutsideSpannedArea() { + public void testColumnReorder_cellInsideSpannedHeader_cantBeDroppedOutsideSpannedArea() { // given toggleColumnReorder(); selectMenuPath("Component", "Header", "Append row"); @@ -353,6 +353,79 @@ public class GridColumnReorderTest extends GridBasicClientFeaturesTest { assertColumnHeaderOrder(1, 3, 4, 5, 2); } + @Test + public void testColumnReorder_footerHasSpannedCells_cantDropInside() { + // given + toggleColumnReorder(); + selectMenuPath("Component", "Footer", "Append row"); + selectMenuPath("Component", "Footer", "Row 1", "Join columns 1, 2"); + assertColumnHeaderOrder(0, 1, 2, 3, 4); + + // when + dragAndDropColumnHeader(0, 3, 1, 80); + + // then + assertColumnHeaderOrder(0, 3, 1, 2, 4); + } + + @Test + public void testColumnReorder_cellInsideASpannedFooter_cantBeDroppedOutsideSpannedArea() { + // given + toggleColumnReorder(); + selectMenuPath("Component", "Footer", "Append row"); + selectMenuPath("Component", "Footer", "Row 1", "Join columns 1, 2"); + assertColumnHeaderOrder(0, 1, 2, 3, 4); + + // when + dragAndDropColumnHeader(0, 2, 0, 20); + + // then + assertColumnHeaderOrder(0, 2, 1, 3, 4); + } + + @Test + public void testColumnReorder_cellInsideTwoCrossingSpanningFooters_cantTouchThis() { + // given + toggleColumnReorder(); + selectMenuPath("Component", "Footer", "Append row"); + selectMenuPath("Component", "Footer", "Append row"); + selectMenuPath("Component", "Footer", "Row 1", "Join column cells 0, 1"); + selectMenuPath("Component", "Footer", "Row 2", "Join columns 1, 2"); + dragAndDropColumnHeader(0, 3, 0, 10); + assertColumnHeaderOrder(3, 0, 1, 2, 4); + + // when + dragAndDropColumnHeader(0, 2, 0, 10); + + // then + assertColumnHeaderOrder(3, 0, 1, 2, 4); + } + + @Test + public void testColumnReorder_cellsInsideTwoAdjacentSpannedHeaderAndFooter_reorderingLimited() { + // given + toggleColumnReorder(); + selectMenuPath("Component", "Header", "Append row"); + selectMenuPath("Component", "Footer", "Append row"); + selectMenuPath("Component", "Header", "Row 2", "Join columns 3, 4, 5"); + dragAndDropColumnHeader(0, 0, 4, 80); + scrollGridHorizontallyTo(0); + dragAndDropColumnHeader(0, 1, 4, 80); + scrollGridHorizontallyTo(0); + selectMenuPath("Component", "Footer", "Row 1", "Join columns 1, 2"); + assertColumnHeaderOrder(1, 3, 4, 5, 2); + + // when then + dragAndDropColumnHeader(0, 1, 3, 80); + assertColumnHeaderOrder(1, 4, 3, 5, 2); + + dragAndDropColumnHeader(0, 2, 4, 10); + assertColumnHeaderOrder(1, 4, 3, 5, 2); + + dragAndDropColumnHeader(0, 2, 0, 10); + assertColumnHeaderOrder(1, 3, 4, 5, 2); + } + private void toggleColumnReorder() { selectMenuPath("Component", "State", "Column Reordering"); } |