/******************************************************************************* * Copyright (c) 2009 the CHISEL group and contributors. * 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: * Del Myers - initial API and implementation *******************************************************************************/ package ca.uvic.chisel.javasketch.ui.internal; import java.util.Map; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.HandlerEvent; import org.eclipse.core.commands.IHandler; import org.eclipse.core.commands.IHandler2; import org.eclipse.core.commands.IHandlerListener; import org.eclipse.core.runtime.ListenerList; import org.eclipse.debug.core.model.IProcess; import org.eclipse.debug.ui.DebugUITools; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.commands.ICommandService; import org.eclipse.ui.commands.IElementUpdater; import org.eclipse.ui.handlers.HandlerUtil; import org.eclipse.ui.menus.UIElement; import ca.uvic.chisel.javasketch.SketchPlugin; import ca.uvic.chisel.javasketch.launching.ITraceClient; public class TraceCommandHandler implements IHandler, IElementUpdater, IHandler2 { public static final String COMMAND_ID = "ca.uvic.chisel.javasketch.pauseResumeHandler"; ListenerList listeners; private boolean enabled; public TraceCommandHandler() { SketchPlugin.getDefault(); listeners = new ListenerList(); enabled = false; } @Override public void addHandlerListener(IHandlerListener handlerListener) { listeners.add(handlerListener); //make sure that the listener knows the enabled state. handlerListener.handlerChanged(new HandlerEvent(this, true, true)); } @Override public void dispose() { listeners.clear(); } @Override public Object execute(ExecutionEvent event) throws ExecutionException { IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event); ICommandService service = (ICommandService) window.getService(ICommandService.class); IProcess process = DebugUITools.getCurrentProcess(); ITraceClient client = SketchPlugin.getDefault().getAssociatedClient(process); if (client != null && client.canPauseTrace()) { if (!client.isPaused()) { client.pauseTrace(); } else { client.resumeTrace(); } } service.refreshElements(event.getCommand().getId(), null); return null; } @Override public boolean isEnabled() { return enabled; } @Override public boolean isHandled() { return true; } private void setEnabled(boolean enablement) { if (enablement != enabled) { enabled = enablement; HandlerEvent event = new HandlerEvent(this, true, false); for (Object o : listeners.getListeners()) { IHandlerListener listener = (IHandlerListener) o; listener.handlerChanged(event); } } } @Override public void removeHandlerListener(IHandlerListener handlerListener) { listeners.remove(handlerListener); } @SuppressWarnings("unchecked") @Override public void updateElement(UIElement element, Map parameters) { IProcess process = DebugUITools.getCurrentProcess(); ITraceClient client = SketchPlugin.getDefault().getAssociatedClient(process); if (client == null || client.isTerminated() || !client.canPauseTrace()) { //set the icon to "play" element.setIcon(SketchPlugin.imageDescriptorFromPlugin(SketchPlugin.PLUGIN_ID, "images/etool16/play_icon.png")); element.setText("Resume Trace"); element.setTooltip("Resumes a paused trace"); element.setChecked(false); setEnabled(false); } else { if (client.isPaused()) { //set the icon to "play" element.setIcon(SketchPlugin.imageDescriptorFromPlugin(SketchPlugin.PLUGIN_ID, "images/etool16/play_icon.png")); element.setText("Resume Trace"); element.setTooltip("Resumes a paused trace"); } else { //set the icon to "play" element.setIcon(SketchPlugin.imageDescriptorFromPlugin(SketchPlugin.PLUGIN_ID, "images/etool16/pause_icon.png")); element.setText("Pause Trace"); element.setTooltip("Pauses a running trace"); } setEnabled(true); } } @Override public void setEnabled(Object evaluationContext) { // System.out.println(); } }