Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDirk Fauth2022-11-02 07:57:45 +0000
committerDirk Fauth2022-11-02 07:57:45 +0000
commit687b1ddb67f9e7067f43c8ede2088e5302a158a9 (patch)
tree8fab5349fa50a73cc099e0e6e3a095c899d5e187
parent9455fb8fea92055d2deadb29aa974d38a9756422 (diff)
downloadorg.eclipse.nebula.widgets.nattable-687b1ddb67f9e7067f43c8ede2088e5302a158a9.tar.gz
org.eclipse.nebula.widgets.nattable-687b1ddb67f9e7067f43c8ede2088e5302a158a9.tar.xz
org.eclipse.nebula.widgets.nattable-687b1ddb67f9e7067f43c8ede2088e5302a158a9.zip
Bug 580973 - Column groups can not be reordered with GroupBy
Signed-off-by: Dirk Fauth <dirk.fauth@googlemail.com> Change-Id: I91500a841d8ee39016e371f7d19803dcb4a424cc
-rw-r--r--org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/group/performance/config/DefaultColumnGroupHeaderLayerConfiguration.java2
-rw-r--r--org.eclipse.nebula.widgets.nattable.extension.glazedlists/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/groupBy/GroupByHeaderConfiguration.java32
2 files changed, 32 insertions, 2 deletions
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/group/performance/config/DefaultColumnGroupHeaderLayerConfiguration.java b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/group/performance/config/DefaultColumnGroupHeaderLayerConfiguration.java
index 42a237c0..6ba3baef 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/group/performance/config/DefaultColumnGroupHeaderLayerConfiguration.java
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/group/performance/config/DefaultColumnGroupHeaderLayerConfiguration.java
@@ -113,7 +113,7 @@ public class DefaultColumnGroupHeaderLayerConfiguration extends AbstractLayerCon
@Override
public void configureUiBindings(UiBindingRegistry uiBindingRegistry) {
- // Column Group Header is a part of the Group Header.
+ // Column Group Header is a part of the Column Header region.
// Register the 'column group header matcher' first so that it gets
// picked up before the more general 'column header matcher'.
uiBindingRegistry.registerMouseDragMode(
diff --git a/org.eclipse.nebula.widgets.nattable.extension.glazedlists/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/groupBy/GroupByHeaderConfiguration.java b/org.eclipse.nebula.widgets.nattable.extension.glazedlists/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/groupBy/GroupByHeaderConfiguration.java
index 99f7c1d2..f9f7e2e9 100644
--- a/org.eclipse.nebula.widgets.nattable.extension.glazedlists/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/groupBy/GroupByHeaderConfiguration.java
+++ b/org.eclipse.nebula.widgets.nattable.extension.glazedlists/src/org/eclipse/nebula/widgets/nattable/extension/glazedlists/groupBy/GroupByHeaderConfiguration.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2012, 2020 Original authors and others.
+ * Copyright (c) 2012, 2022 Original authors and others.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
@@ -19,6 +19,9 @@ import org.eclipse.nebula.widgets.nattable.data.IDataProvider;
import org.eclipse.nebula.widgets.nattable.extension.glazedlists.groupBy.action.GroupByDragMode;
import org.eclipse.nebula.widgets.nattable.grid.layer.ColumnHeaderLayer;
import org.eclipse.nebula.widgets.nattable.group.performance.ColumnGroupHeaderLayer;
+import org.eclipse.nebula.widgets.nattable.group.performance.action.ColumnGroupHeaderReorderDragMode;
+import org.eclipse.nebula.widgets.nattable.layer.ILayer;
+import org.eclipse.nebula.widgets.nattable.layer.LabelStack;
import org.eclipse.nebula.widgets.nattable.style.DisplayMode;
import org.eclipse.nebula.widgets.nattable.ui.action.AggregateDragMode;
import org.eclipse.nebula.widgets.nattable.ui.action.CellDragMode;
@@ -111,6 +114,33 @@ public class GroupByHeaderConfiguration extends AbstractRegistryConfiguration {
new CellDragMode(),
new GroupByColumnGroupReorderDragMode(this.columnGroupHeaderLayer),
new GroupByDragMode()));
+
+ // Need to register the ColumnGroupHeaderReorderDragMode again at
+ // the first position in the registry. Necessary because the column
+ // group header is part of the column header region. To ensure the
+ // column group reorder handling is picked up first, it needs to be
+ // first in the list of registered DragModes.
+
+ // TODO Create class GroupByColumnGroupHeaderReorderDragMode
+ // we use anonymous overriding here to get this fixed in a bugfix
+ // release, but for consistency this should be a concrete class
+ uiBindingRegistry.registerFirstMouseDragMode(
+ MouseEventMatcher.columnGroupHeaderLeftClick(SWT.NONE),
+ new AggregateDragMode(new CellDragMode(),
+ new ColumnGroupHeaderReorderDragMode(this.columnGroupHeaderLayer) {
+
+ @Override
+ public boolean isValidTargetColumnPosition(ILayer natLayer, int dragFromGridColumnPosition, int dragToGridColumnPosition) {
+ // Suppress reorder if cursor is over the
+ // group by region
+ LabelStack regionLabels = natLayer.getRegionLabelsByXY(this.currentEvent.x, this.currentEvent.y);
+ if (regionLabels != null && !regionLabels.hasLabel(GroupByHeaderLayer.GROUP_BY_REGION)) {
+ return super.isValidTargetColumnPosition(natLayer, dragFromGridColumnPosition, dragToGridColumnPosition);
+ }
+ return false;
+ }
+
+ }));
}
}

Back to the top