Skip to content

Commit 4fa00f8

Browse files
committed
Simple Modifications
1 parent e9be45f commit 4fa00f8

File tree

7 files changed

+101
-22
lines changed

7 files changed

+101
-22
lines changed

src/paintcomponents/SimplePoint.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ public SimplePoint(int x, int y, int radius, Color color, Color selectedColor) {
2525
this.selectedColor = selectedColor;
2626
}
2727

28+
/**
29+
* Returns a deep copy of this object
30+
* @param p
31+
*/
2832
public SimplePoint(SimplePoint p) {
2933
this(p.getX(), p.getY(), p.radius, p.color, p.selectedColor);
3034
}

src/painttools/toolbar/ToolBar.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import painttools.tools.DotTool;
1717
import painttools.tools.PaintTool;
1818
import painttools.tools.SelectTool;
19+
import ui.PaintPanel;
1920

2021
public class ToolBar extends JPanel {
2122

@@ -25,13 +26,13 @@ public class ToolBar extends JPanel {
2526
/**
2627
* Creates a default toolbar and add necessary tools
2728
*/
28-
public ToolBar() {
29+
public ToolBar(PaintPanel panel) {
2930
listeners = new ArrayList<>();
3031

3132
//sets the box layout
3233
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
3334

34-
selectTool = new SelectTool();
35+
selectTool = new SelectTool(panel);
3536
addTool(new DotTool());
3637
addTool(selectTool);
3738
}

src/painttools/tools/DotTool.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import paintcomponents.SimplePoint;
1111
import ui.PaintPanel;
1212

13-
public class DotTool extends PaintTool<SimplePoint> {
13+
public class DotTool extends PaintTool {
1414

1515
SimplePoint p;
1616
private PaintPanel panel;
@@ -54,7 +54,14 @@ public int getIconHeight() {
5454

5555
@Override
5656
public void mouseClicked(MouseEvent e) {
57-
panel.addPaintComponent(new SimplePoint(p));
57+
58+
SimplePoint pointToAdd = new SimplePoint(p);
59+
60+
//change selection to be only the added point
61+
panel.getSelectTool().clearSelection();
62+
panel.getSelectTool().selectComponent(pointToAdd);
63+
64+
panel.addPaintComponent(pointToAdd);
5865
}
5966

6067
@Override
@@ -89,12 +96,21 @@ public void mouseDragged(MouseEvent e) {
8996

9097
@Override
9198
public void mouseMoved(MouseEvent e) {
92-
// TODO Auto-generated method stub
9399
p.setX(e.getX());
94100
p.setY(e.getY());
95101
panel.repaint();
96102
}
97103

104+
105+
106+
@Override
107+
public void reset() {
108+
//do nothing on reset
109+
//temporary component will automatically be removed
110+
111+
112+
}
113+
98114

99115

100116
}

src/painttools/tools/PaintTool.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,20 @@
1010
import paintcomponents.PaintComponent;
1111
import ui.PaintPanel;
1212

13-
public abstract class PaintTool<T extends PaintComponent> implements MouseListener, MouseMotionListener {
13+
public abstract class PaintTool implements MouseListener, MouseMotionListener {
1414

1515

1616
/**
1717
* Set the start condition of this paint tool
1818
*/
1919
public abstract void start(PaintPanel panel);
2020

21+
/**
22+
* Resets all the pending states, called when a new tool is selected
23+
* or when esc is pressed.
24+
*/
25+
public abstract void reset();
26+
2127

2228
public JButton getButton() {
2329
return new JButton(this.getClass().getName());

src/painttools/tools/SelectTool.java

Lines changed: 66 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -37,33 +37,77 @@ public ArrayList<PaintComponent> getSelectedComponents() {
3737
return selectedComponents;
3838
}
3939

40-
public SelectTool() {
40+
public SelectTool(PaintPanel panel) {
4141
selectedComponents = new ArrayList<>();
4242
listeners = new ArrayList<>();
43+
this.panel = panel;
4344
}
4445

4546
@Override
4647
public void mouseClicked(MouseEvent e) {
47-
//select or deselect component under cursor on mouse clicked
48+
// select or deselect component under cursor on mouse clicked
4849

4950
PaintComponent comp = panel.componentUnderPoint(e.getX(), e.getY());
5051
if (comp != null) {
5152
if (comp.isSelected()) {
52-
comp.deselect();
53-
selectedComponents.remove(comp);
53+
deselectComponent(comp);
5454
} else {
55-
comp.select();
56-
selectedComponents.add(comp);
57-
}
58-
for (SelectionToolListener selectionToolListener : listeners) {
59-
selectionToolListener.selectionChanged();
55+
selectComponent(comp);
6056
}
61-
panel.repaint();
6257

6358
}
6459

6560
}
6661

62+
/**
63+
* Selects a component, changes selection
64+
* All listeners are informed.
65+
* Panel are repainted
66+
* @param comp
67+
*/
68+
public void selectComponent(PaintComponent comp) {
69+
comp.select();
70+
selectedComponents.add(comp);
71+
for (SelectionToolListener selectionToolListener : listeners) {
72+
selectionToolListener.selectionChanged();
73+
}
74+
panel.repaint();
75+
}
76+
77+
/**
78+
* Deselect a component, changes selection
79+
* All listeners are informed.
80+
* Panel are repainted
81+
* @param comp
82+
*/
83+
public void deselectComponent(PaintComponent comp){
84+
comp.deselect();
85+
selectedComponents.remove(comp);
86+
for (SelectionToolListener selectionToolListener : listeners) {
87+
selectionToolListener.selectionChanged();
88+
}
89+
panel.repaint();
90+
91+
}
92+
93+
/**
94+
* Deselect ALL components, changes selection
95+
* All listeners are informed.
96+
* Panel are repainted
97+
*/
98+
public void clearSelection(){
99+
// remove all selection
100+
for (PaintComponent component : selectedComponents) {
101+
component.deselect();
102+
}
103+
selectedComponents.clear();
104+
105+
for (SelectionToolListener selectionToolListener : listeners) {
106+
selectionToolListener.selectionChanged();
107+
}
108+
panel.repaint();
109+
}
110+
67111
@Override
68112
public void mousePressed(MouseEvent e) {
69113
// TODO Auto-generated method stub
@@ -96,7 +140,7 @@ public void mouseDragged(MouseEvent e) {
96140

97141
@Override
98142
public void mouseMoved(MouseEvent e) {
99-
//shows a left arrow if cursor hits something
143+
// shows a left arrow if cursor hits something
100144
PaintComponent comp = panel.componentUnderPoint(e.getX(), e.getY());
101145
if (comp != null) {
102146

@@ -107,14 +151,14 @@ public void mouseMoved(MouseEvent e) {
107151
Defaults.sharedDefaults().defaultColorForSelectToolIcon());
108152
arrow.setX(e.getX());
109153
arrow.setY(e.getY());
110-
111-
//add arrow by setting the temp component
154+
155+
// add arrow by setting the temp component
112156
panel.setTempComponent(arrow);
113-
157+
114158
panel.repaint();
115159

116160
} else {
117-
//remove arrow
161+
// remove arrow
118162
panel.setTempComponent(null);
119163
panel.showCursor();
120164
panel.repaint();
@@ -136,4 +180,11 @@ public JButton getButton() {
136180
return button;
137181
}
138182

183+
@Override
184+
public void reset() {
185+
186+
clearSelection();
187+
188+
}
189+
139190
}

src/ui/MainFrame.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ public class MainFrame extends JFrame{
1414
public MainFrame(){
1515

1616
//set up toolbar and main panel
17-
ToolBar toolBar = new ToolBar();
1817
PaintPanel paintPanel = new PaintPanel();
18+
ToolBar toolBar = new ToolBar(paintPanel);
1919

2020
//link select tool
2121
paintPanel.setSelectTool(toolBar.getSelectTool());

src/ui/PaintPanel.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ private void resetTool() {
6969
this.tempComponent = null;
7070
this.removeMouseListener(this.tool);
7171
this.removeMouseMotionListener(this.tool);
72+
this.tool.reset();
7273
this.tool = null;
7374
showCursor();
7475
this.state = State.DEFAULT;

0 commit comments

Comments
 (0)