]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/events/EventDelegator.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scenegraph / src / org / simantics / scenegraph / g2d / events / EventDelegator.java
diff --git a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/events/EventDelegator.java b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/events/EventDelegator.java
new file mode 100644 (file)
index 0000000..220916e
--- /dev/null
@@ -0,0 +1,319 @@
+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.
+ * 
+ * <p>
+ * 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<MouseListener>       mouseListeners       = new ListenerList<MouseListener>(MouseListener.class);
+    protected ListenerList<MouseWheelListener>  mouseWheelListeners  = new ListenerList<MouseWheelListener>(MouseWheelListener.class);
+    protected ListenerList<MouseMotionListener> mouseMotionListeners = new ListenerList<MouseMotionListener>(MouseMotionListener.class);
+    protected ListenerList<KeyListener>         keyListeners         = new ListenerList<KeyListener>(KeyListener.class);
+    protected ListenerList<FocusListener>       focusListeners       = new ListenerList<FocusListener>(FocusListener.class);
+
+    protected G2DSceneGraph sg = null;
+
+    public EventDelegator(G2DSceneGraph sg) {
+        this.sg = sg;
+    }
+
+    @SuppressWarnings({ "hiding" })
+    public <T extends IG2DNode, MouseListener> void addMouseListener(T node) {
+        mouseListeners.add((java.awt.event.MouseListener) node);
+    }
+
+    @SuppressWarnings("hiding")
+    public <T extends IG2DNode, MouseListener> void removeMouseListener(T node) {
+        mouseListeners.remove((java.awt.event.MouseListener) node);
+    }
+
+    @SuppressWarnings({ "hiding" })
+    public <T extends IG2DNode, MouseMotionListener> void addMouseMotionListener(T node) {
+        mouseMotionListeners.add((java.awt.event.MouseMotionListener) node);
+    }
+
+    @SuppressWarnings("hiding")
+    public <T extends IG2DNode, MouseMotionListener> void removeMouseMotionListener(T node) {
+        mouseMotionListeners.remove((java.awt.event.MouseMotionListener) node);
+    }
+
+    @SuppressWarnings({ "hiding" })
+    public <T extends IG2DNode, MouseWheelListener> void addMouseWheelListener(T node) {
+        mouseWheelListeners.add((java.awt.event.MouseWheelListener) node);
+    }
+
+    @SuppressWarnings("hiding")
+    public <T extends IG2DNode, MouseWheelListener> void removeMouseWheelListener(T node) {
+        mouseWheelListeners.remove((java.awt.event.MouseWheelListener) node);
+    }
+
+    @SuppressWarnings({ "hiding" })
+    public <T extends IG2DNode, KeyListener> void addKeyListener(T node) {
+        keyListeners.add((java.awt.event.KeyListener) node);
+    }
+
+    @SuppressWarnings("hiding")
+    public <T extends IG2DNode, KeyListener> void removeKeyListener(T node) {
+        keyListeners.remove((java.awt.event.KeyListener) node);
+    }
+
+    @SuppressWarnings({ "hiding" })
+    public <T extends IG2DNode, FocusListener> void addFocusListener(T node) {
+        focusListeners.add((java.awt.event.FocusListener) node);
+    }
+
+    @SuppressWarnings("hiding")
+    public <T extends IG2DNode, FocusListener> 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;
+    }
+
+}