@@ -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}
0 commit comments