Forráskód Böngészése

Merge branch 'master' of https://github.com/Yakindu/statecharts.git

Dominik Tesch 9 éve
szülő
commit
62ab75dfc9

+ 39 - 25
plugins/org.yakindu.sct.simulation.ui/src/org/yakindu/sct/simulation/ui/view/SimulationView.java

@@ -14,13 +14,11 @@ import org.eclipse.debug.core.DebugEvent;
 import org.eclipse.debug.core.model.IDebugTarget;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.action.IToolBarManager;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerCell;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseAdapter;
 import org.eclipse.swt.events.MouseEvent;
 import org.eclipse.swt.events.MouseMoveListener;
 import org.eclipse.swt.graphics.Font;
@@ -46,6 +44,7 @@ public class SimulationView extends AbstractDebugTargetView {
 	private TreeViewer viewer;
 	private FormToolkit kit;
 	private Font font;
+	private RaiseEventSelectionListener selectionListener;
 
 	public SimulationView() {
 		kit = new FormToolkit(Display.getDefault());
@@ -55,6 +54,7 @@ public class SimulationView extends AbstractDebugTargetView {
 
 	@Override
 	public void dispose() {
+		selectionListener.dispose();
 		font.dispose();
 		super.dispose();
 	}
@@ -76,7 +76,7 @@ public class SimulationView extends AbstractDebugTargetView {
 
 	protected Viewer createViewer(Composite parent) {
 		viewer = ExecutionContextViewerFactory.createViewer(parent, false);
-		viewer.addSelectionChangedListener(new RaiseEventSelectionListener(viewer));
+		selectionListener = new RaiseEventSelectionListener(viewer);
 		return viewer;
 	}
 
@@ -118,40 +118,54 @@ public class SimulationView extends AbstractDebugTargetView {
 	 * @author andreas muelder - Initial contribution and API
 	 * 
 	 */
-	protected static class RaiseEventSelectionListener implements ISelectionChangedListener {
+	protected static class RaiseEventSelectionListener {
 
 		private TreeViewer viewer;
 		private Point mouseLocation;
 
+		MouseMoveListener moveListener = new MouseMoveListener() {
+			public void mouseMove(MouseEvent e) {
+				mouseLocation = new Point(e.x, e.y);
+			}
+		};
+		MouseAdapter clickListener = new MouseAdapter() {
+			@Override
+			public void mouseUp(MouseEvent e) {
+				ViewerCell cell = viewer.getCell(mouseLocation);
+				if (cell == null || cell.getColumnIndex() != 0)
+					return;
+				Object element = cell.getElement();
+				if (element instanceof ExecutionEvent)
+					raiseEvent((ExecutionEvent) element);
+			}
+		};
+
 		public RaiseEventSelectionListener(TreeViewer viewer) {
 			this.viewer = viewer;
 			registerMouseListener();
 		}
 
+		public void dispose() {
+			if (!viewer.getControl().isDisposed()) {
+				viewer.getControl().removeMouseMoveListener(moveListener);
+				viewer.getControl().removeMouseListener(clickListener);
+			}
+		}
+
 		protected void registerMouseListener() {
-			viewer.getControl().addMouseMoveListener(new MouseMoveListener() {
-				public void mouseMove(MouseEvent e) {
-					mouseLocation = new Point(e.x, e.y);
-				}
-			});
+			viewer.getControl().addMouseMoveListener(moveListener);
+			viewer.getControl().addMouseListener(clickListener);
 		}
 
-		public void selectionChanged(SelectionChangedEvent event) {
-			ViewerCell cell = viewer.getCell(mouseLocation);
-			if (cell == null || cell.getColumnIndex() != 0)
-				return;
-			Object firstElement = ((IStructuredSelection) event.getSelection()).getFirstElement();
-			if (firstElement instanceof ExecutionEvent) {
-				ExecutionEvent casted = (ExecutionEvent) firstElement;
-				if (casted.isRaised()) {
-					casted.setRaised(false);
-				} else if (casted.isScheduled()) {
-					casted.setScheduled(false);
-				} else {
-					casted.setScheduled(true);
-				}
-				viewer.refresh();
+		public void raiseEvent(ExecutionEvent event) {
+			if (event.isRaised()) {
+				event.setRaised(false);
+			} else if (event.isScheduled()) {
+				event.setScheduled(false);
+			} else {
+				event.setScheduled(true);
 			}
+			viewer.refresh();
 		}
 	}
 }