Bug 460074 - corrected column reordering via drag&drop when using column
groups
Change-Id: I5d1425cffc907c4f4e842c4b03e74f585451a1d6
Signed-off-by: Dirk Fauth <dirk.fauth@googlemail.com>
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/group/ColumnGroupReorderLayer.java b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/group/ColumnGroupReorderLayer.java
index a3c3d84..c1ee026 100644
--- a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/group/ColumnGroupReorderLayer.java
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/group/ColumnGroupReorderLayer.java
@@ -7,7 +7,7 @@
*
* Contributors:
* Original authors and others - initial API and implementation
- * Dirk Fauth <dirk.fauth@googlemail.com> - Bug 460052
+ * Dirk Fauth <dirk.fauth@googlemail.com> - Bug 460052, 460074
******************************************************************************/
package org.eclipse.nebula.widgets.nattable.group;
@@ -20,6 +20,8 @@
import org.apache.commons.logging.LogFactory;
import org.eclipse.nebula.widgets.nattable.group.ColumnGroupModel.ColumnGroup;
import org.eclipse.nebula.widgets.nattable.group.command.GroupColumnReorderCommandHandler;
+import org.eclipse.nebula.widgets.nattable.group.command.GroupColumnReorderEndCommandHandler;
+import org.eclipse.nebula.widgets.nattable.group.command.GroupColumnReorderStartCommandHandler;
import org.eclipse.nebula.widgets.nattable.group.command.GroupMultiColumnReorderCommandHandler;
import org.eclipse.nebula.widgets.nattable.group.command.ReorderColumnGroupCommandHandler;
import org.eclipse.nebula.widgets.nattable.group.command.ReorderColumnGroupEndCommandHandler;
@@ -91,6 +93,8 @@
registerCommandHandler(new ReorderColumnsAndGroupsCommandHandler(this));
registerCommandHandler(new GroupColumnReorderCommandHandler(this));
registerCommandHandler(new GroupMultiColumnReorderCommandHandler(this));
+ registerCommandHandler(new GroupColumnReorderStartCommandHandler(this));
+ registerCommandHandler(new GroupColumnReorderEndCommandHandler(this));
}
// Horizontal features
@@ -314,7 +318,11 @@
}
}
else {
- this.model.removeColumnIndexes(fromColumnGroup.getName(), fromColumnIndexes);
+ // only remove if we are at the edge of a column group
+ if (ColumnGroupUtils.isLeftEdgeOfAColumnGroup(this, fromColumnPosition, fromColumnIndex, this.model)
+ || ColumnGroupUtils.isRightEdgeOfAColumnGroup(this, fromColumnPosition, fromColumnIndex, this.model)) {
+ this.model.removeColumnIndexes(fromColumnGroup.getName(), fromColumnIndexes);
+ }
}
consumeCommand = true;
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/group/command/GroupColumnReorderEndCommandHandler.java b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/group/command/GroupColumnReorderEndCommandHandler.java
new file mode 100644
index 0000000..ff60208
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/group/command/GroupColumnReorderEndCommandHandler.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Original authors and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Dirk Fauth <dirk.fauth@googlemail.com> - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.nebula.widgets.nattable.group.command;
+
+import org.eclipse.nebula.widgets.nattable.command.AbstractLayerCommandHandler;
+import org.eclipse.nebula.widgets.nattable.group.ColumnGroupReorderLayer;
+import org.eclipse.nebula.widgets.nattable.reorder.command.ColumnReorderEndCommand;
+
+public class GroupColumnReorderEndCommandHandler extends AbstractLayerCommandHandler<ColumnReorderEndCommand> {
+
+ private final ColumnGroupReorderLayer columnGroupReorderLayer;
+
+ public GroupColumnReorderEndCommandHandler(ColumnGroupReorderLayer columnReorderLayer) {
+ this.columnGroupReorderLayer = columnReorderLayer;
+ }
+
+ @Override
+ public Class<ColumnReorderEndCommand> getCommandClass() {
+ return ColumnReorderEndCommand.class;
+ }
+
+ @Override
+ protected boolean doCommand(ColumnReorderEndCommand command) {
+ int toColumnPosition = command.getToColumnPosition();
+ boolean reorderToLeftEdge = command.isReorderToLeftEdge();
+
+ this.columnGroupReorderLayer.updateColumnGroupModel(
+ this.columnGroupReorderLayer.getReorderFromColumnPosition(),
+ toColumnPosition, reorderToLeftEdge);
+
+ // we only update the ColumnGroupModel, the reordering is done in the
+ // ColumnReorderLayer
+ return false;
+ }
+
+}
diff --git a/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/group/command/GroupColumnReorderStartCommandHandler.java b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/group/command/GroupColumnReorderStartCommandHandler.java
new file mode 100644
index 0000000..e1e1278
--- /dev/null
+++ b/org.eclipse.nebula.widgets.nattable.core/src/org/eclipse/nebula/widgets/nattable/group/command/GroupColumnReorderStartCommandHandler.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Original authors and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Dirk Fauth <dirk.fauth@googlemail.com> - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.nebula.widgets.nattable.group.command;
+
+import org.eclipse.nebula.widgets.nattable.command.AbstractLayerCommandHandler;
+import org.eclipse.nebula.widgets.nattable.group.ColumnGroupReorderLayer;
+import org.eclipse.nebula.widgets.nattable.reorder.command.ColumnReorderStartCommand;
+
+public class GroupColumnReorderStartCommandHandler extends AbstractLayerCommandHandler<ColumnReorderStartCommand> {
+
+ private final ColumnGroupReorderLayer columnGroupReorderLayer;
+
+ public GroupColumnReorderStartCommandHandler(ColumnGroupReorderLayer columnReorderLayer) {
+ this.columnGroupReorderLayer = columnReorderLayer;
+ }
+
+ @Override
+ public Class<ColumnReorderStartCommand> getCommandClass() {
+ return ColumnReorderStartCommand.class;
+ }
+
+ @Override
+ protected boolean doCommand(ColumnReorderStartCommand command) {
+ int fromColumnPosition = command.getFromColumnPosition();
+
+ this.columnGroupReorderLayer.setReorderFromColumnPosition(fromColumnPosition);
+
+ // we need to remember the from position in order to update the
+ // ColumnGroupModel
+ // the command shouldn't get consumed here, since the reordering needs
+ // to take place in the ColumnReorderLayer
+ return false;
+ }
+
+}