aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--client/src/com/vaadin/client/connectors/GridConnector.java4
-rw-r--r--client/src/com/vaadin/client/widget/grid/AutoScroller.java13
-rw-r--r--client/src/com/vaadin/client/widgets/Grid.java37
-rw-r--r--uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/GridColumnReorderTest.java75
4 files changed, 120 insertions, 9 deletions
diff --git a/client/src/com/vaadin/client/connectors/GridConnector.java b/client/src/com/vaadin/client/connectors/GridConnector.java
index 2ae04b2be2..71450f6146 100644
--- a/client/src/com/vaadin/client/connectors/GridConnector.java
+++ b/client/src/com/vaadin/client/connectors/GridConnector.java
@@ -370,7 +370,9 @@ public class GridConnector extends AbstractHasComponentsConnector implements
List<Column<?, JsonObject>> columns = getWidget().getColumns();
final List<String> newColumnOrder = new ArrayList<String>();
for (Column<?, JsonObject> column : columns) {
- newColumnOrder.add(((CustomGridColumn) column).id);
+ if (column instanceof CustomGridColumn) {
+ newColumnOrder.add(((CustomGridColumn) column).id);
+ } // the other case would be the multi selection column
}
getRpcProxy(GridServerRpc.class).columnsReordered(
newColumnOrder, columnOrder);
diff --git a/client/src/com/vaadin/client/widget/grid/AutoScroller.java b/client/src/com/vaadin/client/widget/grid/AutoScroller.java
index 71851d67c8..f7c80df623 100644
--- a/client/src/com/vaadin/client/widget/grid/AutoScroller.java
+++ b/client/src/com/vaadin/client/widget/grid/AutoScroller.java
@@ -669,14 +669,23 @@ public class AutoScroller {
}
private double getFrozenColumnsWidth() {
- // TODO handle the case where the checkbox column is present
- double value = 0;
+ double value = getMultiSelectColumnWidth();
for (int i = 0; i < grid.getFrozenColumnCount(); i++) {
value += grid.getColumn(i).getWidthActual();
}
return value;
}
+ private double getMultiSelectColumnWidth() {
+ if (grid.getFrozenColumnCount() >= 0
+ && grid.getSelectionModel().getSelectionColumnRenderer() != null) {
+ // frozen checkbox column is present
+ return getTheadElement().getFirstChildElement()
+ .getFirstChildElement().getOffsetWidth();
+ }
+ return 0.0;
+ }
+
private double getMaxScrollLeft() {
return grid.getScrollWidth()
- (getTableElement().getParentElement().getOffsetWidth() - getFrozenColumnsWidth());
diff --git a/client/src/com/vaadin/client/widgets/Grid.java b/client/src/com/vaadin/client/widgets/Grid.java
index 3fd119d9ea..c237a7ba2f 100644
--- a/client/src/com/vaadin/client/widgets/Grid.java
+++ b/client/src/com/vaadin/client/widgets/Grid.java
@@ -3054,6 +3054,9 @@ public class Grid<T> extends ResizeComposite implements
latestColumnDropIndex--;
}
reordered.add(latestColumnDropIndex, moved);
+ reordered.remove(selectionColumn); // since setColumnOrder will
+ // add it anyway!
+
@SuppressWarnings("unchecked")
Column<?, T>[] array = reordered.toArray(new Column[reordered
.size()]);
@@ -3112,11 +3115,36 @@ public class Grid<T> extends ResizeComposite implements
}
private double getFrozenColumnsWidth() {
- double result = 0.0d;
+ double value = getMultiSelectColumnWidth();
for (int i = 0; i < getFrozenColumnCount(); i++) {
- result += getColumn(i).getWidthActual();
+ value += getColumn(i).getWidthActual();
+ }
+ return value;
+ }
+
+ private double getMultiSelectColumnWidth() {
+ if (getSelectionModel().getSelectionColumnRenderer() != null) {
+ // frozen checkbox column is present, it is always the first
+ // column
+ return escalator.getHeader().getElement()
+ .getFirstChildElement().getFirstChildElement()
+ .getOffsetWidth();
+ }
+ return 0.0;
+ }
+
+ /**
+ * Returns the amount of frozen columns. The selection column is always
+ * considered frozen, since it can't be moved.
+ */
+ private int getSelectionAndFrozenColumnCount() {
+ // no matter if selection column is frozen or not, it is considered
+ // frozen for column dnd reorder
+ if (getSelectionModel().getSelectionColumnRenderer() != null) {
+ return Math.max(0, getFrozenColumnCount()) + 1;
+ } else {
+ return Math.max(0, getFrozenColumnCount());
}
- return result;
}
private void calculatePossibleDropPositions() {
@@ -3125,10 +3153,9 @@ public class Grid<T> extends ResizeComposite implements
if (!calculatePossibleDropPositionInsideSpannedHeader()) {
HashMap<Integer, Double> columnIndexToDropPositionMap = new HashMap<Integer, Double>();
- final int frozenColumns = Math.max(0, getFrozenColumnCount());
+ final int frozenColumns = getSelectionAndFrozenColumnCount();
double position = getFrozenColumnsWidth();
// add all columns except frozen columns
- // TODO handle the case where the checkbox column is present
for (int i = frozenColumns; i < getColumnCount(); i++) {
columnIndexToDropPositionMap.put(i, position);
position += getColumn(i).getWidthActual();
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 ae0ab62aab..c7113dbd5e 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
@@ -18,9 +18,12 @@ package com.vaadin.tests.components.grid.basicfeatures.server;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import java.util.List;
+
import org.junit.Before;
import org.junit.Test;
+import com.vaadin.testbench.TestBenchElement;
import com.vaadin.tests.components.grid.basicfeatures.GridBasicFeaturesTest;
/**
@@ -213,6 +216,77 @@ public class GridColumnReorderTest extends GridBasicFeaturesTest {
}
@Test
+ public void testColumnReorder_draggingColumnLeftOfMultiSelectionColumn_columnDroppedRight() {
+ // given
+ openTestURL();
+ toggleColumnReordering();
+ selectMenuPath("Component", "State", "Selection mode", "multi");
+ List<TestBenchElement> gridHeaderRowCells = getGridHeaderRowCells();
+ assertTrue(gridHeaderRowCells.get(0).getText().equals(""));
+ assertColumnHeader("Column 0", gridHeaderRowCells.get(1));
+ assertColumnHeader("Column 1", gridHeaderRowCells.get(2));
+ assertColumnHeader("Column 2", gridHeaderRowCells.get(3));
+
+ // when
+ dragAndDropDefaultColumnHeader(2, 0, 2);
+
+ // then
+ gridHeaderRowCells = getGridHeaderRowCells();
+ assertTrue(gridHeaderRowCells.get(0).getText().equals(""));
+ assertColumnHeader("Column 1", gridHeaderRowCells.get(1));
+ assertColumnHeader("Column 0", gridHeaderRowCells.get(2));
+ assertColumnHeader("Column 2", gridHeaderRowCells.get(3));
+ }
+
+ @Test
+ public void testColumnReorder_multiSelectionAndFrozenColumns_columnDroppedRight() {
+ // given
+ openTestURL();
+ toggleColumnReordering();
+ selectMenuPath("Component", "State", "Selection mode", "multi");
+ setFrozenColumns(1);
+ List<TestBenchElement> gridHeaderRowCells = getGridHeaderRowCells();
+ assertTrue(gridHeaderRowCells.get(0).getText().equals(""));
+ assertColumnHeader("Column 0", gridHeaderRowCells.get(1));
+ assertColumnHeader("Column 1", gridHeaderRowCells.get(2));
+ assertColumnHeader("Column 2", gridHeaderRowCells.get(3));
+
+ // when
+ dragAndDropDefaultColumnHeader(3, 0, 2);
+
+ // then
+ gridHeaderRowCells = getGridHeaderRowCells();
+ assertTrue(gridHeaderRowCells.get(0).getText().equals(""));
+ assertColumnHeader("Column 0", gridHeaderRowCells.get(1));
+ assertColumnHeader("Column 2", gridHeaderRowCells.get(2));
+ assertColumnHeader("Column 1", gridHeaderRowCells.get(3));
+ }
+
+ @Test
+ public void testColumnReordering_multiSelectionColumnNotFrozen_stillCantDropLeftSide() {
+ // given
+ openTestURL();
+ toggleColumnReordering();
+ selectMenuPath("Component", "State", "Selection mode", "multi");
+ setFrozenColumns(-1);
+ List<TestBenchElement> gridHeaderRowCells = getGridHeaderRowCells();
+ assertTrue(gridHeaderRowCells.get(0).getText().equals(""));
+ assertColumnHeader("Column 0", gridHeaderRowCells.get(1));
+ assertColumnHeader("Column 1", gridHeaderRowCells.get(2));
+ assertColumnHeader("Column 2", gridHeaderRowCells.get(3));
+
+ // when
+ dragAndDropDefaultColumnHeader(2, 0, 2);
+
+ // then
+ gridHeaderRowCells = getGridHeaderRowCells();
+ assertTrue(gridHeaderRowCells.get(0).getText().equals(""));
+ assertColumnHeader("Column 1", gridHeaderRowCells.get(1));
+ assertColumnHeader("Column 0", gridHeaderRowCells.get(2));
+ assertColumnHeader("Column 2", gridHeaderRowCells.get(3));
+ }
+
+ @Test
public void testColumnReordering_twoHeaderRows_dndReorderingPossibleFromFirstRow() {
// given
openTestURL();
@@ -236,7 +310,6 @@ public class GridColumnReorderTest extends GridBasicFeaturesTest {
assertColumnHeaderOrder(0, 1, 2, 3);
// when
- // when
dragAndDropColumnHeader(1, 0, 2, 100);
// then