/******************************************************************************* * Copyright (c) 2012, 2013, 2014 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: * Original authors and others - initial API and implementation * Dirk Fauth - added ITraversalStrategy handling ******************************************************************************/ package org.eclipse.nebula.widgets.nattable.selection; /** * Preserves the basic semantics of the cell selection. Additionally it selects * the entire row when a cell in the row is selected. */ public class MoveRowSelectionCommandHandler extends MoveCellSelectionCommandHandler { /** * Create a MoveRowSelectionCommandHandler for the given * {@link SelectionLayer}. Uses the * {@link ITraversalStrategy#AXIS_TRAVERSAL_STRATEGY} as default strategy * for selection movement. * * @param selectionLayer * The {@link SelectionLayer} on which the selection should be * performed. */ public MoveRowSelectionCommandHandler(SelectionLayer selectionLayer) { super(selectionLayer); } /** * Create a MoveRowSelectionCommandHandler for the given * {@link SelectionLayer}. * * @param selectionLayer * The {@link SelectionLayer} on which the selection should be * performed. * @param traversalStrategy * The strategy that should be used for selection movements. Can * not be <code>null</code>. */ public MoveRowSelectionCommandHandler(SelectionLayer selectionLayer, ITraversalStrategy traversalStrategy) { super(selectionLayer, traversalStrategy); } /** * Create a MoveRowSelectionCommandHandler for the given * {@link SelectionLayer} . * * @param selectionLayer * The {@link SelectionLayer} on which the selection should be * performed. * @param horizontalTraversalStrategy * The strategy that should be used for horizontal selection * movements. Can not be <code>null</code>. * @param verticalTraversalStrategy * The strategy that should be used for vertical selection * movements. Can not be <code>null</code>. */ public MoveRowSelectionCommandHandler(SelectionLayer selectionLayer, ITraversalStrategy horizontalTraversalStrategy, ITraversalStrategy verticalTraversalStrategy) { super(selectionLayer, horizontalTraversalStrategy, verticalTraversalStrategy); } @Override protected void moveLastSelectedLeft(ITraversalStrategy traversalStrategy, boolean withShiftMask, boolean withControlMask) { super.moveLastSelectedLeft(traversalStrategy, withShiftMask, withControlMask); if (this.lastSelectedCellPosition != null) { this.selectionLayer.selectRow( this.lastSelectedCellPosition.columnPosition, this.lastSelectedCellPosition.rowPosition, withShiftMask, withControlMask); } } @Override protected void moveLastSelectedRight(ITraversalStrategy traversalStrategy, boolean withShiftMask, boolean withControlMask) { super.moveLastSelectedRight(traversalStrategy, withShiftMask, withControlMask); if (this.lastSelectedCellPosition != null) { this.selectionLayer.selectRow( this.lastSelectedCellPosition.columnPosition, this.lastSelectedCellPosition.rowPosition, withShiftMask, withControlMask); } } @Override protected void moveLastSelectedUp(ITraversalStrategy traversalStrategy, boolean withShiftMask, boolean withControlMask) { if (this.selectionLayer.hasRowSelection()) { super.moveLastSelectedUp(traversalStrategy, withShiftMask, withControlMask); if (this.lastSelectedCellPosition != null) { this.selectionLayer.selectRow( this.lastSelectedCellPosition.columnPosition, this.lastSelectedCellPosition.rowPosition, withShiftMask, withControlMask); } } } @Override protected void moveLastSelectedDown(ITraversalStrategy traversalStrategy, boolean withShiftMask, boolean withControlMask) { if (this.selectionLayer.hasRowSelection()) { super.moveLastSelectedDown(traversalStrategy, withShiftMask, withControlMask); if (this.lastSelectedCellPosition != null) { this.selectionLayer.selectRow( this.lastSelectedCellPosition.columnPosition, this.lastSelectedCellPosition.rowPosition, withShiftMask, withControlMask); } } } }