From 8d6b618921efdd9804455497e71265d65074ca9e Mon Sep 17 00:00:00 2001 From: Mikhail Khodjaiants Date: Mon, 26 Aug 2002 23:13:18 +0000 Subject: [PATCH] Add 'Enable/Disable Breakpoint' action. --- .../plugin.properties | 3 + debug/org.eclipse.cdt.debug.ui/plugin.xml | 7 + .../AbstractBreakpointRulerAction.java | 163 ++++++++++++++++++ .../EnableDisableBreakpointRulerAction.java | 64 +++++++ ...eDisableBreakpointRulerActionDelegate.java | 17 ++ .../ManageBreakpointRulerActionDelegate.java | 2 +- .../eclipse/cdt/debug/ui/CDebugUIPlugin.java | 10 ++ .../cdt/debug/ui/ICDebugUIConstants.java | 5 + 8 files changed, 270 insertions(+), 1 deletion(-) create mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/AbstractBreakpointRulerAction.java create mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/EnableDisableBreakpointRulerAction.java create mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/EnableDisableBreakpointRulerActionDelegate.java diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.properties b/debug/org.eclipse.cdt.debug.ui/plugin.properties index bef9d6ec5e0..a1b98474da7 100644 --- a/debug/org.eclipse.cdt.debug.ui/plugin.properties +++ b/debug/org.eclipse.cdt.debug.ui/plugin.properties @@ -15,3 +15,6 @@ CDebuggerPage.name=C Debugger UI Page DebugActionSet.label=DebugActionSet RestartAction.label=Restart RestartAction.tooltip=Restart + +AddBreakpoint.label=Add/Remove &Breakpoint +EnableBreakpoint.label=T&oggle Breakpoint diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.xml b/debug/org.eclipse.cdt.debug.ui/plugin.xml index 93084ef8a10..ccba1d6e43d 100644 --- a/debug/org.eclipse.cdt.debug.ui/plugin.xml +++ b/debug/org.eclipse.cdt.debug.ui/plugin.xml @@ -111,6 +111,13 @@ + + null if there is no applicable resource. + * + * @return the resource for which to create the marker or null + */ + protected IResource getResource() + { + IEditorInput input = fTextEditor.getEditorInput(); + IResource resource = (IResource)input.getAdapter( IFile.class ); + if ( resource == null ) + { + resource = (IResource)input.getAdapter( IResource.class ); + } + return resource; + } + + protected boolean breakpointAtRulerLine( ICLineBreakpoint cBreakpoint ) throws CoreException + { + AbstractMarkerAnnotationModel model = getAnnotationModel(); + if ( model != null ) + { + Position position = model.getMarkerPosition( cBreakpoint.getMarker() ); + if ( position != null ) + { + IDocumentProvider provider = getTextEditor().getDocumentProvider(); + IDocument doc = provider.getDocument( getTextEditor().getEditorInput() ); + try + { + int markerLineNumber = doc.getLineOfOffset( position.getOffset() ); + int rulerLine = getInfo().getLineOfLastMouseButtonActivity(); + if ( rulerLine == markerLineNumber ) + { + if ( getTextEditor().isDirty() ) + { + return cBreakpoint.getLineNumber() == markerLineNumber + 1; + } + return true; + } + } + catch ( BadLocationException x ) + { + CDebugUIPlugin.log( x ); + } + } + } + + return false; + } + + protected IBreakpoint getBreakpoint() + { + return fBreakpoint; + } + + protected void setBreakpoint( IBreakpoint breakpoint ) + { + fBreakpoint = breakpoint; + } + + /** + * Returns the AbstractMarkerAnnotationModel of the editor's input. + * + * @return the marker annotation model + */ + protected AbstractMarkerAnnotationModel getAnnotationModel() + { + IDocumentProvider provider = fTextEditor.getDocumentProvider(); + IAnnotationModel model = provider.getAnnotationModel( getTextEditor().getEditorInput() ); + if ( model instanceof AbstractMarkerAnnotationModel ) + { + return (AbstractMarkerAnnotationModel)model; + } + return null; + } +} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/EnableDisableBreakpointRulerAction.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/EnableDisableBreakpointRulerAction.java new file mode 100644 index 00000000000..5de26a7f8b5 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/EnableDisableBreakpointRulerAction.java @@ -0,0 +1,64 @@ +package org.eclipse.cdt.debug.internal.ui.actions; + +import org.eclipse.cdt.debug.ui.CDebugUIPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.jface.dialogs.ErrorDialog; +import org.eclipse.jface.text.source.IVerticalRulerInfo; +import org.eclipse.ui.texteditor.ITextEditor; + +public class EnableDisableBreakpointRulerAction extends AbstractBreakpointRulerAction +{ + /** + * Creates the action to enable/disable breakpoints + */ + public EnableDisableBreakpointRulerAction( ITextEditor editor, IVerticalRulerInfo info ) + { + setInfo( info ); + setTextEditor( editor ); + setText( "&Enable Breakpoint" ); + } + + /** + * @see Action#run() + */ + public void run() + { + if (getBreakpoint() != null) + { + try + { + getBreakpoint().setEnabled( !getBreakpoint().isEnabled() ); + } + catch (CoreException e) + { + ErrorDialog.openError( getTextEditor().getEditorSite().getShell(), + "Enabling/disabling breakpoints", + "Exceptions occurred enabling disabling the breakpoint", + e.getStatus() ); + } + } + } + + /** + * @see IUpdate#update() + */ + public void update() + { + setBreakpoint(determineBreakpoint()); + if ( getBreakpoint() == null ) + { + setEnabled( false ); + return; + } + setEnabled( true ); + try + { + boolean enabled = getBreakpoint().isEnabled(); + setText( enabled ? "&Disable Breakpoint" : "&Enable Breakpoint" ); + } + catch( CoreException ce ) + { + CDebugUIPlugin.log( ce ); + } + } +} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/EnableDisableBreakpointRulerActionDelegate.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/EnableDisableBreakpointRulerActionDelegate.java new file mode 100644 index 00000000000..ae6d4f68f47 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/EnableDisableBreakpointRulerActionDelegate.java @@ -0,0 +1,17 @@ +package org.eclipse.cdt.debug.internal.ui.actions; + +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.text.source.IVerticalRulerInfo; +import org.eclipse.ui.texteditor.AbstractRulerActionDelegate; +import org.eclipse.ui.texteditor.ITextEditor; + +public class EnableDisableBreakpointRulerActionDelegate extends AbstractRulerActionDelegate +{ + /** + * @see AbstractRulerActionDelegate#createAction(ITextEditor, IVerticalRulerInfo) + */ + protected IAction createAction( ITextEditor editor, IVerticalRulerInfo rulerInfo ) + { + return new EnableDisableBreakpointRulerAction( editor, rulerInfo ); + } +} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/ManageBreakpointRulerActionDelegate.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/ManageBreakpointRulerActionDelegate.java index cc2a72777d2..acf1f6d036a 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/ManageBreakpointRulerActionDelegate.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/ManageBreakpointRulerActionDelegate.java @@ -38,7 +38,7 @@ public class ManageBreakpointRulerActionDelegate extends AbstractRulerActionDele /* (non-Javadoc) * @see org.eclipse.ui.texteditor.AbstractRulerActionDelegate#createAction(ITextEditor, IVerticalRulerInfo) */ - protected IAction createAction( ITextEditor editor, IVerticalRulerInfo rulerInfo ) + public IAction createAction( ITextEditor editor, IVerticalRulerInfo rulerInfo ) { return new ManageBreakpointRulerAction( rulerInfo, editor ); } diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/CDebugUIPlugin.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/CDebugUIPlugin.java index 3e6292dbebd..3ff61789550 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/CDebugUIPlugin.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/CDebugUIPlugin.java @@ -164,6 +164,16 @@ public class CDebugUIPlugin extends AbstractUIPlugin public static void log(IStatus status) { getDefault().getLog().log(status); } + + /** + * Logs an internal error with the specified throwable + * + * @param e the exception to be logged + */ + public static void log( Throwable e ) + { + log( new Status( IStatus.ERROR, getUniqueIdentifier(), ICDebugUIConstants.INTERNAL_ERROR, "Internal Error", e ) ); + } public ILaunchConfigurationTab getDebuggerPage(String debuggerID) { if (fDebuggerPageMap == null) { diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/ICDebugUIConstants.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/ICDebugUIConstants.java index 1d566e649c1..7af6bf6e79a 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/ICDebugUIConstants.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/ICDebugUIConstants.java @@ -32,4 +32,9 @@ public interface ICDebugUIConstants * Memory view identifier (value "org.eclipse.cdt.debug.ui.MemoryView"). */ public static final String ID_MEMORY_VIEW = "org.eclipse.cdt.debug.ui.MemoryView"; //$NON-NLS-1$ + + /** + * Status code indicating an unexpected internal error. + */ + public static final int INTERNAL_ERROR = 150; }