1 /*******************************************************************************
2  * Copyright (c) 2008 IBM Corporation and others.
3  *
4  * This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License 2.0
6  * which accompanies this distribution, and is available at
7  * https://www.eclipse.org/legal/epl-2.0/
8  *
9  * SPDX-License-Identifier: EPL-2.0
10  *
11  * Contributors:
12  *     IBM Corporation - initial API and implementation
13  *******************************************************************************/
14 package org.eclipse.debug.examples.ui.midi.adapters;
15 
16 import java.util.Timer;
17 import java.util.TimerTask;
18 
19 import org.eclipse.debug.core.DebugEvent;
20 import org.eclipse.debug.examples.core.midi.launcher.ClockControl;
21 import org.eclipse.debug.examples.core.midi.launcher.MidiLaunch;
22 import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
23 import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta;
24 import org.eclipse.debug.internal.ui.viewers.update.DebugEventHandler;
25 
26 /**
27  * Listens to events from sequencer controls and fires corresponding
28  * deltas to update the viewer.
29  *
30  * @since 1.0
31  */
32 public class ControlEventHandler extends DebugEventHandler {
33 
34 	/**
35 	 * Associated launch
36 	 */
37 	private MidiLaunch fLaunch;
38 
39 	/**
40 	 * Timer used to update clock
41 	 */
42 	private Timer fTimer;
43 
44 	/**
45 	 * @param proxy
46 	 */
ControlEventHandler(SequencerControlsModelProxy proxy)47 	public ControlEventHandler(SequencerControlsModelProxy proxy) {
48 		super(proxy);
49 		fLaunch = proxy.getMidiLaunch();
50 	}
51 
init()52 	protected void init() {
53 		if (!fLaunch.isSuspended() && !fLaunch.isTerminated() && !fLaunch.isDisconnected()) {
54 			startTimer();
55 		}
56 	}
57 
58 	@Override
handlesEvent(DebugEvent event)59 	protected boolean handlesEvent(DebugEvent event) {
60 		return true;
61 	}
62 
63 	@Override
dispose()64 	public synchronized void dispose() {
65 		super.dispose();
66 		if (fTimer != null) {
67 			fTimer.cancel();
68 		}
69 	}
70 
71 	@Override
refreshRoot(DebugEvent event)72 	protected void refreshRoot(DebugEvent event) {
73 		ModelDelta delta = new ModelDelta(fLaunch, IModelDelta.CONTENT);
74 		fireDelta(delta);
75 	}
76 
77 	@Override
handleResume(DebugEvent event)78 	protected void handleResume(DebugEvent event) {
79 		super.handleResume(event);
80 		startTimer();
81 	}
82 
83 	/**
84 	 * Starts a timer to update the clock
85 	 */
startTimer()86 	private void startTimer() {
87 		fTimer = new Timer(true);
88 		fTimer.schedule(new TimerTask() {
89 			@Override
90 			public void run() {
91 				ModelDelta delta = new ModelDelta(fLaunch, IModelDelta.NO_CHANGE);
92 				delta = delta.addNode(new ClockControl(fLaunch), IModelDelta.STATE | IModelDelta.CONTENT);
93 				fireDelta(delta);
94 			}
95 		}, 0, 100);
96 	}
97 
98 	@Override
handleSuspend(DebugEvent event)99 	protected void handleSuspend(DebugEvent event) {
100 		super.handleSuspend(event);
101 		if (fTimer != null) {
102 			fTimer.cancel();
103 			fTimer = null;
104 		}
105 	}
106 
107 
108 
109 
110 }
111