Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDirk Fauth2023-02-08 19:32:05 +0000
committerDirk Fauth2023-02-08 19:32:05 +0000
commit204f43aeeafc0218f5f2623577dcf3d602b1feb6 (patch)
tree09c513a51dea239cecd90b13307f491786da7e61
parentf0dedb4add30dcfd29931b876bd42ebe35f1de38 (diff)
downloadorg.eclipse.nebula.widgets.nattable-204f43aeeafc0218f5f2623577dcf3d602b1feb6.tar.gz
org.eclipse.nebula.widgets.nattable-204f43aeeafc0218f5f2623577dcf3d602b1feb6.tar.xz
org.eclipse.nebula.widgets.nattable-204f43aeeafc0218f5f2623577dcf3d602b1feb6.zip
Bug 581506 - Incorrect groups after loadState()
Signed-off-by: Dirk Fauth <dirk.fauth@googlemail.com> Change-Id: I14df0ff9e7bd3a77e40dab96782b6f11cd2c1406
-rw-r--r--org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/group/performance/ColumnGroupHeaderLayerTest.java61
-rw-r--r--org.eclipse.nebula.widgets.nattable.core.test/src/org/eclipse/nebula/widgets/nattable/group/performance/RowGroupHeaderLayerTest.java61
-rw-r--r--org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/layer/CompositeLayer.java6
-rw-r--r--org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_800_Integration/_818_SortableAllFilterPerformanceColumnGroupExample.java31
-rw-r--r--org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/filterrow/ComboBoxFilterRowHeaderCompositeIntegrationTest.java2
5 files changed, 157 insertions, 4 deletions
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 bdacd671..f457362e 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
@@ -14108,4 +14108,65 @@ public class ColumnGroupHeaderLayerTest {
assertEquals(3, group4.getOriginalSpan());
assertEquals(3, group4.getVisibleSpan());
}
+
+ @Test
+ public void shouldLoadStateWithReorderedColumns() {
+ verifyCleanState();
+
+ Properties properties = new Properties();
+ this.gridLayer.saveState("clean", properties);
+
+ // remove all groups
+ this.gridLayer.doCommand(new RemoveColumnGroupCommand(0));
+ this.gridLayer.doCommand(new RemoveColumnGroupCommand(4));
+ this.gridLayer.doCommand(new RemoveColumnGroupCommand(8));
+ this.gridLayer.doCommand(new RemoveColumnGroupCommand(11));
+
+ assertEquals(0, this.columnGroupHeaderLayer.getGroupModel().getGroups().size());
+
+ // reorder
+ this.gridLayer.doCommand(new ColumnReorderCommand(this.selectionLayer, 2, 1));
+
+ assertEquals(2, this.selectionLayer.getColumnIndexByPosition(1));
+
+ // create column group
+ this.selectionLayer.selectColumn(2, 0, true, true);
+ this.selectionLayer.selectColumn(3, 0, true, true);
+ this.gridLayer.doCommand(new CreateColumnGroupCommand("Test"));
+
+ Group group = this.columnGroupHeaderLayer.getGroupByPosition(2);
+ assertNotNull(group);
+ assertEquals("Test", group.getName());
+ assertFalse(group.isCollapsed());
+ assertEquals(1, group.getStartIndex());
+ assertEquals(1, group.getVisibleStartIndex());
+ assertEquals(2, group.getVisibleStartPosition());
+ assertEquals(2, group.getOriginalSpan());
+ assertEquals(2, group.getVisibleSpan());
+
+ this.gridLayer.saveState("one", properties);
+
+ // restore the clean state again
+ this.gridLayer.loadState("clean", properties);
+
+ verifyCleanState();
+
+ // load single collapsed
+ this.gridLayer.loadState("one", properties);
+
+ group = this.columnGroupHeaderLayer.getGroupByPosition(2);
+ assertNotNull(group);
+ assertEquals("Test", group.getName());
+ assertFalse(group.isCollapsed());
+ assertEquals(1, group.getStartIndex());
+ assertEquals(1, group.getVisibleStartIndex());
+ assertEquals(2, group.getVisibleStartPosition());
+ assertEquals(2, group.getOriginalSpan());
+ assertEquals(2, group.getVisibleSpan());
+
+ // restore the clean state again
+ this.gridLayer.loadState("clean", properties);
+
+ verifyCleanState();
+ }
}
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 8cbd278a..7e308983 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
@@ -14087,4 +14087,65 @@ public class RowGroupHeaderLayerTest {
assertEquals(3, group4.getVisibleSpan());
}
+ @Test
+ public void shouldLoadStateWithReorderedRows() {
+ verifyCleanState();
+
+ Properties properties = new Properties();
+ this.gridLayer.saveState("clean", properties);
+
+ // remove all groups
+ this.gridLayer.doCommand(new RemoveRowGroupCommand(0));
+ this.gridLayer.doCommand(new RemoveRowGroupCommand(4));
+ this.gridLayer.doCommand(new RemoveRowGroupCommand(8));
+ this.gridLayer.doCommand(new RemoveRowGroupCommand(11));
+
+ assertEquals(0, this.rowGroupHeaderLayer.getGroupModel().getGroups().size());
+
+ // reorder
+ this.gridLayer.doCommand(new RowReorderCommand(this.selectionLayer, 2, 1));
+
+ assertEquals(2, this.selectionLayer.getRowIndexByPosition(1));
+
+ // create row group
+ this.selectionLayer.selectRow(0, 2, true, true);
+ this.selectionLayer.selectRow(0, 3, true, true);
+ this.gridLayer.doCommand(new CreateRowGroupCommand("Test"));
+
+ Group group = this.rowGroupHeaderLayer.getGroupByPosition(2);
+ assertNotNull(group);
+ assertEquals("Test", group.getName());
+ assertFalse(group.isCollapsed());
+ assertEquals(1, group.getStartIndex());
+ assertEquals(1, group.getVisibleStartIndex());
+ assertEquals(2, group.getVisibleStartPosition());
+ assertEquals(2, group.getOriginalSpan());
+ assertEquals(2, group.getVisibleSpan());
+
+ this.gridLayer.saveState("one", properties);
+
+ // restore the clean state again
+ this.gridLayer.loadState("clean", properties);
+
+ verifyCleanState();
+
+ // load single collapsed
+ this.gridLayer.loadState("one", properties);
+
+ group = this.rowGroupHeaderLayer.getGroupByPosition(2);
+ assertNotNull(group);
+ assertEquals("Test", group.getName());
+ assertFalse(group.isCollapsed());
+ assertEquals(1, group.getStartIndex());
+ assertEquals(1, group.getVisibleStartIndex());
+ assertEquals(2, group.getVisibleStartPosition());
+ assertEquals(2, group.getOriginalSpan());
+ assertEquals(2, group.getVisibleSpan());
+
+ // restore the clean state again
+ this.gridLayer.loadState("clean", properties);
+
+ verifyCleanState();
+ }
+
}
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/layer/CompositeLayer.java b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/layer/CompositeLayer.java
index 265f1237..e09f29ea 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/layer/CompositeLayer.java
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/layer/CompositeLayer.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2012, 2020 Original authors and others.
+ * Copyright (c) 2012, 2023 Original authors and others.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
@@ -100,8 +100,8 @@ public class CompositeLayer extends AbstractLayer {
@Override
public void loadState(String prefix, Properties properties) {
- for (int layoutX = 0; layoutX < this.layoutXCount; layoutX++) {
- for (int layoutY = 0; layoutY < this.layoutYCount; layoutY++) {
+ for (int layoutX = this.layoutXCount - 1; layoutX >= 0; layoutX--) {
+ for (int layoutY = this.layoutYCount - 1; layoutY >= 0; layoutY--) {
ILayer childLayer = this.childLayerLayout[layoutX][layoutY];
if (childLayer != null) {
String regionName = this.childLayerToRegionNameMap.get(childLayer);
diff --git a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_800_Integration/_818_SortableAllFilterPerformanceColumnGroupExample.java b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_800_Integration/_818_SortableAllFilterPerformanceColumnGroupExample.java
index 45183592..0879dd43 100644
--- a/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_800_Integration/_818_SortableAllFilterPerformanceColumnGroupExample.java
+++ b/org.eclipse.nebula.widgets.nattable.examples/src/org/eclipse/nebula/widgets/nattable/examples/_800_Integration/_818_SortableAllFilterPerformanceColumnGroupExample.java
@@ -402,6 +402,37 @@ public class _818_SortableAllFilterPerformanceColumnGroupExample extends Abstrac
.withStateManagerMenuItemProvider()
.withClearAllFilters();
}
+
+ @Override
+ protected PopupMenuBuilder createColumnHeaderMenu(NatTable natTable) {
+ return new PopupMenuBuilder(natTable)
+ .withHideColumnMenuItem()
+ .withShowAllColumnsMenuItem()
+ .withCreateColumnGroupMenuItem()
+ .withUngroupColumnsMenuItem()
+ .withAutoResizeSelectedColumnsMenuItem()
+ .withColumnStyleEditor()
+ .withColumnRenameDialog()
+ .withClearAllFilters();
+ }
+ });
+
+ // Column group header menu
+ final Menu columnGroupHeaderMenu = new PopupMenuBuilder(natTable)
+ .withRenameColumnGroupMenuItem()
+ .withRemoveColumnGroupMenuItem()
+ .build();
+
+ natTable.addConfiguration(new AbstractUiBindingConfiguration() {
+ @Override
+ public void configureUiBindings(UiBindingRegistry uiBindingRegistry) {
+ uiBindingRegistry.registerFirstMouseDownBinding(
+ new MouseEventMatcher(
+ SWT.NONE,
+ GridRegion.COLUMN_GROUP_HEADER,
+ MouseEventMatcher.RIGHT_BUTTON),
+ new PopupMenuAction(columnGroupHeaderMenu));
+ }
});
// body menu configuration
diff --git a/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/filterrow/ComboBoxFilterRowHeaderCompositeIntegrationTest.java b/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/filterrow/ComboBoxFilterRowHeaderCompositeIntegrationTest.java
index 1a080352..1053ab08 100644
--- a/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/filterrow/ComboBoxFilterRowHeaderCompositeIntegrationTest.java
+++ b/org.eclipse.nebula.widgets.nattable.extension.glazedlists.test/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/filterrow/ComboBoxFilterRowHeaderCompositeIntegrationTest.java
@@ -437,7 +437,7 @@ public class ComboBoxFilterRowHeaderCompositeIntegrationTest {
listener.setCountDown(countDown);
// start = System.currentTimeMillis();
- completed = countDown.await(5000, TimeUnit.MILLISECONDS);
+ completed = countDown.await(10000, TimeUnit.MILLISECONDS);
// end = System.currentTimeMillis();
// System.out.println("duration " + (end - start));

Back to the top