File: /Users/shatabdi/Education/GitHub/se450_project/src/controller/JPaintController.java

1     //borrowed from project starter code
2     package controller;
3     
4     import model.commands.ShapeCopyCommand;
5     import model.commands.ShapeRemoveCommand;
6     import model.commands.ShapeGroupCommand;
7     import model.commands.ShapePasteCommand;
8     import model.commands.ShapeRedoCommand;
9     import model.commands.ShapeUndoCommand;
10     import model.commands.ShapeUngroupCommand;
11     import model.interfaces.IApplicationState;
12     import model.others.CommandHandler;
13     import model.shape.GroupShape;
14     import view.Enum.EventName;
15     import view.interfaces.IUiModule;
16     import view.interfaces.PaintCanvasBase;
17     
18     public class JPaintController implements IJPaintController {
19     	private final IApplicationState applicationState;
20     	private PaintCanvasBase canvasBase;
21     
22     	CommandHandler commandHandler;
23     	private final IUiModule uiModule;
24     
25     	public JPaintController(IUiModule uiModule, IApplicationState applicationState, PaintCanvasBase canvasBase,
26     			CommandHandler commandHandler) {
27     		this.uiModule = uiModule;
28     		this.canvasBase = canvasBase;
29     		this.applicationState = applicationState;
30     		this.commandHandler = commandHandler;
31     	}
32     
33     	public void copy() {
34     
35     		ShapeCopyCommand shapeCopyCommand = new ShapeCopyCommand(canvasBase);
36     		shapeCopyCommand.run();
37     	}
38     
39     	public void delete() {
40     
41     		ShapeRemoveCommand shapeRemoveCommand = new ShapeRemoveCommand(canvasBase);
42     		shapeRemoveCommand.run();
43     	}
44     
45     	private void group() {
46     		ShapeGroupCommand shapeGroupCommand = new ShapeGroupCommand(new GroupShape(canvasBase));
47     		shapeGroupCommand.run();
48     	}
49     
50     	public void paste() {
51     
52     		ShapePasteCommand shapePasteCommand = new ShapePasteCommand(canvasBase);
53     		shapePasteCommand.run();
54     	}
55     
56     	public void redo() {
57     
58     		ShapeRedoCommand shapeRedoCommand = new ShapeRedoCommand(commandHandler);
59     		shapeRedoCommand.run();
60     	}
61     
62     	@Override
63     	public void setup() {
64     		setupEvents();
65     	}
66     
67     	private void setupEvents() {
68     		uiModule.addEvent(EventName.UNDO, () -> undo());
69     		uiModule.addEvent(EventName.REDO, () -> redo());
70     		uiModule.addEvent(EventName.COPY, () -> copy());
71     		uiModule.addEvent(EventName.PASTE, () -> paste());
72     		uiModule.addEvent(EventName.DELETE, () -> delete());
73     		uiModule.addEvent(EventName.GROUP, () -> group());
74     		uiModule.addEvent(EventName.UNGROUP, () -> ungroup());
75     		uiModule.addEvent(EventName.CHOOSE_SHAPE, () -> applicationState.setActiveShape());
76     		uiModule.addEvent(EventName.CHOOSE_PRIMARY_COLOR, () -> applicationState.setActivePrimaryColor());
77     		uiModule.addEvent(EventName.CHOOSE_SECONDARY_COLOR, () -> applicationState.setActiveSecondaryColor());
78     		uiModule.addEvent(EventName.CHOOSE_SHADING_TYPE, () -> applicationState.setActiveShadingType());
79     		uiModule.addEvent(EventName.CHOOSE_MOUSE_MODE, () -> applicationState.setActiveMouseMode());
80     	}
81     
82     	public void undo() {
83     
84     		ShapeUndoCommand shapeUndoCommand = new ShapeUndoCommand(commandHandler);
85     		shapeUndoCommand.run();
86     	}
87     
88     	private void ungroup() {
89     		ShapeUngroupCommand shapeUngroupCommand = new ShapeUngroupCommand(canvasBase);
90     		shapeUngroupCommand.run();
91     	}
92     }
93