diff options
author | Pekka Hyvönen <pekka@vaadin.com> | 2015-02-26 09:44:23 +0200 |
---|---|---|
committer | Pekka Hyvönen <pekka@vaadin.com> | 2015-02-26 09:52:54 +0200 |
commit | fa50ea28870436c5dedb459e364d24f14f7ab001 (patch) | |
tree | d84e6f4c8044c59113f3c2bc8cba07e0980bcd92 | |
parent | b90e4d307c286a56a38fc3cc2ec2dd73017e9458 (diff) | |
download | vaadin-framework-fa50ea28870436c5dedb459e364d24f14f7ab001.tar.gz vaadin-framework-fa50ea28870436c5dedb459e364d24f14f7ab001.zip |
Support column reordering from all header rows. (#16643)
Change-Id: I78a4a50b011576a026518a58c36822a383979986
4 files changed, 58 insertions, 9 deletions
diff --git a/WebContent/VAADIN/themes/base/grid/grid.scss b/WebContent/VAADIN/themes/base/grid/grid.scss index 35024e27c0..20f8478885 100644 --- a/WebContent/VAADIN/themes/base/grid/grid.scss +++ b/WebContent/VAADIN/themes/base/grid/grid.scss @@ -55,11 +55,12 @@ $v-grid-editor-background-color: $v-grid-row-background-color !default; .#{$primaryStyleName} .header-drag-table { border-spacing: 0; + position: relative; table-layout: fixed; width: inherit; // a decent default fallback .#{$primaryStyleName}-header { - + position: absolute; > .#{$primaryStyleName}-cell { border: $v-grid-border; margin-top: -10px; diff --git a/client/src/com/vaadin/client/widgets/Grid.java b/client/src/com/vaadin/client/widgets/Grid.java index fc208843e4..ebc2fcf97e 100644 --- a/client/src/com/vaadin/client/widgets/Grid.java +++ b/client/src/com/vaadin/client/widgets/Grid.java @@ -2930,6 +2930,13 @@ public class Grid<T> extends ResizeComposite implements tableHeader.setClassName(escalator.getHeader().getElement() .getClassName()); dropMarker.setClassName(getStylePrimaryName() + "-drop-marker"); + int topOffset = 0; + for (int i = 0; i < eventCell.getRowIndex(); i++) { + topOffset += escalator.getHeader().getRowElement(i) + .getFirstChildElement().getOffsetHeight(); + } + tableHeader.getStyle().setTop(topOffset, Unit.PX); + getElement().appendChild(table); } @@ -5375,17 +5382,12 @@ public class Grid<T> extends ResizeComposite implements private boolean handleHeaderCellDragStartEvent(Event event, RowContainer container) { - if (!columnReorderingAllowed) { + if (!isColumnReorderingAllowed()) { return false; } if (container != escalator.getHeader()) { return false; } - // for now only support reordering of default row as the only row - if (!getHeader().getRow(eventCell.getRowIndex()).isDefault() - || getHeader().getRowCount() != 1) { - return false; - } if (eventCell.getColumnIndex() < escalator.getColumnConfiguration() .getFrozenColumnCount()) { return false; diff --git a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridBasicFeaturesTest.java b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridBasicFeaturesTest.java index d387bbe22f..13f32fd2a2 100644 --- a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridBasicFeaturesTest.java +++ b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridBasicFeaturesTest.java @@ -30,6 +30,7 @@ import org.openqa.selenium.remote.DesiredCapabilities; import com.vaadin.testbench.TestBenchElement; import com.vaadin.testbench.elements.GridElement; +import com.vaadin.testbench.elements.GridElement.GridCellElement; import com.vaadin.tests.annotations.TestCategory; import com.vaadin.tests.tb3.MultiBrowserTest; @@ -158,8 +159,9 @@ public abstract class GridBasicFeaturesTest extends MultiBrowserTest { .getText().toLowerCase()); } - protected WebElement getDefaultColumnHeader(int index) { - List<TestBenchElement> headerRowCells = getGridHeaderRowCells(); + protected GridCellElement getDefaultColumnHeader(int index) { + List<GridCellElement> headerRowCells = getGridElement().getHeaderCells( + 0); return headerRowCells.get(index); } @@ -172,6 +174,19 @@ public abstract class GridBasicFeaturesTest extends MultiBrowserTest { xOffsetFromColumnTopLeftCorner, 0).release().perform(); } + protected void dragAndDropColumnHeader(int headerRow, + int draggedColumnHeaderIndex, int onTopOfColumnHeaderIndex, + int xOffsetFromColumnTopLeftCorner) { + new Actions(getDriver()) + .clickAndHold( + getGridElement().getHeaderCell(headerRow, + draggedColumnHeaderIndex)) + .moveToElement( + getGridElement().getHeaderCell(headerRow, + onTopOfColumnHeaderIndex), + xOffsetFromColumnTopLeftCorner, 0).release().perform(); + } + protected void assertColumnIsSorted(int index) { WebElement columnHeader = getDefaultColumnHeader(index); assertTrue(columnHeader.getAttribute("class").contains("sort")); diff --git a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/GridColumnReorderTest.java b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/GridColumnReorderTest.java index 7ab66aad95..ae0ab62aab 100644 --- a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/GridColumnReorderTest.java +++ b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/GridColumnReorderTest.java @@ -212,6 +212,37 @@ public class GridColumnReorderTest extends GridBasicFeaturesTest { assertColumnHeaderOrder(0, 2, 1, 3); } + @Test + public void testColumnReordering_twoHeaderRows_dndReorderingPossibleFromFirstRow() { + // given + openTestURL(); + toggleColumnReordering(); + selectMenuPath("Component", "Header", "Append row"); + assertColumnHeaderOrder(0, 1, 2, 3); + + // when + dragAndDropColumnHeader(0, 0, 2, 100); + + // then + assertColumnHeaderOrder(1, 2, 0, 3); + } + + @Test + public void testColumnReordering_twoHeaderRows_dndReorderingPossibleFromSecondRow() { + // given + openTestURL(); + toggleColumnReordering(); + selectMenuPath("Component", "Header", "Append row"); + assertColumnHeaderOrder(0, 1, 2, 3); + + // when + // when + dragAndDropColumnHeader(1, 0, 2, 100); + + // then + assertColumnHeaderOrder(1, 2, 0, 3); + } + private void toggleColumnReordering() { selectMenuPath(COLUMN_REORDERING_PATH); } |