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