From e9b297390b4586878022a3269f7e83f9f29d74f8 Mon Sep 17 00:00:00 2001 From: Alvaro Sanchez-Leon Date: Thu, 1 Sep 2016 09:14:40 -0400 Subject: [PATCH] Bug 303808: Add a terminate button to the debugger console view Change-Id: I67b37be1991c564dca961d3d2f85b9ba0da098c5 --- .../META-INF/MANIFEST.MF | 2 +- .../DebuggerConsoleDropDownAction.java | 1 + .../debuggerconsole/DebuggerConsoleView.java | 2 + .../icons/full/dlcl16/stop.gif | Bin 0 -> 152 bytes .../icons/full/elcl16/stop.gif | Bin 0 -> 215 bytes .../internal/ui/console/ConsoleMessages.java | 3 + .../ui/console/ConsoleMessages.properties | 3 + .../ui/console/GdbBasicCliConsolePage.java | 6 +- .../GdbConsoleTerminateLaunchAction.java | 72 ++++++++++++++++++ .../ui/console/GdbFullCliConsolePage.java | 10 +++ .../ui/console/IConsoleImagesConst.java | 2 + 11 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/icons/full/dlcl16/stop.gif create mode 100644 dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/icons/full/elcl16/stop.gif create mode 100644 dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/GdbConsoleTerminateLaunchAction.java diff --git a/debug/org.eclipse.cdt.debug.ui/META-INF/MANIFEST.MF b/debug/org.eclipse.cdt.debug.ui/META-INF/MANIFEST.MF index cb55d1ce0b7..88ba7a46921 100644 --- a/debug/org.eclipse.cdt.debug.ui/META-INF/MANIFEST.MF +++ b/debug/org.eclipse.cdt.debug.ui/META-INF/MANIFEST.MF @@ -26,7 +26,7 @@ Export-Package: org.eclipse.cdt.debug.internal.ui.propertypages;x-internal:=true, org.eclipse.cdt.debug.internal.ui.sourcelookup;x-friends:="org.eclipse.cdt.dsf.ui", org.eclipse.cdt.debug.internal.ui.views;x-internal:=true, - org.eclipse.cdt.debug.internal.ui.views.debuggerconsole;x-internal:=true, + org.eclipse.cdt.debug.internal.ui.views.debuggerconsole;x-friends:="org.eclipse.cdt.dsf.gdb.ui", org.eclipse.cdt.debug.internal.ui.views.executables;x-internal:=true, org.eclipse.cdt.debug.internal.ui.views.memory;x-internal:=true, org.eclipse.cdt.debug.internal.ui.views.modules;x-internal:=true, diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/debuggerconsole/DebuggerConsoleDropDownAction.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/debuggerconsole/DebuggerConsoleDropDownAction.java index 2811a3162dd..96d0e64034e 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/debuggerconsole/DebuggerConsoleDropDownAction.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/debuggerconsole/DebuggerConsoleDropDownAction.java @@ -35,6 +35,7 @@ public class DebuggerConsoleDropDownAction extends Action implements IMenuCreato public DebuggerConsoleDropDownAction(DebuggerConsoleView view) { fView = view; + setId(DebuggerConsoleView.DROP_DOWN_ACTION_ID); setText(ConsoleMessages.ConsoleDropDownAction_name); setToolTipText(ConsoleMessages.ConsoleDropDownAction_description); setImageDescriptor(CDebugImages.DESC_OBJS_DEBUGGER_CONSOLE_SELECT); diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/debuggerconsole/DebuggerConsoleView.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/debuggerconsole/DebuggerConsoleView.java index 8a3fb23eb28..fd513db0950 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/debuggerconsole/DebuggerConsoleView.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/debuggerconsole/DebuggerConsoleView.java @@ -45,6 +45,8 @@ public class DebuggerConsoleView extends PageBookView implements IConsoleView, IDebuggerConsoleView, IConsoleListener, IPropertyChangeListener { public static final String DEBUGGER_CONSOLE_VIEW_ID = "org.eclipse.cdt.debug.ui.debuggerConsoleView"; //$NON-NLS-1$ + public static final String DROP_DOWN_ACTION_ID = DEBUGGER_CONSOLE_VIEW_ID + ".DebuggerConsoleDropDownAction"; //$NON-NLS-1$ + /** The console being displayed, or null if none */ private IDebuggerConsole fActiveConsole; diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/icons/full/dlcl16/stop.gif b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/icons/full/dlcl16/stop.gif new file mode 100644 index 0000000000000000000000000000000000000000..4f3dcba276ee18f922dcd20053600d335c98e340 GIT binary patch literal 152 zcmZ?wbhEHb6krfw*v!CiV8wsX8YyoAn_OxP1- v^X5-MJ9|R`hs6UiuI7Z3A`*RF3V|6ssvI|T9=2;$E}Y+=<`d__z+epkhGsnf literal 0 HcmV?d00001 diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/icons/full/elcl16/stop.gif b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/icons/full/elcl16/stop.gif new file mode 100644 index 0000000000000000000000000000000000000000..dc47edf06955eca15fee8118b3be43f019cae3f4 GIT binary patch literal 215 zcmZ?wbhEHb6krfwIKsg2!ocE%g~JO6j~5;RA2JFK2q?TzFgT%MaUr4LM1aGI2#+5d zR-ACK*kNJuA|T*HMa7R5D{jn~@&EsS2I7F?PZmZ71|bF=kaCcn46GpwRQggf=VfHM zdA;5hI8&!2R^8~yn?1}ARoqe>boi8dCIuYG;hM1Y7_-A#COOZb=7bkjye)1o4Ymf! gw+AT-W$b32*d*n&{`ylDm&EhWl|vdDg%laA0bm40+yDRo literal 0 HcmV?d00001 diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/ConsoleMessages.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/ConsoleMessages.java index 980faeb5537..ec30d8ec3e3 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/ConsoleMessages.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/ConsoleMessages.java @@ -28,6 +28,9 @@ public class ConsoleMessages extends NLS { public static String ConsoleInvertColorsAction_name; public static String ConsoleInvertColorsAction_description; + public static String ConsoleTerminateLaunchAction_name; + public static String ConsoleTerminateLaunchAction_description; + static { // initialize resource bundle NLS.initializeMessages(ConsoleMessages.class.getName(), ConsoleMessages.class); diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/ConsoleMessages.properties b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/ConsoleMessages.properties index 7eeef5674cb..9c313936d0b 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/ConsoleMessages.properties +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/ConsoleMessages.properties @@ -20,3 +20,6 @@ ConsoleMessages_save_info_io_error_desc=Error during save console content. Task ConsoleInvertColorsAction_name=Invert Colors ConsoleInvertColorsAction_description=Invert the colors for the gdb consoles + +ConsoleTerminateLaunchAction_name=Terminate Launch +ConsoleTerminateLaunchAction_description=Terminate the launch associated to this GDB console diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/GdbBasicCliConsolePage.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/GdbBasicCliConsolePage.java index 40341438efc..de1c9125050 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/GdbBasicCliConsolePage.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/GdbBasicCliConsolePage.java @@ -7,6 +7,7 @@ *******************************************************************************/ package org.eclipse.cdt.dsf.gdb.internal.ui.console; +import org.eclipse.cdt.debug.internal.ui.views.debuggerconsole.DebuggerConsoleView; import org.eclipse.cdt.debug.ui.debuggerconsole.IDebuggerConsole; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.debug.core.ILaunch; @@ -27,6 +28,7 @@ public class GdbBasicCliConsolePage extends IOConsolePage implements IDebugConte private final IDebuggerConsole fConsole; private GdbConsoleInvertColorsAction fInvertColorsAction; + private GdbConsoleTerminateLaunchAction fTerminateLaunchAction; public GdbBasicCliConsolePage(GdbBasicCliConsole gdbConsole, IConsoleView view) { super(gdbConsole, view); @@ -49,16 +51,18 @@ public class GdbBasicCliConsolePage extends IOConsolePage implements IDebugConte @Override protected void configureToolBar(IToolBarManager mgr) { - // Don't do anything + mgr.insertBefore(DebuggerConsoleView.DROP_DOWN_ACTION_ID, fTerminateLaunchAction); } @Override protected void createActions() { fInvertColorsAction = new GdbConsoleInvertColorsAction(); + fTerminateLaunchAction = new GdbConsoleTerminateLaunchAction(fLaunch); } @Override protected void contextMenuAboutToShow(IMenuManager menuManager) { + menuManager.add(fTerminateLaunchAction); menuManager.add(fInvertColorsAction); } diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/GdbConsoleTerminateLaunchAction.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/GdbConsoleTerminateLaunchAction.java new file mode 100644 index 00000000000..99f7e815b47 --- /dev/null +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/GdbConsoleTerminateLaunchAction.java @@ -0,0 +1,72 @@ +/******************************************************************************* + * 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; + +import org.eclipse.cdt.dsf.gdb.internal.ui.GdbUIPlugin; +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) { + } +} diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/GdbFullCliConsolePage.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/GdbFullCliConsolePage.java index 3b002751d68..99439de3532 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/GdbFullCliConsolePage.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/GdbFullCliConsolePage.java @@ -13,6 +13,7 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.RejectedExecutionException; +import org.eclipse.cdt.debug.internal.ui.views.debuggerconsole.DebuggerConsoleView; import org.eclipse.cdt.debug.ui.debuggerconsole.IDebuggerConsole; import org.eclipse.cdt.debug.ui.debuggerconsole.IDebuggerConsoleView; import org.eclipse.cdt.dsf.concurrent.DsfRunnable; @@ -28,6 +29,7 @@ import org.eclipse.debug.ui.DebugUITools; import org.eclipse.debug.ui.contexts.DebugContextEvent; import org.eclipse.debug.ui.contexts.IDebugContextListener; import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.swt.SWT; @@ -59,6 +61,7 @@ public class GdbFullCliConsolePage extends Page implements IDebugContextListener private MenuManager fMenuManager; private GdbConsoleInvertColorsAction fInvertColorsAction; + private GdbConsoleTerminateLaunchAction fTerminateLaunchAction; /** The control for the terminal widget embedded in the console */ private ITerminalViewControl fTerminalControl; @@ -95,6 +98,7 @@ public class GdbFullCliConsolePage extends Page implements IDebugContextListener createTerminalControl(); createContextMenu(); + configureToolBar(getSite().getActionBars().getToolBarManager()); // Hook the terminal control to the GDB process attachTerminalToGdbProcess(); @@ -135,9 +139,15 @@ public class GdbFullCliConsolePage extends Page implements IDebugContextListener protected void createActions() { fInvertColorsAction = new GdbConsoleInvertColorsAction(); + fTerminateLaunchAction = new GdbConsoleTerminateLaunchAction(fLaunch); } + protected void configureToolBar(IToolBarManager mgr) { + mgr.insertBefore(DebuggerConsoleView.DROP_DOWN_ACTION_ID, fTerminateLaunchAction); + } + protected void contextMenuAboutToShow(IMenuManager menuManager) { + menuManager.add(fTerminateLaunchAction); menuManager.add(fInvertColorsAction); } diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/IConsoleImagesConst.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/IConsoleImagesConst.java index 08b9f6a9eb2..d33f9539210 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/IConsoleImagesConst.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/console/IConsoleImagesConst.java @@ -16,4 +16,6 @@ package org.eclipse.cdt.dsf.gdb.internal.ui.console; public interface IConsoleImagesConst { public static final String IMG_SAVE_CONSOLE = "icons/full/obj16/save_console.gif"; //$NON-NLS-1$ public static final String IMG_CONSOLE_INVERT_COLORS = "icons/full/obj16/console_invert_colors.gif"; //$NON-NLS-1$ + public static final String IMG_CONSOLE_TERMINATE_ACTIVE_COLOR = "icons/full/elcl16/stop.gif"; //$NON-NLS-1$ + public static final String IMG_CONSOLE_TERMINATE_DISABLED_COLOR = "icons/full/dlcl16/stop.gif"; //$NON-NLS-1$ }