New Action for add/remove Breakpoint
authorcperkonig <cperkonig>
Sun, 29 Feb 2004 18:33:04 +0000 (18:33 +0000)
committercperkonig <cperkonig>
Sun, 29 Feb 2004 18:33:04 +0000 (18:33 +0000)
net.sourceforge.phpeclipse.debug.ui/src/net/sourceforge/phpdt/internal/debug/ui/actions/ManageBreakpointActionDelegate.java [new file with mode: 0644]

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 (file)
index 0000000..d6cadcd
--- /dev/null
@@ -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();
+               }
+       }
+}