/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.gui.workflow.editor.commands;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.RequestConstants;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.requests.ChangeBoundsRequest;
import de.rcenvironment.core.component.workflow.model.api.WorkflowLabel;
/**
* Command to move a WorkflowLabel to a new location on the screen.
*
* @author Sascha Zur
*/
public class WorkflowLabelMoveCommand extends Command {
/** The workflow label. **/
private final WorkflowLabel label;
/** the request. **/
private final ChangeBoundsRequest request;
/** the new location. **/
private final Point newLocation;
/** saved old location. **/
private final Point oldLocation;
private final Dimension oldSize;
private final Dimension newSize;
private final boolean resize;
/**
* Constructor.
*
* @param label The workflow label.
* @param req The request.
* @param newBounds The rectangle with the new location.
*/
public WorkflowLabelMoveCommand(WorkflowLabel label, ChangeBoundsRequest req, Rectangle newBounds) {
this.label = label;
request = req;
resize = !req.getSizeDelta().equals(0, 0);
newLocation = newBounds.getLocation();
newSize = newBounds.getSize();
oldLocation = new Point(label.getX(), label.getY());
oldSize = new Dimension(label.getWidth(), label.getHeight());
}
@Override
public boolean canExecute() {
Object type = request.getType();
return (RequestConstants.REQ_MOVE.equals(type) || RequestConstants.REQ_MOVE_CHILDREN.equals(type)
|| RequestConstants.REQ_RESIZE.equals(type) || RequestConstants.REQ_RESIZE_CHILDREN.equals(type));
}
@Override
public void execute() {
redo();
}
@Override
public void redo() {
label.setSize(newSize.width, newSize.height);
label.setLocation(newLocation.x, newLocation.y);
label.firePropertyChange(WorkflowLabel.PROPERTY_CHANGE);
}
@Override
public void undo() {
label.setSize(oldSize.width, oldSize.height);
label.setLocation(oldLocation.x, oldLocation.y);
label.firePropertyChange(WorkflowLabel.PROPERTY_CHANGE);
}
}