From: cperkonig Date: Sun, 29 Feb 2004 18:33:04 +0000 (+0000) Subject: New Action for add/remove Breakpoint X-Git-Url: http://git.phpeclipse.com?hp=76d927cf7890bf7e98fb9d6bb564a20726a7e164 New Action for add/remove Breakpoint --- diff --git a/net.sourceforge.phpeclipse.debug.ui/src/net/sourceforge/phpdt/internal/debug/ui/actions/ManageBreakpointActionDelegate.java b/net.sourceforge.phpeclipse.debug.ui/src/net/sourceforge/phpdt/internal/debug/ui/actions/ManageBreakpointActionDelegate.java new file mode 100644 index 0000000..d6cadcd --- /dev/null +++ b/net.sourceforge.phpeclipse.debug.ui/src/net/sourceforge/phpdt/internal/debug/ui/actions/ManageBreakpointActionDelegate.java @@ -0,0 +1,256 @@ +package net.sourceforge.phpdt.internal.debug.ui.actions; +import net.sourceforge.phpdt.debug.core.PHPDebugModel; +import org.eclipse.debug.core.DebugPlugin; +import net.sourceforge.phpdt.internal.debug.core.breakpoints.PHPLineBreakpoint; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.IWorkbenchWindowActionDelegate; +import org.eclipse.ui.texteditor.IEditorStatusLine; +import org.eclipse.ui.texteditor.ITextEditor; +import org.eclipse.core.resources.IFile; +import org.eclipse.ui.IEditorPart; +import org.eclipse.jface.text.IDocument; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IPartListener; +import org.eclipse.jface.text.ITextSelection; +import org.eclipse.ui.IFileEditorInput; +import org.eclipse.jface.viewers.ISelectionProvider; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.core.runtime.CoreException; + +import net.sourceforge.phpdt.internal.debug.ui.PHPDebugUiPlugin; + +/* (non-Javadoc) + * @see IWorkbenchWindowActionDelegate + */ +public class ManageBreakpointActionDelegate implements IWorkbenchWindowActionDelegate, IPartListener { + + protected boolean fInitialized= false; + private ITextEditor fTextEditor= null; + private IAction fAction= null; + private IFile fFile = null; + private IWorkbenchWindow fWorkbenchWindow= null; + + + /* (non-Javadoc) + * @see org.eclipse.ui.IPartListener#partActivated(IWorkbenchPart) + */ + public void partActivated( IWorkbenchPart part ) + { + if ( part instanceof ITextEditor ) + { + setTextEditor( (ITextEditor)part ); + } + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IPartListener#partBroughtToTop(IWorkbenchPart) + */ + public void partBroughtToTop( IWorkbenchPart part ) + { + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IPartListener#partClosed(IWorkbenchPart) + */ + public void partClosed( IWorkbenchPart part ) + { + if ( part == getTextEditor() ) + { + setTextEditor( null ); + if ( getAction() != null ) + { + getAction().setEnabled( false ); + } + } + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IPartListener#partDeactivated(IWorkbenchPart) + */ + public void partDeactivated( IWorkbenchPart part ) + { + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IPartListener#partOpened(IWorkbenchPart) + */ + public void partOpened( IWorkbenchPart part ) + { + if ( part instanceof ITextEditor ) + { + if ( getTextEditor() == null ) + { + setTextEditor( (ITextEditor)part ); + } + } + } + + + /** + * Manages a breakpoint. + */ + protected void manageBreakpoint(IEditorInput editorInput) { + ISelectionProvider sp= getTextEditor().getSelectionProvider(); + if (sp == null || getFile() == null) { + report("ManageBreakpointActionDelegate.No_Breakpoint"); //$NON-NLS-1$ + return; + } + report(null); + ISelection selection= sp.getSelection(); + if ( selection instanceof ITextSelection ) { + if ( getFile() == null ) + return; + IDocument document = getTextEditor().getDocumentProvider().getDocument( editorInput ); +// BreakpointLocationVerifier bv = new BreakpointLocationVerifier(); +// int lineNumber = bv.getValidLineBreakpointLocation( document, ((ITextSelection)selection).getStartLine()); + int lineNumber = ((ITextSelection)selection).getStartLine() +1; + if ( lineNumber > -1 ) { + + try { + PHPLineBreakpoint breakpoint=PHPDebugModel.lineBreakpointExists(lineNumber); + if (breakpoint==null) + PHPDebugModel.createLineBreakpoint(getFile(), lineNumber, 0, true, null); + else + DebugPlugin.getDefault().getBreakpointManager().removeBreakpoint( breakpoint, true );; + + } catch( CoreException ce ) { + PHPDebugUiPlugin.errorDialog( "Cannot add breakpoint", ce ); + } + } + } + } + + public ManageBreakpointActionDelegate() { + } + + /* (non-Javadoc) + * @see IWorkbenchWindowActionDelegate#run + */ + public void run(IAction action) { + if ( getTextEditor() != null ) { + update(); + manageBreakpoint( getTextEditor().getEditorInput() ); + } + } + + /* (non-Javadoc) + * @see IWorkbenchWindowActionDelegate#selectionChanged + */ + public void selectionChanged(IAction action, ISelection selection) { + if (!fInitialized) { + initialize(action); + } + } + + protected void update( ISelection selection ) + { + setEnabledState( getTextEditor() ); + } + + protected void initialize(IAction action) { + setAction( action ); + if (getWorkbenchWindow() != null) { + IWorkbenchPage page= getWorkbenchWindow().getActivePage(); + if (page != null) { + IEditorPart part= page.getActiveEditor(); + if (part instanceof ITextEditor) { + setTextEditor((ITextEditor)part); + update( getTextEditor().getSelectionProvider().getSelection() ); + } + } + } + fInitialized= true; + } + + /* (non-Javadoc) + * @see IWorkbenchWindowActionDelegate#dispose + */ + public void dispose() { + getWorkbenchWindow().getPartService().removePartListener( this ); + } + + /* (non-Javadoc) + * @see IWorkbenchWindowActionDelegate#init + */ + public void init(IWorkbenchWindow window) { + setWorkbenchWindow( window ); + window.getPartService().addPartListener( this ); + } + + protected ITextEditor getTextEditor() { + return fTextEditor; + } + + + protected IAction getAction() { + return fAction; + } + + protected void setAction(IAction action) { + fAction = action; + } + + protected IWorkbenchWindow getWorkbenchWindow() { + return fWorkbenchWindow; + } + + protected void setWorkbenchWindow(IWorkbenchWindow workbenchWindow) { + fWorkbenchWindow = workbenchWindow; + } + + protected IFile getFile() + { + return fFile; + } + + protected void setFile( IFile file ) + { + fFile = file; + } + + protected void setTextEditor(ITextEditor editor) { + fTextEditor = editor; + if ( fTextEditor != null ) { + IEditorInput input = fTextEditor.getEditorInput(); + setFile( ( input != null && input instanceof IFileEditorInput ) ? ((IFileEditorInput)input).getFile() : null ); + } + setEnabledState(editor); + } + protected void setEnabledState(ITextEditor editor) { + if ( getAction() != null ) { + getAction().setEnabled( editor != null ); + } + } + + protected void update() { + IAction action= getAction(); + if (action != null) { + if (getTextEditor() != null) { + breakpointExists(getTextEditor().getEditorInput()); + } + } + } + + protected boolean breakpointExists(IEditorInput editorInput){ + return false; + } + + protected void report(String message) { + if (getTextEditor() != null) { + IEditorStatusLine statusLine= (IEditorStatusLine) getTextEditor().getAdapter(IEditorStatusLine.class); + if (statusLine != null) { + if (message != null) { + statusLine.setMessage(true, message, null); + } else { + statusLine.setMessage(true, null, null); + } + } + } + if (message != null && PHPDebugUiPlugin.getActiveWorkbenchShell() != null) { + PHPDebugUiPlugin.getActiveWorkbenchShell().getDisplay().beep(); + } + } +}