summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPekka Hyvönen <pekka@vaadin.com>2015-03-24 15:19:35 +0200
committerHenrik Paul <henrik@vaadin.com>2015-03-25 14:18:00 +0000
commitda95f395add4916d0544858c87b448ddc5d03881 (patch)
tree5afeb45cf29858a811e64db48778b89791e18864
parentdd2c4c9e7b6f1b4f0a930cfd5c5e24e536b7e7b6 (diff)
downloadvaadin-framework-da95f395add4916d0544858c87b448ddc5d03881.tar.gz
vaadin-framework-da95f395add4916d0544858c87b448ddc5d03881.zip
Fix Grid's frozen column count with hidden columns #17273
Change-Id: I4f8a893eec3cf7c32da34cb364a4d56589cbf3e2
-rw-r--r--client/src/com/vaadin/client/widgets/Grid.java28
-rw-r--r--server/src/com/vaadin/ui/Grid.java3
-rw-r--r--uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridColumnHidingTest.java75
-rw-r--r--uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/GridColumnVisibilityTest.java69
4 files changed, 174 insertions, 1 deletions
diff --git a/client/src/com/vaadin/client/widgets/Grid.java b/client/src/com/vaadin/client/widgets/Grid.java
index 15dd45ec21..5ed2f2f949 100644
--- a/client/src/com/vaadin/client/widgets/Grid.java
+++ b/client/src/com/vaadin/client/widgets/Grid.java
@@ -4279,8 +4279,23 @@ public class Grid<T> extends ResizeComposite implements
this.hidden = hidden;
} else {
this.hidden = hidden;
+
+ final int columnIndex = grid.getVisibleColumns().indexOf(
+ this);
grid.escalator.getColumnConfiguration().insertColumns(
- grid.getVisibleColumns().indexOf(this), 1);
+ columnIndex, 1);
+
+ // make sure column is set to frozen if it needs to be,
+ // escalator doesn't handle situation where the added column
+ // would be the last frozen column
+ int gridFrozenColumns = grid.getFrozenColumnCount();
+ int escalatorFrozenColumns = grid.escalator
+ .getColumnConfiguration().getFrozenColumnCount();
+ if (gridFrozenColumns > escalatorFrozenColumns
+ && escalatorFrozenColumns == columnIndex) {
+ grid.escalator.getColumnConfiguration()
+ .setFrozenColumnCount(++escalatorFrozenColumns);
+ }
}
grid.columnHider.updateToggleValue(this);
scheduleColumnWidthRecalculator();
@@ -5826,6 +5841,14 @@ public class Grid<T> extends ResizeComposite implements
private void updateFrozenColumns() {
int numberOfColumns = frozenColumnCount;
+ // for the escalator the hidden columns are not in the frozen column
+ // count, but for grid they are. thus need to convert the index
+ for (int i = 0; i < frozenColumnCount; i++) {
+ if (getColumn(i).isHidden()) {
+ numberOfColumns--;
+ }
+ }
+
if (numberOfColumns == -1) {
numberOfColumns = 0;
} else if (selectionColumn != null) {
@@ -5842,6 +5865,9 @@ public class Grid<T> extends ResizeComposite implements
* columns will be frozen, but the built-in selection checkbox column will
* still be frozen if it's in use. -1 means that not even the selection
* column is frozen.
+ * <p>
+ * <em>NOTE:</em> This includes {@link Column#isHidden() hidden columns} in
+ * the count.
*
* @return the number of frozen columns
*/
diff --git a/server/src/com/vaadin/ui/Grid.java b/server/src/com/vaadin/ui/Grid.java
index e093a99159..62b3a74f05 100644
--- a/server/src/com/vaadin/ui/Grid.java
+++ b/server/src/com/vaadin/ui/Grid.java
@@ -3954,6 +3954,9 @@ public class Grid extends AbstractComponent implements SelectionNotifier,
* columns will be frozen, but the built-in selection checkbox column will
* still be frozen if it's in use. -1 means that not even the selection
* column is frozen.
+ * <p>
+ * <em>NOTE:</em> this count includes {@link Column#isHidden() hidden
+ * columns} in the count.
*
* @see #setFrozenColumnCount(int)
*
diff --git a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridColumnHidingTest.java b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridColumnHidingTest.java
index aca7689a0a..c12c769c63 100644
--- a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridColumnHidingTest.java
+++ b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/GridColumnHidingTest.java
@@ -556,6 +556,81 @@ public class GridColumnHidingTest extends GridBasicClientFeaturesTest {
assertTrue(cell.isFocused());
}
+ @Test
+ public void testFrozenColumnHiding_lastFrozenColumnHidden_isFrozenWhenMadeVisible() {
+ toggleFrozenColumns(2);
+ toggleHidableColumnAPI(0);
+ toggleHidableColumnAPI(1);
+ getSidebarOpenButton().click();
+ verifyColumnIsFrozen(0);
+ verifyColumnIsFrozen(1);
+ verifyColumnIsNotFrozen(2);
+ assertColumnHeaderOrder(0, 1, 2, 3);
+
+ getColumnHidingToggle(1).click();
+ verifyColumnIsFrozen(0);
+ // the grid element indexing doesn't take hidden columns into account!
+ verifyColumnIsNotFrozen(1);
+ assertColumnHeaderOrder(0, 2, 3);
+
+ getColumnHidingToggle(0).click();
+ verifyColumnIsNotFrozen(0);
+ assertColumnHeaderOrder(2, 3, 4);
+
+ getColumnHidingToggle(0).click();
+ assertColumnHeaderOrder(0, 2, 3);
+ verifyColumnIsFrozen(0);
+ verifyColumnIsNotFrozen(1);
+
+ getColumnHidingToggle(1).click();
+ assertColumnHeaderOrder(0, 1, 2, 3);
+ verifyColumnIsFrozen(0);
+ verifyColumnIsFrozen(1);
+ verifyColumnIsNotFrozen(2);
+ }
+
+ @Test
+ public void testFrozenColumnHiding_columnHiddenFrozenCountChanged_columnIsFrozenWhenVisible() {
+ toggleHidableColumnAPI(1);
+ toggleHidableColumnAPI(2);
+ getSidebarOpenButton().click();
+ getColumnHidingToggle(1).click();
+ getColumnHidingToggle(2).click();
+ assertColumnHeaderOrder(0, 3, 4);
+
+ toggleFrozenColumns(3);
+ verifyColumnIsFrozen(0);
+ // the grid element indexing doesn't take hidden columns into account!
+ verifyColumnIsNotFrozen(1);
+ verifyColumnIsNotFrozen(2);
+
+ getColumnHidingToggle(2).click();
+ verifyColumnIsFrozen(0);
+ verifyColumnIsFrozen(1);
+ verifyColumnIsNotFrozen(2);
+ verifyColumnIsNotFrozen(3);
+
+ getColumnHidingToggle(1).click();
+ verifyColumnIsFrozen(0);
+ verifyColumnIsFrozen(1);
+ verifyColumnIsFrozen(2);
+ verifyColumnIsNotFrozen(3);
+ verifyColumnIsNotFrozen(4);
+ }
+
+ private void toggleFrozenColumns(int count) {
+ selectMenuPath("Component", "State", "Frozen column count", count
+ + " columns");
+ }
+
+ private void verifyColumnIsFrozen(int index) {
+ assertTrue(getGridElement().getHeaderCell(0, index).isFrozen());
+ }
+
+ private void verifyColumnIsNotFrozen(int index) {
+ assertFalse(getGridElement().getHeaderCell(0, index).isFrozen());
+ }
+
private void verifyColumnHidingTogglesOrder(int... indices) {
WebElement sidebar = getSidebar();
List<WebElement> elements = sidebar.findElements(By
diff --git a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/GridColumnVisibilityTest.java b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/GridColumnVisibilityTest.java
index 22a08d6748..37eda1c28f 100644
--- a/uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/GridColumnVisibilityTest.java
+++ b/uitest/src/com/vaadin/tests/components/grid/basicfeatures/server/GridColumnVisibilityTest.java
@@ -166,6 +166,75 @@ public class GridColumnVisibilityTest extends GridBasicFeaturesTest {
assertNotNull(getColumnHidingToggle(0));
}
+ @Test
+ public void testFrozenColumnHiding_hiddenColumnMadeFrozen_frozenWhenMadeVisible() {
+ selectMenuPath("Component", "Size", "Width", "100%");
+ toggleColumnHidable(0);
+ toggleColumnHidable(1);
+ getSidebarOpenButton().click();
+ getColumnHidingToggle(0).click();
+ getColumnHidingToggle(1).click();
+
+ assertColumnHeaderOrder(2, 3, 4, 5);
+
+ setFrozenColumns(2);
+ verifyColumnNotFrozen(0);
+ verifyColumnNotFrozen(1);
+
+ getColumnHidingToggle(0).click();
+ assertColumnHeaderOrder(0, 2, 3, 4, 5);
+ verifyColumnFrozen(0);
+ verifyColumnNotFrozen(1);
+
+ getColumnHidingToggle(1).click();
+ assertColumnHeaderOrder(0, 1, 2, 3, 4, 5);
+ verifyColumnFrozen(0);
+ verifyColumnFrozen(1);
+ verifyColumnNotFrozen(2);
+ }
+
+ @Test
+ public void testFrozenColumnHiding_hiddenFrozenColumnUnfrozen_notFrozenWhenMadeVisible() {
+ selectMenuPath("Component", "Size", "Width", "100%");
+ toggleColumnHidable(0);
+ toggleColumnHidable(1);
+ setFrozenColumns(2);
+ verifyColumnFrozen(0);
+ verifyColumnFrozen(1);
+ verifyColumnNotFrozen(2);
+ verifyColumnNotFrozen(3);
+
+ getSidebarOpenButton().click();
+ getColumnHidingToggle(0).click();
+ getColumnHidingToggle(1).click();
+ assertColumnHeaderOrder(2, 3, 4, 5);
+ verifyColumnNotFrozen(0);
+ verifyColumnNotFrozen(1);
+
+ setFrozenColumns(0);
+ verifyColumnNotFrozen(0);
+ verifyColumnNotFrozen(1);
+
+ getColumnHidingToggle(0).click();
+ assertColumnHeaderOrder(0, 2, 3, 4, 5);
+ verifyColumnNotFrozen(0);
+ verifyColumnNotFrozen(1);
+
+ getColumnHidingToggle(1).click();
+ assertColumnHeaderOrder(0, 1, 2, 3, 4, 5);
+ verifyColumnNotFrozen(0);
+ verifyColumnNotFrozen(1);
+ verifyColumnNotFrozen(2);
+ }
+
+ private void verifyColumnFrozen(int index) {
+ assertTrue(getGridElement().getHeaderCell(0, index).isFrozen());
+ }
+
+ private void verifyColumnNotFrozen(int index) {
+ assertFalse(getGridElement().getHeaderCell(0, index).isFrozen());
+ }
+
private void toggleColumnHidable(int index) {
selectMenuPath("Component", "Columns", "Column " + index, "Hidable");
}