1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package com.cosylab.gui.components.util;
21
22 import java.awt.Component;
23 import java.awt.Point;
24 import java.awt.event.MouseAdapter;
25 import java.awt.event.MouseEvent;
26
27 import javax.swing.Action;
28 import javax.swing.JComponent;
29 import javax.swing.JPopupMenu;
30 import javax.swing.SwingUtilities;
31
32
33
34
35
36
37
38
39
40 public class PopupManager {
41 private JComponent owner;
42 private ActionList list = new ActionList();
43 private JPopupMenu popup;
44 private boolean enabled=true;
45
46
47
48
49 public PopupManager(JComponent owner) {
50 super();
51 this.owner = owner;
52 }
53
54
55
56
57
58
59 public PopupManager(JComponent owner, boolean auto) {
60 super();
61 this.owner = owner;
62
63 if (auto) {
64 owner.addMouseListener(getMouseHook());
65 }
66 }
67
68
69
70
71
72
73
74
75 public JComponent getOwner() {
76 return owner;
77 }
78
79
80
81
82
83 public void addAction(Action a) {
84 list.addAction(a);
85 popup = null;
86 }
87
88
89
90
91 public void addActions(Action[] a) {
92 for (int i = 0; i < a.length; i++) {
93 list.addAction(a[i]);
94 }
95 popup = null;
96 }
97
98
99
100
101
102
103
104 public boolean containsAction(Action a) {
105 return list.contains(a);
106 }
107
108
109
110
111
112
113
114 public boolean containsActionForName(String name) {
115 return list.containsActionWithName(name);
116 }
117
118
119
120
121
122
123
124 public int firstIndexOf(Action a) {
125 return list.indexOf(a);
126 }
127
128
129
130
131
132
133
134 public int firstIndexOfName(String name) {
135 return list.firstIndexOfActionWithName(name);
136 }
137
138
139
140
141
142
143
144 public Action getAction(int index) {
145 return list.getAction(index);
146 }
147
148
149
150
151
152
153 public void removeAction(Action a) {
154 list.removeAction(a);
155 popup = null;
156 }
157
158
159
160
161
162
163
164 public Action removeAction(int index) {
165 popup = null;
166
167 return list.removeAction(index);
168 }
169
170
171
172
173
174
175 public void removeActions(Action[] a) {
176 popup = null;
177
178 for (int i = 0; i < a.length; i++) {
179 list.removeAction(a[i]);
180 }
181 }
182
183
184
185
186
187
188 public Action[] removeAllActions() {
189 popup = null;
190 Action[] a= list.toArray();
191 list.clear();
192 return a;
193 }
194
195
196
197
198
199
200 public int actionCount() {
201 return list.size();
202 }
203
204
205
206
207
208
209 public Action[] getActions() {
210 return list.toArray();
211 }
212
213
214
215
216
217 public JPopupMenu getJPopupMenu() {
218 if (popup == null) {
219 popup = Actions.createPopupMenu(list);
220 }
221
222 return popup;
223 }
224
225
226
227
228
229
230
231 public void showPopup(Component c, int x, int y) {
232 if (list.size() > 0) {
233 getJPopupMenu().show(c, x, y);
234 }
235 }
236
237
238
239
240
241
242 private MouseHook mouseHook;
243 public MouseHook getMouseHook() {
244 if (mouseHook == null) {
245 mouseHook = new MouseHook();
246 }
247
248 return mouseHook;
249 }
250
251 private class MouseHook extends MouseAdapter {
252 private Point lastPoint;
253 private Object source;
254
255
256
257
258 public void mousePressed(MouseEvent e) {
259 if (SwingUtilities.isRightMouseButton(e)) {
260 lastPoint = e.getPoint();
261 source = e.getSource();
262 } else {
263 source = null;
264 lastPoint = null;
265 }
266 }
267
268
269
270
271 public void mouseReleased(MouseEvent e) {
272 if (SwingUtilities.isRightMouseButton(e)) {
273 if ((e.getSource() == source) && (lastPoint != null)) {
274
275 if (enabled) showPopup(e.getComponent(), e.getPoint().x, e.getPoint().y);
276
277
278 }
279
280 lastPoint = null;
281 }
282 }
283 }
284
285
286
287
288 public boolean isEnabled() {
289 return enabled;
290 }
291
292
293
294
295
296 public void setEnabled(boolean b) {
297 enabled= b;
298 }
299 }