From 814e8ae7b615cb6f827f732e668d5c090f791667 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Norbert=20Pl=F6tt?= Date: Thu, 31 Aug 2006 07:26:28 +0000 Subject: [PATCH] Contribution from bug #154854 - GDB console - verbose console mode and save console content buttons --- .../META-INF/MANIFEST.MF | 3 +- .../icons/obj16/save_console.gif | Bin 0 -> 641 bytes debug/org.eclipse.cdt.debug.mi.ui/plugin.xml | 10 ++ .../ui/actions/VerboseModeActionDelegate.java | 5 +- .../ui/console/MiConsolePageParticipant.java | 110 ++++++++++++++++++ .../ui/console/VerboseModeChangedEvent.java | 29 +++++ .../actions/IMiConsoleImagesConst.java | 17 +++ .../ui/console/actions/MiConsoleMessages.java | 29 +++++ .../actions/MiConsoleMessages.properties | 4 + .../console/actions/MiConsoleSaveAction.java | 77 ++++++++++++ .../actions/MiConsoleVerboseModeAction.java | 41 +++++++ 11 files changed, 323 insertions(+), 2 deletions(-) create mode 100644 debug/org.eclipse.cdt.debug.mi.ui/icons/obj16/save_console.gif create mode 100644 debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/MiConsolePageParticipant.java create mode 100644 debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/VerboseModeChangedEvent.java create mode 100644 debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/actions/IMiConsoleImagesConst.java create mode 100644 debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/actions/MiConsoleMessages.java create mode 100644 debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/actions/MiConsoleMessages.properties create mode 100644 debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/actions/MiConsoleSaveAction.java create mode 100644 debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/actions/MiConsoleVerboseModeAction.java diff --git a/debug/org.eclipse.cdt.debug.mi.ui/META-INF/MANIFEST.MF b/debug/org.eclipse.cdt.debug.mi.ui/META-INF/MANIFEST.MF index 2260512cf2f..687f71473dd 100644 --- a/debug/org.eclipse.cdt.debug.mi.ui/META-INF/MANIFEST.MF +++ b/debug/org.eclipse.cdt.debug.mi.ui/META-INF/MANIFEST.MF @@ -22,5 +22,6 @@ Require-Bundle: org.eclipse.core.resources, org.eclipse.debug.core, org.eclipse.debug.ui, org.eclipse.core.runtime, - org.eclipse.ui.console + org.eclipse.ui.console, + org.eclipse.jface.text Eclipse-LazyStart: true diff --git a/debug/org.eclipse.cdt.debug.mi.ui/icons/obj16/save_console.gif b/debug/org.eclipse.cdt.debug.mi.ui/icons/obj16/save_console.gif new file mode 100644 index 0000000000000000000000000000000000000000..03c57ef6f7c96525df702e31f957aef325e7976b GIT binary patch literal 641 zcmZ?wbhEHb6krfwc*el+6w~t;=?ud9vy7?cE^q z*1q%4_Md-x_|o&km!6%t_VVPl7w2!kK6mTY)%$O+-hXrZ@w-PaKBPA<&u(2-(6RIc zNcPq9H=oX5zOnP@<=ao*J$&)u*_+SB-Al^t7r*)NC8BgCNXKA3lG*{qoc6&p(=`E@+;%;PcmSt<&eX&6wXY6Nu(* zKYXmPxvgvVyp4PJcg>#j?dQ+$KYuRWyzbxMUr)~4|NsA=VIY9wPZmZ7h6n~7kmaB_ zVPL=05Yg1!(%NJY(CHu8)8pS6U=ZQ!>FF0XV`iA&RG$bh373G7B_Y8}0v38lc$jkp z*ll!n+ZbSO?jGT2q90(p-`3i}AwXZ>F~UaEIKb83)ydw;HNe=|D#FajC?Nda{qO*G z4a*2qHFa70*V5{0rV%=NVq$vYs$af{s;KHjNGfZvq&V0==nzwKTXW!2f)j@T4}%9w zK`UcNx7G$7dxeM0% + + + + + + + diff --git a/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/internal/ui/actions/VerboseModeActionDelegate.java b/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/internal/ui/actions/VerboseModeActionDelegate.java index 7df2d2cd17b..944308f4b05 100644 --- a/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/internal/ui/actions/VerboseModeActionDelegate.java +++ b/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/internal/ui/actions/VerboseModeActionDelegate.java @@ -11,6 +11,7 @@ package org.eclipse.cdt.debug.mi.internal.ui.actions; import org.eclipse.cdt.debug.mi.core.GDBProcess; +import org.eclipse.cdt.debug.mi.ui.console.VerboseModeChangedEvent; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; @@ -35,6 +36,7 @@ public class VerboseModeActionDelegate extends ActionDelegate implements IObject if ( fProcess != null ) { boolean enabled = fProcess.getTarget().isVerboseModeEnabled(); fProcess.getTarget().enableVerboseMode( !enabled ); + fProcess.getTarget().getMISession().notifyObservers(new VerboseModeChangedEvent(fProcess.getTarget().getMISession(),0)); } } @@ -44,7 +46,8 @@ public class VerboseModeActionDelegate extends ActionDelegate implements IObject public void selectionChanged( IAction action, ISelection selection ) { IStructuredSelection s = (IStructuredSelection)selection; fProcess = ( !s.isEmpty() ) ? (GDBProcess)s.getFirstElement() : null; - action.setEnabled( fProcess != null ); + action.setEnabled( fProcess != null && !fProcess.isTerminated()); action.setChecked( fProcess != null && fProcess.getTarget().isVerboseModeEnabled() ); } + } diff --git a/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/MiConsolePageParticipant.java b/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/MiConsolePageParticipant.java new file mode 100644 index 00000000000..a18d989b2da --- /dev/null +++ b/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/MiConsolePageParticipant.java @@ -0,0 +1,110 @@ +/******************************************************************************* + * Copyright (c) 2006 STMicroelectronics. + * 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: + * STMicroelectronics - Process console enhancements + *******************************************************************************/ +package org.eclipse.cdt.debug.mi.ui.console; + +import java.util.Observable; +import java.util.Observer; + +import org.eclipse.cdt.debug.mi.core.GDBProcess; +import org.eclipse.cdt.debug.mi.ui.console.actions.MiConsoleSaveAction; +import org.eclipse.cdt.debug.mi.ui.console.actions.MiConsoleVerboseModeAction; +import org.eclipse.debug.core.DebugEvent; +import org.eclipse.debug.core.DebugPlugin; +import org.eclipse.debug.core.IDebugEventSetListener; +import org.eclipse.jface.action.Separator; +import org.eclipse.ui.IActionBars; +import org.eclipse.ui.console.IConsoleConstants; +import org.eclipse.ui.console.IConsolePageParticipant; +import org.eclipse.ui.part.IPageBookViewPage; +import org.eclipse.ui.console.IConsole; + +/** + * Enhances ProcessConsole when the process attached is a GDBProcess + * + */ +public class MiConsolePageParticipant implements IConsolePageParticipant, IDebugEventSetListener, Observer { + + private MiConsoleSaveAction fSaveConsole = null; + private MiConsoleVerboseModeAction fVerboseMode = null; + private org.eclipse.debug.ui.console.IConsole fConsole = null; + private org.eclipse.cdt.debug.mi.core.GDBProcess GDBProcess = null; + + public void activated() { + } + + public void deactivated() { + } + + public void dispose() { + if(GDBProcess != null) { + DebugPlugin.getDefault().removeDebugEventListener(this); + } + fSaveConsole = null; + fVerboseMode = null; + GDBProcess = null; + fConsole = null; + } + + public void init(IPageBookViewPage page, IConsole console) { + + if(console instanceof org.eclipse.debug.ui.console.IConsole) + { + fConsole = (org.eclipse.debug.ui.console.IConsole) console; + if(fConsole.getProcess() instanceof GDBProcess) { + + GDBProcess = (GDBProcess) fConsole.getProcess(); + + // add two new actions: save console content and verbose console mode switcher + IActionBars bars = page.getSite().getActionBars(); + bars.getToolBarManager().appendToGroup(IConsoleConstants.LAUNCH_GROUP, new Separator()); + fSaveConsole = new MiConsoleSaveAction(fConsole); + bars.getToolBarManager().appendToGroup(IConsoleConstants.LAUNCH_GROUP, fSaveConsole); + fVerboseMode = new MiConsoleVerboseModeAction(fConsole); + bars.getToolBarManager().appendToGroup(IConsoleConstants.LAUNCH_GROUP, fVerboseMode); + bars.getToolBarManager().appendToGroup(IConsoleConstants.LAUNCH_GROUP, new Separator()); + + // add a debug event listener + DebugPlugin.getDefault().addDebugEventListener(this); + + // register this object as MISession observer + GDBProcess.getTarget().getMISession().addObserver(this); + } + } + } + + public Object getAdapter(Class adapter) { + return null; + } + + public void handleDebugEvents(DebugEvent[] events) { + for (int i = 0; i < events.length; i++) { + DebugEvent event = events[i]; + if (event.getSource().equals(GDBProcess)) { + if (fVerboseMode != null) { + fVerboseMode.setEnabled(!GDBProcess.isTerminated()); + } + } + } + } + + /** + * Handle MISession notification + */ + public void update(Observable arg0, Object arg1) { + if((arg1!=null) && (arg1 instanceof VerboseModeChangedEvent) && (fVerboseMode != null)) { + try { + fVerboseMode.setChecked(GDBProcess.getTarget().isVerboseModeEnabled()); + } catch (Exception e) { + } + } + } + +} diff --git a/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/VerboseModeChangedEvent.java b/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/VerboseModeChangedEvent.java new file mode 100644 index 00000000000..c56afa46fc0 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/VerboseModeChangedEvent.java @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2006 STMicroelectronics. + * 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: + * STMicroelectronics - Process console enhancements + *******************************************************************************/ +package org.eclipse.cdt.debug.mi.ui.console; + +import org.eclipse.cdt.debug.mi.core.MISession; +import org.eclipse.cdt.debug.mi.core.event.MIEvent; + +/** + * MISession event, verbose console mode changed + * + */ +public class VerboseModeChangedEvent extends MIEvent { + + private static final long serialVersionUID = 1L; + + public VerboseModeChangedEvent(MISession session, int token) { + super(session, token); + setPropagate(false); + } + +} diff --git a/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/actions/IMiConsoleImagesConst.java b/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/actions/IMiConsoleImagesConst.java new file mode 100644 index 00000000000..d04f579db62 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/actions/IMiConsoleImagesConst.java @@ -0,0 +1,17 @@ +/******************************************************************************* + * Copyright (c) 2006 STMicroelectronics. + * 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: + * STMicroelectronics - Process console enhancements + *******************************************************************************/ +package org.eclipse.cdt.debug.mi.ui.console.actions; + +public interface IMiConsoleImagesConst { + + public static final String IMG_SAVE_CONSOLE = "icons/obj16/save_console.gif"; + public static final String IMG_VERBOSE_CONSOLE = "icons/obj16/verbose_mode_co.gif"; +} diff --git a/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/actions/MiConsoleMessages.java b/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/actions/MiConsoleMessages.java new file mode 100644 index 00000000000..e795ddfe2a5 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/actions/MiConsoleMessages.java @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2006 STMicroelectronics. + * 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: + * STMicroelectronics - Process console enhancements + *******************************************************************************/ +package org.eclipse.cdt.debug.mi.ui.console.actions; + +import org.eclipse.osgi.util.NLS; + +public class MiConsoleMessages extends NLS { + private static final String BUNDLE_NAME = "org.eclipse.cdt.debug.mi.ui.console.actions.MiConsoleMessages"; + + public static String saveActionTooltip; + public static String verboseActionTooltip; + + public static String confirmOverWrite; + public static String infoIOError; + + static { + // load message values from bundle file + NLS.initializeMessages(BUNDLE_NAME, MiConsoleMessages.class); + } + +} diff --git a/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/actions/MiConsoleMessages.properties b/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/actions/MiConsoleMessages.properties new file mode 100644 index 00000000000..27b122d6efa --- /dev/null +++ b/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/actions/MiConsoleMessages.properties @@ -0,0 +1,4 @@ +saveActionTooltip=Save console content +verboseActionTooltip=Verbose console mode +confirmOverWrite=File exists, do you want overwrite it? +infoIOError=Error during save console content. Task failed. diff --git a/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/actions/MiConsoleSaveAction.java b/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/actions/MiConsoleSaveAction.java new file mode 100644 index 00000000000..5f7d5e1ec47 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/actions/MiConsoleSaveAction.java @@ -0,0 +1,77 @@ +/******************************************************************************* + * Copyright (c) 2006 STMicroelectronics. + * 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: + * STMicroelectronics - Process console enhancements + *******************************************************************************/ + +package org.eclipse.cdt.debug.mi.ui.console.actions; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; + +import org.eclipse.cdt.debug.mi.internal.ui.MIUIPlugin; +import org.eclipse.debug.ui.console.IConsole; +import org.eclipse.jface.action.Action; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.BusyIndicator; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.FileDialog; + +/** + * Save console content + * + */ +public class MiConsoleSaveAction extends Action{ + + private IConsole fConsole; + private String fileName; + + public MiConsoleSaveAction(IConsole console) { + super(); + setToolTipText(MiConsoleMessages.saveActionTooltip); + setImageDescriptor(MIUIPlugin.imageDescriptorFromPlugin(MIUIPlugin.PLUGIN_ID,IMiConsoleImagesConst.IMG_SAVE_CONSOLE)); + fConsole = console; + } + + public void run() { + + FileDialog fileDialog = new FileDialog(Display.getCurrent().getActiveShell(), SWT.SAVE); + fileName = fileDialog.open(); + + Runnable saveJob = new Runnable() { + public void run() { + saveContent(); + } + }; + BusyIndicator.showWhile(Display.getCurrent(), saveJob); + + } + + protected void saveContent() { + boolean confirmed = true; + + try { + File f = new File(fileName); + if(f.exists()) { + confirmed = MessageDialog.openQuestion(Display.getCurrent().getActiveShell(), "Confirm overwrite", MiConsoleMessages.confirmOverWrite); + } + if(confirmed) { + BufferedWriter out = new BufferedWriter(new FileWriter(fileName)); + out.write(fConsole.getDocument().get()); + out.close(); + } + } catch (IOException e) { + MessageDialog.openError(Display.getCurrent().getActiveShell(),"Error",MiConsoleMessages.infoIOError); + } + + } + +} diff --git a/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/actions/MiConsoleVerboseModeAction.java b/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/actions/MiConsoleVerboseModeAction.java new file mode 100644 index 00000000000..205445b2876 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.mi.ui/src/org/eclipse/cdt/debug/mi/ui/console/actions/MiConsoleVerboseModeAction.java @@ -0,0 +1,41 @@ +/******************************************************************************* + * Copyright (c) 2006 STMicroelectronics. + * 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: + * STMicroelectronics - Process console enhancements + *******************************************************************************/ +package org.eclipse.cdt.debug.mi.ui.console.actions; + +import org.eclipse.cdt.debug.mi.core.GDBProcess; +import org.eclipse.cdt.debug.mi.internal.ui.MIUIPlugin; +import org.eclipse.debug.ui.console.IConsole; +import org.eclipse.jface.action.Action; + +/** + * Verbose console mode switcher + * + */ +public class MiConsoleVerboseModeAction extends Action { + + private IConsole fConsole; + + public MiConsoleVerboseModeAction(IConsole console) { + super(); + setToolTipText(MiConsoleMessages.verboseActionTooltip); + setImageDescriptor(MIUIPlugin.imageDescriptorFromPlugin(MIUIPlugin.PLUGIN_ID,IMiConsoleImagesConst.IMG_VERBOSE_CONSOLE)); + fConsole = console; + GDBProcess fProcess = (GDBProcess) fConsole.getProcess(); + setChecked(fProcess.getTarget().getMISession().isVerboseModeEnabled()); + } + + public void run() { + GDBProcess fProcess = (GDBProcess) fConsole.getProcess(); + fProcess.getTarget().enableVerboseMode(isChecked()); + } + + +}