File: /Users/shatabdi/Education/GitHub/se450_project/src/model/commands/ShapeMoveCommand.java

1     package model.commands;
2     
3     import java.awt.Point;
4     import java.awt.geom.AffineTransform;
5     
6     import controller.interfaces.ICommand;
7     import controller.interfaces.IUndoable;
8     import model.interfaces.IObserver;
9     import model.interfaces.IShape;
10     import model.others.CommandHandler;
11     import view.interfaces.PaintCanvasBase;
12     
13     public class ShapeMoveCommand implements ICommand, IUndoable {
14     	CommandHandler commandHandler;
15     	private Point ptEnd = new Point();
16     	private Point ptStart;
17     	private Point transformOffset;
18     
19     	public ShapeMoveCommand(Point startPoint, Point transformOffset, PaintCanvasBase canvasBase,
20     			CommandHandler commandHandler) {
21     		canvasBase.getGraphics2D();
22     		this.transformOffset = transformOffset;
23     		this.ptStart = startPoint;
24     
25     		this.commandHandler = commandHandler;
26     		commandHandler.registerObserver((IObserver) canvasBase);
27     	}
28     
29     	public void move() {
30     		translate(transformOffset.x, transformOffset.y);
31     	}
32     
33     	@Override
34     	public void redo() {
35     		int translateXX = ptEnd.x - ptStart.x;
36     		int translateYY = ptEnd.y - ptStart.y;
37     		translate(translateXX, translateYY);
38     	}
39     
40     	@Override
41     	public void run() {
42     		boolean result = !CommandHistory.shapesSelected.getList().isEmpty();
43     		if (result) {
44     			translate(transformOffset.x, transformOffset.y);
45     			CommandHistory.add(this);
46     		}
47     	}
48     
49     	public void setEndPoint(Point endPoint) {
50     		this.ptEnd = endPoint;
51     	}
52     
53     	public void translate(int x, int y) {
54     		AffineTransform transform = new AffineTransform();
55     		transform.translate(x, y);
56     		for (IShape shape : CommandHistory.shapesSelected.getList()) {
57     			shape.moveShape(x, y);
58     		}
59     		commandHandler.notifyObservers();
60     	}
61     
62     	@Override
63     	public void undo() {
64     		int offsetXX = ptStart.x - ptEnd.x;
65     		int offsetYY = ptStart.y - ptEnd.y;
66     
67     		translate(offsetXX, offsetYY);
68     	}
69     }
70