blob: 4ab9e997d1786da2de2d013d3cca9e020ac5eba1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012, 2020 Original authors and others.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Original authors and others - initial API and implementation
* Dirk Fauth <dirk.fauth@googlemail.com> - added ITraversalStrategy handling
******************************************************************************/
package org.eclipse.nebula.widgets.nattable.selection.command;
import org.eclipse.nebula.widgets.nattable.selection.ITraversalStrategy;
import org.eclipse.nebula.widgets.nattable.selection.MoveSelectionCommandHandler;
import org.eclipse.nebula.widgets.nattable.selection.SelectionLayer.MoveDirectionEnum;
/**
* Command that is used to move a selection into a given direction.
* <p>
* Since 1.2.0 it can be created in several ways, to be able to customize the
* determination of the steps to move. The following lists the different ways
* and their effects:
* </p>
* <ol>
* <li><b>no steps, no strategy</b> <br>
* the {@link ITraversalStrategy} configured with the
* {@link MoveSelectionCommandHandler} is used and will be asked for the step
* count</li>
* <li><b>specify steps to move</b> <br>
* the {@link ITraversalStrategy} configured with the
* {@link MoveSelectionCommandHandler} is used but modified to return the given
* step count</li>
* <li><b>specify traversal strategy</b> <br>
* the given {@link ITraversalStrategy} is used and will be asked for the step
* count. The {@link ITraversalStrategy} configured with the
* {@link MoveSelectionCommandHandler} will be ignored.</li>
* </ol>
*/
public class MoveSelectionCommand extends AbstractSelectionCommand {
private final MoveDirectionEnum direction;
private final Integer stepSize;
private final ITraversalStrategy traversalStrategy;
/**
* Creates a {@link MoveSelectionCommand} that doesn't specify a step count
* nor an {@link ITraversalStrategy}. Using this constructor will lead to a
* selection movement that uses the {@link ITraversalStrategy} that is
* registered with the {@link MoveSelectionCommandHandler}.
*
* @param direction
* The direction to move to.
* @param shiftMask
* boolean flag to indicate whether the shift key modifier is
* enabled or not
* @param controlMask
* boolean flag to indicate whether the control key modifier is
* enabled or not
*/
public MoveSelectionCommand(MoveDirectionEnum direction, boolean shiftMask, boolean controlMask) {
this(direction, (ITraversalStrategy) null, shiftMask, controlMask);
}
/**
* Creates a {@link MoveSelectionCommand} that specifies the number of steps
* to move directly. Using this constructor will cause the usage of the
* registered {@link ITraversalStrategy} in the
* {@link MoveSelectionCommandHandler} while using the specified step size.
*
* @param direction
* The direction to move to.
* @param stepSize
* The number of steps to move in the given direction.
* @param shiftMask
* boolean flag to indicate whether the shift key modifier is
* enabled or not
* @param controlMask
* boolean flag to indicate whether the control key modifier is
* enabled or not
*/
public MoveSelectionCommand(MoveDirectionEnum direction, Integer stepSize,
boolean shiftMask, boolean controlMask) {
super(shiftMask, controlMask);
this.direction = direction;
this.stepSize = stepSize;
this.traversalStrategy = null;
}
/**
*
* @param direction
* The direction to move to.
* @param traversalStrategy
* the traversal strategy to determine the number of steps to
* move and the behavior on moving over the border
* @param shiftMask
* boolean flag to indicate whether the shift key modifier is
* enabled or not
* @param controlMask
* boolean flag to indicate whether the control key modifier is
* enabled or not
*/
public MoveSelectionCommand(MoveDirectionEnum direction, ITraversalStrategy traversalStrategy,
boolean shiftMask, boolean controlMask) {
super(shiftMask, controlMask);
this.direction = direction;
this.stepSize = null;
this.traversalStrategy = traversalStrategy;
}
/**
*
* @return The direction to move to.
*/
public MoveDirectionEnum getDirection() {
return this.direction;
}
/**
*
* @return The number of steps to move. Can be <code>null</code>.
*/
public Integer getStepSize() {
return this.stepSize;
}
/**
*
* @return The traversal strategy to use for moving.
*/
public ITraversalStrategy getTraversalStrategy() {
return this.traversalStrategy;
}
}