aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPekka Hyvönen <pekka@vaadin.com>2015-02-26 09:44:23 +0200
committerPekka Hyvönen <pekka@vaadin.com>2015-02-26 09:52:54 +0200
commitfa50ea28870436c5dedb459e364d24f14f7ab001 (patch)
treed84e6f4c8044c59113f3c2bc8cba07e0980bcd92
parentb90e4d307c286a56a38fc3cc2ec2dd73017e9458 (diff)
downloadvaadin-framework-fa50ea28870436c5dedb459e364d24f14f7ab001.tar.gz
vaadin-framework-fa50ea28870436c5dedb459e364d24f14f7ab001.zip
Support column reordering from all header rows. (#16643)
Change-Id: I78a4a50b011576a026518a58c36822a383979986
-rw-r--r--WebContent/VAADIN/themes/base/grid/grid.scss3
-rw-r--r--client/src/com/vaadin/client/widgets/Grid.java14
-rw-r--r--uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridBasicFeaturesTest.java19
-rw-r--r--uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/GridColumnReorderTest.java31
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);
}