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