--- /dev/null
+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();
+ }
+ }
+}