Bug 547848 - Add performance row grouping
Fixed issue when columns/rows were hidden via local loadState()
Change-Id: Id605eb7714b03a53e7a8d019f5424aaa75e2ba9b
Signed-off-by: Dirk Fauth <dirk.fauth@googlemail.com>
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/group/performance/ColumnGroupHeaderLayerTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/group/performance/ColumnGroupHeaderLayerTest.java
index 8bbf35e..b4be8d3 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/group/performance/ColumnGroupHeaderLayerTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/group/performance/ColumnGroupHeaderLayerTest.java
@@ -12321,4 +12321,34 @@
assertEquals(3, group1.getOriginalSpan());
assertEquals(3, group1.getVisibleSpan());
}
+
+ @Test
+ public void shouldShowGroupHiddenByLoadState() {
+ this.columnGroupHeaderLayer.removeGroup(0);
+
+ this.columnGroupHeaderLayer.addGroup("Person", 1, 1);
+
+ Group group = this.columnGroupHeaderLayer.getGroupByPosition(1);
+
+ Properties properties = new Properties();
+ properties.put("test" +
+ ColumnHideShowLayer.PERSISTENCE_KEY_HIDDEN_COLUMN_INDEXES, "1");
+ this.columnGroupHeaderLayer.getPositionLayer().loadState("test", properties);
+
+ // state after refresh without details via loadState
+ assertEquals(-1, group.getStartIndex());
+ assertEquals(-1, group.getVisibleStartIndex());
+ assertEquals(-1, group.getVisibleStartPosition());
+ assertEquals(1, group.getOriginalSpan());
+ assertEquals(0, group.getVisibleSpan());
+
+ // show all again
+ this.gridLayer.doCommand(new ShowAllColumnsCommand());
+
+ assertEquals(1, group.getStartIndex());
+ assertEquals(1, group.getVisibleStartIndex());
+ assertEquals(1, group.getVisibleStartPosition());
+ assertEquals(1, group.getOriginalSpan());
+ assertEquals(1, group.getVisibleSpan());
+ }
}
diff --git a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/group/performance/RowGroupHeaderLayerTest.java b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/group/performance/RowGroupHeaderLayerTest.java
index dfb3ae3..ee9db65 100644
--- a/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/group/performance/RowGroupHeaderLayerTest.java
+++ b/org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/group/performance/RowGroupHeaderLayerTest.java
@@ -12317,4 +12317,34 @@
assertEquals(3, group1.getOriginalSpan());
assertEquals(3, group1.getVisibleSpan());
}
+
+ @Test
+ public void shouldShowGroupHiddenByLoadState() {
+ this.rowGroupHeaderLayer.removeGroup(0);
+
+ this.rowGroupHeaderLayer.addGroup("Person", 1, 1);
+
+ Group group = this.rowGroupHeaderLayer.getGroupByPosition(1);
+
+ Properties properties = new Properties();
+ properties.put("test" +
+ RowHideShowLayer.PERSISTENCE_KEY_HIDDEN_ROW_INDEXES, "1");
+ this.rowGroupHeaderLayer.getPositionLayer().loadState("test", properties);
+
+ // state after refresh without details via loadState
+ assertEquals(-1, group.getStartIndex());
+ assertEquals(-1, group.getVisibleStartIndex());
+ assertEquals(-1, group.getVisibleStartPosition());
+ assertEquals(1, group.getOriginalSpan());
+ assertEquals(0, group.getVisibleSpan());
+
+ // show all again
+ this.gridLayer.doCommand(new ShowAllRowsCommand());
+
+ assertEquals(1, group.getStartIndex());
+ assertEquals(1, group.getVisibleStartIndex());
+ assertEquals(1, group.getVisibleStartPosition());
+ assertEquals(1, group.getOriginalSpan());
+ assertEquals(1, group.getVisibleSpan());
+ }
}
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/group/performance/GroupModel.java b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/group/performance/GroupModel.java
index d7a5ee2..7ef63ac 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/group/performance/GroupModel.java
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/group/performance/GroupModel.java
@@ -1171,7 +1171,7 @@
}
this.visibleStartPosition = getPositionByIndex(this.visibleStartIndex);
- if (this.visibleStartPosition == -1 && this.visibleSpan > 0) {
+ if (this.visibleStartPosition == -1) {
// if a multi hide command was triggered for non-contiguous
// column ranges, where one range is at the end, the group could
// be in an inconsistent state which needs to be corrected.
@@ -1209,7 +1209,8 @@
setVisibleSpan(this.originalSpan - hidden);
int smallestIndex = getIndexByPosition(smallestPosition);
- if (updateStartIndex) {
+ if (updateStartIndex
+ || (this.startIndex < 0 && smallestIndex >= 0)) {
setStartIndex(smallestIndex);
}
setVisibleStartIndex(smallestIndex);