X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scenegraph%2Fsrc%2Forg%2Fsimantics%2Fscenegraph%2Fg2d%2Fevents%2FEventDelegator.java;fp=bundles%2Forg.simantics.scenegraph%2Fsrc%2Forg%2Fsimantics%2Fscenegraph%2Fg2d%2Fevents%2FEventDelegator.java;h=220916e736fe4af3de7e4bf6266cfa70b36c73d0;hb=969bd23cab98a79ca9101af33334000879fb60c5;hp=0000000000000000000000000000000000000000;hpb=866dba5cd5a3929bbeae85991796acb212338a08;p=simantics%2Fplatform.git
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
index 000000000..220916e73
--- /dev/null
+++ b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/events/EventDelegator.java
@@ -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.
+ *
+ *
+ * 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;
+ }
+
+}