package org.simantics.scenegraph.g2d.events; import java.awt.Point; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import org.simantics.scenegraph.g2d.G2DFocusManager; import org.simantics.scenegraph.g2d.G2DSceneGraph; import org.simantics.scenegraph.g2d.IG2DNode; import org.simantics.scenegraph.utils.NodeUtil; /** * Delivers AWT UI events (mouse, key, focus) to scene graph nodes that have * registered to it. * *

* Mouse events are delivered as {@link SGMouseEvent} and * {@link SGMouseWheelEvent}. The events contain double format coordinates that * are in the coordinate system of the parent of the node the event is delivered * to. * * @author Tuukka Lehtonen * @deprecated replaced with {@link NodeEventHandler} */ public class EventDelegator implements MouseListener, MouseMotionListener, MouseWheelListener, KeyListener, FocusListener { private static final boolean ENABLED = true; private static final boolean WARN_DEPRECATION = false; protected ListenerList mouseListeners = new ListenerList(MouseListener.class); protected ListenerList mouseWheelListeners = new ListenerList(MouseWheelListener.class); protected ListenerList mouseMotionListeners = new ListenerList(MouseMotionListener.class); protected ListenerList keyListeners = new ListenerList(KeyListener.class); protected ListenerList focusListeners = new ListenerList(FocusListener.class); protected G2DSceneGraph sg = null; public EventDelegator(G2DSceneGraph sg) { this.sg = sg; } @SuppressWarnings({ "hiding" }) public void addMouseListener(T node) { mouseListeners.add((java.awt.event.MouseListener) node); } @SuppressWarnings("hiding") public void removeMouseListener(T node) { mouseListeners.remove((java.awt.event.MouseListener) node); } @SuppressWarnings({ "hiding" }) public void addMouseMotionListener(T node) { mouseMotionListeners.add((java.awt.event.MouseMotionListener) node); } @SuppressWarnings("hiding") public void removeMouseMotionListener(T node) { mouseMotionListeners.remove((java.awt.event.MouseMotionListener) node); } @SuppressWarnings({ "hiding" }) public void addMouseWheelListener(T node) { mouseWheelListeners.add((java.awt.event.MouseWheelListener) node); } @SuppressWarnings("hiding") public void removeMouseWheelListener(T node) { mouseWheelListeners.remove((java.awt.event.MouseWheelListener) node); } @SuppressWarnings({ "hiding" }) public void addKeyListener(T node) { keyListeners.add((java.awt.event.KeyListener) node); } @SuppressWarnings("hiding") public void removeKeyListener(T node) { keyListeners.remove((java.awt.event.KeyListener) node); } @SuppressWarnings({ "hiding" }) public void addFocusListener(T node) { focusListeners.add((java.awt.event.FocusListener) node); } @SuppressWarnings("hiding") public void removeFocusListener(T node) { focusListeners.remove((java.awt.event.FocusListener) node); } @Override public void mouseClicked(MouseEvent event) { if (!ENABLED) return; Point op = event.getPoint(); for (MouseListener l : mouseListeners.getListeners()) { if (WARN_DEPRECATION) System.out.println("DEPRECATION: " + l + " listens to " + event); MouseEvent e = (MouseEvent) NodeUtil.transformEvent(event, (IG2DNode) l); l.mouseClicked(e); event.translatePoint((int)(op.getX()-event.getX()), (int)(op.getY()-event.getY())); if (e.isConsumed()) break; } } @Override public void mouseEntered(MouseEvent event) { if (!ENABLED) return; Point op = event.getPoint(); for (MouseListener l : mouseListeners.getListeners()) { if (WARN_DEPRECATION) System.out.println("DEPRECATION: " + l + " listens to " + event); MouseEvent e = (MouseEvent) NodeUtil.transformEvent(event,(IG2DNode) l); l.mouseEntered(e); event.translatePoint((int)(op.getX()-event.getX()), (int)(op.getY()-event.getY())); if (e.isConsumed()) break; } } @Override public void mouseExited(MouseEvent event) { if (!ENABLED) return; Point op = event.getPoint(); for (MouseListener l : mouseListeners.getListeners()) { if (WARN_DEPRECATION) System.out.println("DEPRECATION: " + l + " listens to " + event); MouseEvent e = (MouseEvent) NodeUtil.transformEvent(event,(IG2DNode) l); l.mouseExited(e); event.translatePoint((int)(op.getX()-event.getX()), (int)(op.getY()-event.getY())); if (e.isConsumed()) break; } } @Override public void mousePressed(MouseEvent event) { if (!ENABLED) return; G2DFocusManager.INSTANCE.clearFocus(); Point op = event.getPoint(); for (MouseListener l : mouseListeners.getListeners()) { if (WARN_DEPRECATION) System.out.println("DEPRECATION: " + l + " listens to " + event); MouseEvent e = (MouseEvent) NodeUtil.transformEvent(event,(IG2DNode) l); l.mousePressed(e); event.translatePoint((int)(op.getX()-event.getX()), (int)(op.getY()-event.getY())); if (e.isConsumed()) break; } if (sg.getRootPane() != null) { if (G2DFocusManager.INSTANCE.getFocusOwner() == null) { sg.getRootPane().requestFocusInWindow(); //sg.getRootPane().repaint(); //TODO : why repaint here? FocusOwner seems to be always null, so this causes unnecessary delays when interacting the canvas. } } } @Override public void mouseReleased(MouseEvent event) { if (!ENABLED) return; Point op = event.getPoint(); for (MouseListener l : mouseListeners.getListeners()) { if (WARN_DEPRECATION) System.out.println("DEPRECATION: " + l + " listens to " + event); MouseEvent e = (MouseEvent) NodeUtil.transformEvent(event,(IG2DNode) l); l.mouseReleased(e); event.translatePoint((int)(op.getX()-event.getX()), (int)(op.getY()-event.getY())); if (e.isConsumed()) break; } } @Override public void mouseDragged(MouseEvent event) { if (!ENABLED) return; Point op = event.getPoint(); for (MouseMotionListener l : mouseMotionListeners.getListeners()) { if (WARN_DEPRECATION) System.out.println("DEPRECATION: " + l + " listens to " + event); MouseEvent e = (MouseEvent) NodeUtil.transformEvent(event,(IG2DNode) l); l.mouseDragged(e); event.translatePoint((int)(op.getX()-event.getX()), (int)(op.getY()-event.getY())); if (e.isConsumed()) break; } } @Override public void mouseMoved(MouseEvent event) { if (!ENABLED) return; for (MouseMotionListener l : mouseMotionListeners.getListeners()) { if (WARN_DEPRECATION) System.out.println("DEPRECATION: " + l + " listens to " + event); MouseEvent e = (MouseEvent) NodeUtil.transformEvent(event,(IG2DNode) l); l.mouseMoved(e); if (e.isConsumed()) break; } } @Override public void mouseWheelMoved(MouseWheelEvent event) { if (!ENABLED) return; Point op = event.getPoint(); for (MouseWheelListener l : mouseWheelListeners.getListeners()) { if (WARN_DEPRECATION) System.out.println("DEPRECATION: " + l + " listens to " + event); MouseWheelEvent e = (MouseWheelEvent) NodeUtil.transformEvent(event, (IG2DNode) l); l.mouseWheelMoved(e); event.translatePoint((int)(op.getX()-event.getX()), (int)(op.getY()-event.getY())); if (e.isConsumed()) break; } } @Override public void keyPressed(KeyEvent event) { if (!ENABLED) return; for (KeyListener l : keyListeners.getListeners()) { if (WARN_DEPRECATION) System.out.println("DEPRECATION: " + l + " listens to " + event); l.keyPressed(event); if (event.isConsumed()) break; } } @Override public void keyReleased(KeyEvent event) { if (!ENABLED) return; for (KeyListener l : keyListeners.getListeners()) { if (WARN_DEPRECATION) System.out.println("DEPRECATION: " + l + " listens to " + event); l.keyReleased(event); if (event.isConsumed()) break; } } @Override public void keyTyped(KeyEvent event) { if (!ENABLED) return; for (KeyListener l : keyListeners.getListeners()) { if (WARN_DEPRECATION) System.out.println("DEPRECATION: " + l + " listens to " + event); l.keyTyped(event); if (event.isConsumed()) break; } } @Override public void focusGained(FocusEvent event) { if (!ENABLED) return; for (FocusListener l : focusListeners.getListeners()) { if (WARN_DEPRECATION) System.out.println("DEPRECATION: " + l + " listens to " + event); l.focusGained(event); } } @Override public void focusLost(FocusEvent event) { if (!ENABLED) return; for (FocusListener l : focusListeners.getListeners()) { if (WARN_DEPRECATION) System.out.println("DEPRECATION: " + l + " listens to " + event); l.focusLost(event); } } public void dispose() { focusListeners.clear(); focusListeners = null; keyListeners.clear(); keyListeners = null; mouseListeners.clear(); mouseListeners = null; sg = null; } }