1 package org.simantics.scenegraph.g2d.events;
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;
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;
20 * Delivers AWT UI events (mouse, key, focus) to scene graph nodes that have
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
29 * @author Tuukka Lehtonen
30 * @deprecated replaced with {@link NodeEventHandler}
32 public class EventDelegator implements MouseListener, MouseMotionListener,
33 MouseWheelListener, KeyListener, FocusListener {
35 private static final boolean ENABLED = true;
36 private static final boolean WARN_DEPRECATION = false;
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);
44 protected G2DSceneGraph sg = null;
46 public EventDelegator(G2DSceneGraph sg) {
50 @SuppressWarnings({ "hiding" })
51 public <T extends IG2DNode, MouseListener> void addMouseListener(T node) {
52 mouseListeners.add((java.awt.event.MouseListener) node);
55 @SuppressWarnings("hiding")
56 public <T extends IG2DNode, MouseListener> void removeMouseListener(T node) {
57 mouseListeners.remove((java.awt.event.MouseListener) node);
60 @SuppressWarnings({ "hiding" })
61 public <T extends IG2DNode, MouseMotionListener> void addMouseMotionListener(T node) {
62 mouseMotionListeners.add((java.awt.event.MouseMotionListener) node);
65 @SuppressWarnings("hiding")
66 public <T extends IG2DNode, MouseMotionListener> void removeMouseMotionListener(T node) {
67 mouseMotionListeners.remove((java.awt.event.MouseMotionListener) node);
70 @SuppressWarnings({ "hiding" })
71 public <T extends IG2DNode, MouseWheelListener> void addMouseWheelListener(T node) {
72 mouseWheelListeners.add((java.awt.event.MouseWheelListener) node);
75 @SuppressWarnings("hiding")
76 public <T extends IG2DNode, MouseWheelListener> void removeMouseWheelListener(T node) {
77 mouseWheelListeners.remove((java.awt.event.MouseWheelListener) node);
80 @SuppressWarnings({ "hiding" })
81 public <T extends IG2DNode, KeyListener> void addKeyListener(T node) {
82 keyListeners.add((java.awt.event.KeyListener) node);
85 @SuppressWarnings("hiding")
86 public <T extends IG2DNode, KeyListener> void removeKeyListener(T node) {
87 keyListeners.remove((java.awt.event.KeyListener) node);
90 @SuppressWarnings({ "hiding" })
91 public <T extends IG2DNode, FocusListener> void addFocusListener(T node) {
92 focusListeners.add((java.awt.event.FocusListener) node);
95 @SuppressWarnings("hiding")
96 public <T extends IG2DNode, FocusListener> void removeFocusListener(T node) {
97 focusListeners.remove((java.awt.event.FocusListener) node);
101 public void mouseClicked(MouseEvent event) {
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);
111 event.translatePoint((int)(op.getX()-event.getX()), (int)(op.getY()-event.getY()));
118 public void mouseEntered(MouseEvent event) {
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);
128 event.translatePoint((int)(op.getX()-event.getX()), (int)(op.getY()-event.getY()));
135 public void mouseExited(MouseEvent event) {
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);
145 event.translatePoint((int)(op.getX()-event.getX()), (int)(op.getY()-event.getY()));
152 public void mousePressed(MouseEvent event) {
156 G2DFocusManager.INSTANCE.clearFocus();
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);
164 event.translatePoint((int)(op.getX()-event.getX()), (int)(op.getY()-event.getY()));
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.
178 public void mouseReleased(MouseEvent event) {
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);
188 event.translatePoint((int)(op.getX()-event.getX()), (int)(op.getY()-event.getY()));
195 public void mouseDragged(MouseEvent event) {
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);
205 event.translatePoint((int)(op.getX()-event.getX()), (int)(op.getY()-event.getY()));
212 public void mouseMoved(MouseEvent event) {
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);
227 public void mouseWheelMoved(MouseWheelEvent event) {
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()));
244 public void keyPressed(KeyEvent event) {
248 for (KeyListener l : keyListeners.getListeners()) {
249 if (WARN_DEPRECATION)
250 System.out.println("DEPRECATION: " + l + " listens to " + event);
252 if (event.isConsumed())
258 public void keyReleased(KeyEvent event) {
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())
272 public void keyTyped(KeyEvent event) {
276 for (KeyListener l : keyListeners.getListeners()) {
277 if (WARN_DEPRECATION)
278 System.out.println("DEPRECATION: " + l + " listens to " + event);
280 if (event.isConsumed())
286 public void focusGained(FocusEvent event) {
290 for (FocusListener l : focusListeners.getListeners()) {
291 if (WARN_DEPRECATION)
292 System.out.println("DEPRECATION: " + l + " listens to " + event);
293 l.focusGained(event);
298 public void focusLost(FocusEvent event) {
302 for (FocusListener l : focusListeners.getListeners()) {
303 if (WARN_DEPRECATION)
304 System.out.println("DEPRECATION: " + l + " listens to " + event);
309 public void dispose() {
310 focusListeners.clear();
311 focusListeners = null;
312 keyListeners.clear();
314 mouseListeners.clear();
315 mouseListeners = null;