/******************************************************************************* * Copyright (c) 2016 Ericsson and others. * 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 *******************************************************************************/ package org.eclipse.cdt.dsf.gdb.internal.ui.console.actions; import org.eclipse.cdt.dsf.gdb.internal.ui.GdbUIPlugin; import org.eclipse.cdt.dsf.gdb.internal.ui.console.ConsoleMessages; import org.eclipse.cdt.dsf.gdb.internal.ui.console.IConsoleImagesConst; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchesListener2; import org.eclipse.jface.action.Action; public class GdbConsoleTerminateLaunchAction extends Action implements ILaunchesListener2 { private final ILaunch fLaunch; public GdbConsoleTerminateLaunchAction(ILaunch launch) { fLaunch = launch; setText(ConsoleMessages.ConsoleTerminateLaunchAction_name); setToolTipText(ConsoleMessages.ConsoleTerminateLaunchAction_description); setImageDescriptor(GdbUIPlugin.getImageDescriptor(IConsoleImagesConst.IMG_CONSOLE_TERMINATE_ACTIVE_COLOR)); setDisabledImageDescriptor(GdbUIPlugin.getImageDescriptor(IConsoleImagesConst.IMG_CONSOLE_TERMINATE_DISABLED_COLOR)); if (fLaunch.isTerminated()) { // Launch already terminated setEnabled(false); } else { // Listen to launch events DebugPlugin.getDefault().getLaunchManager().addLaunchListener(this); } } @Override public void run() { try { fLaunch.terminate(); } catch (DebugException e) { GdbUIPlugin.log(new Status(IStatus.ERROR, GdbUIPlugin.PLUGIN_ID, "Unable to terminate launch", e)); //$NON-NLS-1$ } } @Override public void launchesTerminated(ILaunch[] launches) { // This notification can come from this action's run // or other types of termination e.g. program's exit for (ILaunch launch : launches) { if (launch.equals(fLaunch)) { setEnabled(false); DebugPlugin.getDefault().getLaunchManager().removeLaunchListener(this); break; } } } @Override public void launchesRemoved(ILaunch[] launches) { } @Override public void launchesAdded(ILaunch[] launches) { } @Override public void launchesChanged(ILaunch[] launches) { } }