diff options
| author | Dirk Fauth | 2023-02-08 19:32:05 +0000 |
|---|---|---|
| committer | Dirk Fauth | 2023-02-08 19:32:05 +0000 |
| commit | 204f43aeeafc0218f5f2623577dcf3d602b1feb6 (patch) | |
| tree | 09c513a51dea239cecd90b13307f491786da7e61 | |
| parent | f0dedb4add30dcfd29931b876bd42ebe35f1de38 (diff) | |
| download | org.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
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)); |
