diff options
| author | Dirk Fauth | 2022-11-02 07:57:45 +0000 |
|---|---|---|
| committer | Dirk Fauth | 2022-11-02 07:57:45 +0000 |
| commit | 687b1ddb67f9e7067f43c8ede2088e5302a158a9 (patch) | |
| tree | 8fab5349fa50a73cc099e0e6e3a095c899d5e187 | |
| parent | 9455fb8fea92055d2deadb29aa974d38a9756422 (diff) | |
| download | org.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
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; + } + + })); } } |
