]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/events/EventDelegator.java
Sync git svn branch with SVN repository r33269.
[simantics/platform.git] / bundles / org.simantics.scenegraph / src / org / simantics / scenegraph / g2d / events / EventDelegator.java
1 package org.simantics.scenegraph.g2d.events;
2
3 import java.awt.Point;
4 import java.awt.event.FocusEvent;
5 import java.awt.event.FocusListener;
6 import java.awt.event.KeyEvent;
7 import java.awt.event.KeyListener;
8 import java.awt.event.MouseEvent;
9 import java.awt.event.MouseListener;
10 import java.awt.event.MouseMotionListener;
11 import java.awt.event.MouseWheelEvent;
12 import java.awt.event.MouseWheelListener;
13
14 import org.simantics.scenegraph.g2d.G2DFocusManager;
15 import org.simantics.scenegraph.g2d.G2DSceneGraph;
16 import org.simantics.scenegraph.g2d.IG2DNode;
17 import org.simantics.scenegraph.utils.NodeUtil;
18
19 /**
20  * Delivers AWT UI events (mouse, key, focus) to scene graph nodes that have
21  * registered to it.
22  * 
23  * <p>
24  * Mouse events are delivered as {@link SGMouseEvent} and
25  * {@link SGMouseWheelEvent}. The events contain double format coordinates that
26  * are in the coordinate system of the parent of the node the event is delivered
27  * to.
28  * 
29  * @author Tuukka Lehtonen
30  * @deprecated replaced with {@link NodeEventHandler}
31  */
32 public class EventDelegator implements MouseListener, MouseMotionListener,
33 MouseWheelListener, KeyListener, FocusListener {
34
35     private static final boolean                ENABLED              = true;
36     private static final boolean                WARN_DEPRECATION     = false;
37
38     protected ListenerList<MouseListener>       mouseListeners       = new ListenerList<MouseListener>(MouseListener.class);
39     protected ListenerList<MouseWheelListener>  mouseWheelListeners  = new ListenerList<MouseWheelListener>(MouseWheelListener.class);
40     protected ListenerList<MouseMotionListener> mouseMotionListeners = new ListenerList<MouseMotionListener>(MouseMotionListener.class);
41     protected ListenerList<KeyListener>         keyListeners         = new ListenerList<KeyListener>(KeyListener.class);
42     protected ListenerList<FocusListener>       focusListeners       = new ListenerList<FocusListener>(FocusListener.class);
43
44     protected G2DSceneGraph sg = null;
45
46     public EventDelegator(G2DSceneGraph sg) {
47         this.sg = sg;
48     }
49
50     @SuppressWarnings({ "hiding" })
51     public <T extends IG2DNode, MouseListener> void addMouseListener(T node) {
52         mouseListeners.add((java.awt.event.MouseListener) node);
53     }
54
55     @SuppressWarnings("hiding")
56     public <T extends IG2DNode, MouseListener> void removeMouseListener(T node) {
57         mouseListeners.remove((java.awt.event.MouseListener) node);
58     }
59
60     @SuppressWarnings({ "hiding" })
61     public <T extends IG2DNode, MouseMotionListener> void addMouseMotionListener(T node) {
62         mouseMotionListeners.add((java.awt.event.MouseMotionListener) node);
63     }
64
65     @SuppressWarnings("hiding")
66     public <T extends IG2DNode, MouseMotionListener> void removeMouseMotionListener(T node) {
67         mouseMotionListeners.remove((java.awt.event.MouseMotionListener) node);
68     }
69
70     @SuppressWarnings({ "hiding" })
71     public <T extends IG2DNode, MouseWheelListener> void addMouseWheelListener(T node) {
72         mouseWheelListeners.add((java.awt.event.MouseWheelListener) node);
73     }
74
75     @SuppressWarnings("hiding")
76     public <T extends IG2DNode, MouseWheelListener> void removeMouseWheelListener(T node) {
77         mouseWheelListeners.remove((java.awt.event.MouseWheelListener) node);
78     }
79
80     @SuppressWarnings({ "hiding" })
81     public <T extends IG2DNode, KeyListener> void addKeyListener(T node) {
82         keyListeners.add((java.awt.event.KeyListener) node);
83     }
84
85     @SuppressWarnings("hiding")
86     public <T extends IG2DNode, KeyListener> void removeKeyListener(T node) {
87         keyListeners.remove((java.awt.event.KeyListener) node);
88     }
89
90     @SuppressWarnings({ "hiding" })
91     public <T extends IG2DNode, FocusListener> void addFocusListener(T node) {
92         focusListeners.add((java.awt.event.FocusListener) node);
93     }
94
95     @SuppressWarnings("hiding")
96     public <T extends IG2DNode, FocusListener> void removeFocusListener(T node) {
97         focusListeners.remove((java.awt.event.FocusListener) node);
98     }
99
100     @Override
101     public void mouseClicked(MouseEvent event) {
102         if (!ENABLED)
103             return;
104
105         Point op = event.getPoint();
106         for (MouseListener l : mouseListeners.getListeners()) {
107             if (WARN_DEPRECATION)
108                 System.out.println("DEPRECATION: " + l + " listens to " + event);
109             MouseEvent e = (MouseEvent) NodeUtil.transformEvent(event, (IG2DNode) l);
110             l.mouseClicked(e);
111             event.translatePoint((int)(op.getX()-event.getX()), (int)(op.getY()-event.getY()));
112             if (e.isConsumed())
113                 break;
114         }
115     }
116
117     @Override
118     public void mouseEntered(MouseEvent event) {
119         if (!ENABLED)
120             return;
121
122         Point op = event.getPoint();
123         for (MouseListener l : mouseListeners.getListeners()) {
124             if (WARN_DEPRECATION)
125                 System.out.println("DEPRECATION: " + l + " listens to " + event);
126             MouseEvent e = (MouseEvent) NodeUtil.transformEvent(event,(IG2DNode) l);
127             l.mouseEntered(e);
128             event.translatePoint((int)(op.getX()-event.getX()), (int)(op.getY()-event.getY()));
129             if (e.isConsumed())
130                 break;
131         }
132     }
133
134     @Override
135     public void mouseExited(MouseEvent event) {
136         if (!ENABLED)
137             return;
138
139         Point op = event.getPoint();
140         for (MouseListener l : mouseListeners.getListeners()) {
141             if (WARN_DEPRECATION)
142                 System.out.println("DEPRECATION: " + l + " listens to " + event);
143             MouseEvent e = (MouseEvent) NodeUtil.transformEvent(event,(IG2DNode) l);
144             l.mouseExited(e);
145             event.translatePoint((int)(op.getX()-event.getX()), (int)(op.getY()-event.getY()));
146             if (e.isConsumed())
147                 break;
148         }
149     }
150
151     @Override
152     public void mousePressed(MouseEvent event) {
153         if (!ENABLED)
154             return;
155
156         G2DFocusManager.INSTANCE.clearFocus();
157
158         Point op = event.getPoint();
159         for (MouseListener l : mouseListeners.getListeners()) {
160             if (WARN_DEPRECATION)
161                 System.out.println("DEPRECATION: " + l + " listens to " + event);
162             MouseEvent e = (MouseEvent) NodeUtil.transformEvent(event,(IG2DNode) l);
163             l.mousePressed(e);
164             event.translatePoint((int)(op.getX()-event.getX()), (int)(op.getY()-event.getY()));
165             if (e.isConsumed())
166                 break;
167         }
168
169         if (sg.getRootPane() != null) {
170             if (G2DFocusManager.INSTANCE.getFocusOwner() == null) {
171                 sg.getRootPane().requestFocusInWindow();
172                 //sg.getRootPane().repaint(); //TODO : why repaint here? FocusOwner seems to be always null, so this causes unnecessary delays when interacting the canvas.
173             }
174         }
175     }
176
177     @Override
178     public void mouseReleased(MouseEvent event) {
179         if (!ENABLED)
180             return;
181
182         Point op = event.getPoint();
183         for (MouseListener l : mouseListeners.getListeners()) {
184             if (WARN_DEPRECATION)
185                 System.out.println("DEPRECATION: " + l + " listens to " + event);
186             MouseEvent e = (MouseEvent) NodeUtil.transformEvent(event,(IG2DNode) l);
187             l.mouseReleased(e);
188             event.translatePoint((int)(op.getX()-event.getX()), (int)(op.getY()-event.getY()));
189             if (e.isConsumed())
190                 break;
191         }
192     }
193
194     @Override
195     public void mouseDragged(MouseEvent event) {
196         if (!ENABLED)
197             return;
198
199         Point op = event.getPoint();
200         for (MouseMotionListener l : mouseMotionListeners.getListeners()) {
201             if (WARN_DEPRECATION)
202                 System.out.println("DEPRECATION: " + l + " listens to " + event);
203             MouseEvent e = (MouseEvent) NodeUtil.transformEvent(event,(IG2DNode) l);
204             l.mouseDragged(e);
205             event.translatePoint((int)(op.getX()-event.getX()), (int)(op.getY()-event.getY()));
206             if (e.isConsumed())
207                 break;
208         }
209     }
210
211     @Override
212     public void mouseMoved(MouseEvent event) {
213         if (!ENABLED)
214             return;
215
216         for (MouseMotionListener l : mouseMotionListeners.getListeners()) {
217             if (WARN_DEPRECATION)
218                 System.out.println("DEPRECATION: " + l + " listens to " + event);
219             MouseEvent e = (MouseEvent) NodeUtil.transformEvent(event,(IG2DNode) l);
220             l.mouseMoved(e);
221             if (e.isConsumed())
222                 break;
223         }
224     }
225
226     @Override
227     public void mouseWheelMoved(MouseWheelEvent event) {
228         if (!ENABLED)
229             return;
230
231         Point op = event.getPoint();
232         for (MouseWheelListener l : mouseWheelListeners.getListeners()) {
233             if (WARN_DEPRECATION)
234                 System.out.println("DEPRECATION: " + l + " listens to " + event);
235             MouseWheelEvent e = (MouseWheelEvent) NodeUtil.transformEvent(event, (IG2DNode) l);
236             l.mouseWheelMoved(e);
237             event.translatePoint((int)(op.getX()-event.getX()), (int)(op.getY()-event.getY()));
238             if (e.isConsumed())
239                 break;
240         }
241     }
242
243     @Override
244     public void keyPressed(KeyEvent event) {
245         if (!ENABLED)
246             return;
247
248         for (KeyListener l : keyListeners.getListeners()) {
249             if (WARN_DEPRECATION)
250                 System.out.println("DEPRECATION: " + l + " listens to " + event);
251             l.keyPressed(event);
252             if (event.isConsumed())
253                 break;
254         }
255     }
256
257     @Override
258     public void keyReleased(KeyEvent event) {
259         if (!ENABLED)
260             return;
261
262         for (KeyListener l : keyListeners.getListeners()) {
263             if (WARN_DEPRECATION)
264                 System.out.println("DEPRECATION: " + l + " listens to " + event);
265             l.keyReleased(event);
266             if (event.isConsumed())
267                 break;
268         }
269     }
270
271     @Override
272     public void keyTyped(KeyEvent event) {
273         if (!ENABLED)
274             return;
275
276         for (KeyListener l : keyListeners.getListeners()) {
277             if (WARN_DEPRECATION)
278                 System.out.println("DEPRECATION: " + l + " listens to " + event);
279             l.keyTyped(event);
280             if (event.isConsumed())
281                 break;
282         }
283     }
284
285     @Override
286     public void focusGained(FocusEvent event) {
287         if (!ENABLED)
288             return;
289
290         for (FocusListener l : focusListeners.getListeners()) {
291             if (WARN_DEPRECATION)
292                 System.out.println("DEPRECATION: " + l + " listens to " + event);
293             l.focusGained(event);
294         }
295     }
296
297     @Override
298     public void focusLost(FocusEvent event) {
299         if (!ENABLED)
300             return;
301
302         for (FocusListener l : focusListeners.getListeners()) {
303             if (WARN_DEPRECATION)
304                 System.out.println("DEPRECATION: " + l + " listens to " + event);
305             l.focusLost(event);
306         }
307     }
308
309     public void dispose() {
310         focusListeners.clear();
311         focusListeners = null;
312         keyListeners.clear();
313         keyListeners = null;
314         mouseListeners.clear();
315         mouseListeners = null;
316         sg = null;
317     }
318
319 }