-/*******************************************************************************\r
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- * VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.g2d.canvas.impl;\r
-\r
-import java.lang.reflect.Method;\r
-import java.util.HashMap;\r
-import java.util.HashSet;\r
-import java.util.Map;\r
-import java.util.Set;\r
-\r
-import org.simantics.g2d.canvas.IMouseCaptureContext;\r
-import org.simantics.g2d.canvas.IMouseCaptureHandle;\r
-import org.simantics.g2d.canvas.IMouseCaptureHandleListener;\r
-import org.simantics.g2d.canvas.IMouseCaptureListener;\r
-import org.simantics.utils.threads.IThreadWorkQueue;\r
-import org.simantics.utils.threads.SyncListenerList;\r
-\r
-/**\r
- * @author Toni Kalajainen\r
- */\r
-public class MouseCaptureContext implements IMouseCaptureContext {\r
-\r
- protected Map<Integer, Set<IMouseCaptureHandle>> mouseCapture = \r
- new HashMap<Integer, Set<IMouseCaptureHandle>>();\r
- \r
- protected SyncListenerList<IMouseCaptureListener> mouseCaptureListeners =\r
- new SyncListenerList<IMouseCaptureListener>(IMouseCaptureListener.class);\r
- \r
- public void addMouseCaptureListener(IMouseCaptureListener listener) {\r
- mouseCaptureListeners.add(listener);\r
- }\r
- public void addMouseCaptureListener(IMouseCaptureListener listener, IThreadWorkQueue thread) {\r
- mouseCaptureListeners.add(thread, listener);\r
- } \r
- public void removeMouseCaptureListener(IMouseCaptureListener listener) {\r
- mouseCaptureListeners.remove(listener);\r
- }\r
- public void removeMouseCaptureListener(IMouseCaptureListener listener, IThreadWorkQueue thread) {\r
- mouseCaptureListeners.remove(thread, listener);\r
- }\r
- \r
- private final static Method onMouseCaptured = SyncListenerList.getMethod(IMouseCaptureListener.class, "onMouseCaptured");\r
- private final static Method onMouseReleased = SyncListenerList.getMethod(IMouseCaptureListener.class, "onMouseReleased");\r
- protected void fireMouseCaptured(int mouseId) {\r
- mouseCaptureListeners.fireEventSync(onMouseCaptured, this, mouseId);\r
- }\r
- protected void fireAsyncMouseCaptured(int mouseId) {\r
- mouseCaptureListeners.fireEventAsync(onMouseCaptured, this, mouseId);\r
- }\r
- protected void fireMouseReleased(int mouseId) {\r
- mouseCaptureListeners.fireEventSync(onMouseReleased, this, mouseId);\r
- }\r
- protected void fireAsyncMouseReleased(int mouseId) {\r
- mouseCaptureListeners.fireEventAsync(onMouseReleased, this, mouseId);\r
- }\r
- \r
- public synchronized IMouseCaptureHandle captureMouse(int mouseId) {\r
- Set<IMouseCaptureHandle> captures = mouseCapture.get(mouseId);\r
- IMouseCaptureHandle capture = new MouseCaptureHandle(mouseId);\r
- capture.addMouseCaptureHandleListener(new IMouseCaptureHandleListener() {\r
- @Override\r
- public void onCaptureReleased(IMouseCaptureHandle sender) {\r
- synchronized(MouseCaptureContext.this)\r
- {\r
- Set<IMouseCaptureHandle> captures = mouseCapture.get(sender.mouseId());\r
- if (!captures.contains(this)) return;\r
- captures.remove(this);\r
- if (captures.isEmpty()) {\r
- mouseCapture.remove(captures);\r
- fireMouseReleased(sender.mouseId());\r
- }\r
- }\r
- }});\r
- if (captures==null) {\r
- captures = new HashSet<IMouseCaptureHandle>();\r
- mouseCapture.put(mouseId, captures);\r
- fireMouseCaptured(mouseId);\r
- }\r
- captures.add(capture);\r
- return capture;\r
- }\r
-\r
- \r
-\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.g2d.canvas.impl;
+
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.simantics.g2d.canvas.IMouseCaptureContext;
+import org.simantics.g2d.canvas.IMouseCaptureHandle;
+import org.simantics.g2d.canvas.IMouseCaptureHandleListener;
+import org.simantics.g2d.canvas.IMouseCaptureListener;
+import org.simantics.utils.threads.IThreadWorkQueue;
+import org.simantics.utils.threads.SyncListenerList;
+
+/**
+ * @author Toni Kalajainen
+ */
+public class MouseCaptureContext implements IMouseCaptureContext {
+
+ protected Map<Integer, Set<IMouseCaptureHandle>> mouseCapture =
+ new HashMap<Integer, Set<IMouseCaptureHandle>>();
+
+ protected SyncListenerList<IMouseCaptureListener> mouseCaptureListeners =
+ new SyncListenerList<IMouseCaptureListener>(IMouseCaptureListener.class);
+
+ public void addMouseCaptureListener(IMouseCaptureListener listener) {
+ mouseCaptureListeners.add(listener);
+ }
+ public void addMouseCaptureListener(IMouseCaptureListener listener, IThreadWorkQueue thread) {
+ mouseCaptureListeners.add(thread, listener);
+ }
+ public void removeMouseCaptureListener(IMouseCaptureListener listener) {
+ mouseCaptureListeners.remove(listener);
+ }
+ public void removeMouseCaptureListener(IMouseCaptureListener listener, IThreadWorkQueue thread) {
+ mouseCaptureListeners.remove(thread, listener);
+ }
+
+ private final static Method onMouseCaptured = SyncListenerList.getMethod(IMouseCaptureListener.class, "onMouseCaptured");
+ private final static Method onMouseReleased = SyncListenerList.getMethod(IMouseCaptureListener.class, "onMouseReleased");
+ protected void fireMouseCaptured(int mouseId) {
+ mouseCaptureListeners.fireEventSync(onMouseCaptured, this, mouseId);
+ }
+ protected void fireAsyncMouseCaptured(int mouseId) {
+ mouseCaptureListeners.fireEventAsync(onMouseCaptured, this, mouseId);
+ }
+ protected void fireMouseReleased(int mouseId) {
+ mouseCaptureListeners.fireEventSync(onMouseReleased, this, mouseId);
+ }
+ protected void fireAsyncMouseReleased(int mouseId) {
+ mouseCaptureListeners.fireEventAsync(onMouseReleased, this, mouseId);
+ }
+
+ public synchronized IMouseCaptureHandle captureMouse(int mouseId) {
+ Set<IMouseCaptureHandle> captures = mouseCapture.get(mouseId);
+ IMouseCaptureHandle capture = new MouseCaptureHandle(mouseId);
+ capture.addMouseCaptureHandleListener(new IMouseCaptureHandleListener() {
+ @Override
+ public void onCaptureReleased(IMouseCaptureHandle sender) {
+ synchronized(MouseCaptureContext.this)
+ {
+ Set<IMouseCaptureHandle> captures = mouseCapture.get(sender.mouseId());
+ if (!captures.contains(this)) return;
+ captures.remove(this);
+ if (captures.isEmpty()) {
+ mouseCapture.remove(captures);
+ fireMouseReleased(sender.mouseId());
+ }
+ }
+ }});
+ if (captures==null) {
+ captures = new HashSet<IMouseCaptureHandle>();
+ mouseCapture.put(mouseId, captures);
+ fireMouseCaptured(mouseId);
+ }
+ captures.add(capture);
+ return capture;
+ }
+
+
+
+}