1 /********************************************************************** 2 Copyright (c) 2000, 2002 IBM Corp. and others. 3 All rights reserved. This program and the accompanying materials 4 are made available under the terms of the Common Public License v1.0 5 which accompanies this distribution, and is available at 6 http://www.eclipse.org/legal/cpl-v10.html 7 8 Contributors: 9 IBM Corporation - Initial implementation 10 Vicente Fernando - www.alfersoft.com.ar 11 **********************************************************************/ 12 package net.sourceforge.phpeclipse.xdebug.ui.actions; 13 14 import net.sourceforge.phpeclipse.xdebug.ui.XDebugUIPlugin; 15 import net.sourceforge.phpeclipse.xdebug.ui.php.model.PHPLineBreakpointAdapter; 16 17 import org.eclipse.core.runtime.CoreException; 18 import org.eclipse.debug.core.DebugPlugin; 19 import org.eclipse.jface.action.Action; 20 import org.eclipse.jface.text.BadLocationException; 21 import org.eclipse.jface.text.IDocument; 22 import org.eclipse.jface.text.IRegion; 23 import org.eclipse.jface.text.TextSelection; 24 import org.eclipse.jface.text.source.IVerticalRulerInfo; 25 import org.eclipse.jface.viewers.ISelection; 26 import org.eclipse.ui.IWorkbenchPart; 27 import org.eclipse.ui.texteditor.IDocumentProvider; 28 import org.eclipse.ui.texteditor.ITextEditor; 29 30 public class ToggleBreakpointRulerAction extends Action { 31 32 static class EmptySelection implements ISelection { 33 isEmpty()34 public boolean isEmpty() { 35 return true; 36 } 37 } 38 39 private IVerticalRulerInfo fRuler; 40 private IWorkbenchPart fTargetPart; 41 private PHPLineBreakpointAdapter fBreakpointAdapter; 42 private static final ISelection EMPTY_SELECTION = new EmptySelection(); 43 ToggleBreakpointRulerAction( IWorkbenchPart part, IVerticalRulerInfo ruler )44 public ToggleBreakpointRulerAction( IWorkbenchPart part, IVerticalRulerInfo ruler ) { 45 super( "Toggle Breakpoint" ); //$NON-NLS-1$ 46 47 fRuler= ruler; 48 fRuler = ruler; 49 setTargetPart( part ); 50 fBreakpointAdapter = new PHPLineBreakpointAdapter(); 51 // part.getSite().getWorkbenchWindow().getWorkbench().getHelpSystem().setHelp( this, ICDebugHelpContextIds.TOGGLE_BREAKPOINT_ACTION ); 52 // setId( IInternalCDebugUIConstants.ACTION_TOGGLE_BREAKPOINT ); 53 } 54 55 56 /** 57 * @see Action#run() 58 */ run()59 public void run() { 60 try { 61 fBreakpointAdapter.toggleLineBreakpoints( getTargetPart(), getTargetSelection() ); 62 } 63 catch( CoreException e ) { 64 XDebugUIPlugin.errorDialog( getTargetPart().getSite().getShell(),"Error", "Operation failed" , e.getStatus() ); 65 } 66 } 67 68 /** 69 * Returns this action's vertical ruler info. 70 * 71 * @return this action's vertical ruler 72 */ getVerticalRulerInfo()73 protected IVerticalRulerInfo getVerticalRulerInfo() { 74 return fRuler; 75 } 76 getTargetPart()77 private IWorkbenchPart getTargetPart() { 78 return this.fTargetPart; 79 } 80 setTargetPart( IWorkbenchPart targetPart )81 private void setTargetPart( IWorkbenchPart targetPart ) { 82 this.fTargetPart = targetPart; 83 } 84 85 /** 86 * Returns the current selection in the active part, possibly 87 * and empty selection, but never <code>null</code>. 88 * 89 * @return the selection in the active part, possibly empty 90 */ getTargetSelection()91 private ISelection getTargetSelection() { 92 IDocument doc = getDocument(); 93 if ( doc != null ) { 94 int line = getVerticalRulerInfo().getLineOfLastMouseButtonActivity(); 95 try { 96 IRegion region = doc.getLineInformation( line ); 97 return new TextSelection( doc, region.getOffset(), region.getLength() ); 98 } 99 catch( BadLocationException e ) { 100 DebugPlugin.log( e ); 101 } 102 } 103 return EMPTY_SELECTION; 104 } 105 getDocument()106 private IDocument getDocument() { 107 IWorkbenchPart targetPart = getTargetPart(); 108 if ( targetPart instanceof ITextEditor ) { 109 ITextEditor textEditor = (ITextEditor)targetPart; 110 IDocumentProvider provider = textEditor.getDocumentProvider(); 111 if ( provider != null ) 112 return provider.getDocument( textEditor.getEditorInput() ); 113 } 114 // else if ( targetPart instanceof DisassemblyView ) { 115 // DisassemblyView dv = (DisassemblyView)targetPart; 116 // IDocumentProvider provider = dv.getDocumentProvider(); 117 // if ( provider != null ) 118 // return provider.getDocument( dv.getInput() ); 119 // } 120 return null; 121 } 122 123 } 124