diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.xml b/debug/org.eclipse.cdt.debug.ui/plugin.xml index 4775d2e9bc2..4fdbc54d2f8 100644 --- a/debug/org.eclipse.cdt.debug.ui/plugin.xml +++ b/debug/org.eclipse.cdt.debug.ui/plugin.xml @@ -206,6 +206,14 @@ + + + id="org.eclipse.cdt.debug.internal.ui.actions.RunToLineActionDelegate"> 0 ) + { + enabled = ( getDebugTarget() != null && ((IRunToLine)getDebugTarget()).canRunToLine( resource, lineNumber ) ); + } + setEnabled( enabled ); + } + + /** + * @see Action#run() + */ + public void run() + { + runToLine( getResource(), getLineNumber() ); + } + + /* (non-Javadoc) + * @see org.eclipse.ui.ISelectionListener#selectionChanged(IWorkbenchPart, ISelection) + */ + public void selectionChanged( IWorkbenchPart part, ISelection selection ) + { + IDebugTarget target = null; + if ( part.getSite().getId().equals( IDebugUIConstants.ID_DEBUG_VIEW ) ) + { + if ( selection != null && selection instanceof IStructuredSelection ) + { + Object element = ((IStructuredSelection)selection).getFirstElement(); + if ( element != null && element instanceof IDebugElement ) + { + IDebugTarget target1 = ((IDebugElement)element).getDebugTarget(); + if ( target1 != null && target1 instanceof IRunToLine ) + { + target = target1; + } + } + } + setDebugTarget( target ); + update(); + } + } + + protected void initializeDebugTarget() + { + setDebugTarget( null ); + IAdaptable context = DebugUITools.getDebugContext(); + if ( context != null && context instanceof IDebugElement ) + { + IDebugTarget target = ((IDebugElement)context).getDebugTarget(); + if ( target != null && target instanceof IRunToLine ) + { + setDebugTarget( target ); + } + } + } + + protected void setDebugTarget( IDebugTarget target ) + { + fDebugTarget = target; + } + + protected IDebugTarget getDebugTarget() + { + return fDebugTarget; + } + + protected IVerticalRulerInfo getInfo() + { + return fInfo; + } + + protected void setInfo( IVerticalRulerInfo info ) + { + fInfo = info; + } + + protected ITextEditor getTextEditor() + { + return fTextEditor; + } + + protected void setTextEditor( ITextEditor textEditor ) + { + fTextEditor = textEditor; + } + + protected IResource getResource() + { + IEditorInput input = getTextEditor().getEditorInput(); + if ( input != null && input instanceof IFileEditorInput ) + { + return ((IFileEditorInput)input).getFile(); + } + return null; + } + + protected int getLineNumber() + { + return getInfo().getLineOfLastMouseButtonActivity() + 1; + } + + protected void runToLine( IResource resource, int lineNumber ) + { + if ( !((IRunToLine)getDebugTarget()).canRunToLine( resource, lineNumber ) ) + { + getTextEditor().getSite().getShell().getDisplay().beep(); + return; + } + try + { + ((IRunToLine)getDebugTarget()).runToLine( resource, lineNumber ); + } + catch( DebugException e ) + { + CDebugUIPlugin.errorDialog( e.getMessage(), e ); + } + } +} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/RunToLineRulerActionDelegate.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/RunToLineRulerActionDelegate.java new file mode 100644 index 00000000000..ac619e67e3d --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/RunToLineRulerActionDelegate.java @@ -0,0 +1,45 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +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.IEditorPart; +import org.eclipse.ui.texteditor.AbstractRulerActionDelegate; +import org.eclipse.ui.texteditor.ITextEditor; + +/** + * + * Enter type comment. + * + * @since Sep 19, 2002 + */ +public class RunToLineRulerActionDelegate extends AbstractRulerActionDelegate +{ + static final private String C_EDITOR_ID = "org.eclipse.cdt.ui.editor.CEditor"; //$NON-NLS-1$ + + /** + * @see IEditorActionDelegate#setActiveEditor(IAction, IEditorPart) + */ + public void setActiveEditor( IAction callerAction, IEditorPart targetEditor ) + { + if ( targetEditor != null ) + { + String id = targetEditor.getSite().getId(); + if ( !id.equals( C_EDITOR_ID ) ) + targetEditor = null; + } + super.setActiveEditor( callerAction, targetEditor ); + } + + /* (non-Javadoc) + * @see org.eclipse.ui.texteditor.AbstractRulerActionDelegate#createAction(ITextEditor, IVerticalRulerInfo) + */ + public IAction createAction( ITextEditor editor, IVerticalRulerInfo rulerInfo ) + { + return new RunToLineRulerAction( rulerInfo, editor ); + } +}