From 2ef508ee7f961896693975c3cba6bc6e4773f0bf Mon Sep 17 00:00:00 2001 From: Mikhail Khodjaiants Date: Thu, 6 Mar 2003 00:13:36 +0000 Subject: [PATCH] The extension of CEditor that displays the 'Source Not Found' form. --- debug/org.eclipse.cdt.debug.ui/ChangeLog | 13 + .../plugin.properties | 1 + debug/org.eclipse.cdt.debug.ui/plugin.xml | 22 +- .../ui/CDTDebugModelPresentation.java | 27 +- .../ManageBreakpointRulerActionDelegate.java | 10 +- .../ui/editors/AttachSourceEditor.java | 382 -------------- .../ui/editors/AttachSourceEditorInput.java | 78 --- .../ui/editors/CDebugDocumentProvider.java | 93 ++++ .../internal/ui/editors/CDebugEditor.java | 495 ++++++++++++++++++ .../ui/editors/EditorInputDelegate.java | 173 ++++++ .../ui/editors/FileNotFoundElement.java | 20 +- .../eclipse/cdt/debug/ui/CDebugUIPlugin.java | 16 + 12 files changed, 850 insertions(+), 480 deletions(-) delete mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/AttachSourceEditor.java delete mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/AttachSourceEditorInput.java create mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/CDebugDocumentProvider.java create mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/CDebugEditor.java create mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/EditorInputDelegate.java diff --git a/debug/org.eclipse.cdt.debug.ui/ChangeLog b/debug/org.eclipse.cdt.debug.ui/ChangeLog index 6a6fa646800..39dd605d458 100644 --- a/debug/org.eclipse.cdt.debug.ui/ChangeLog +++ b/debug/org.eclipse.cdt.debug.ui/ChangeLog @@ -1,3 +1,16 @@ +2003-03-05 Mikhail Khodjaiants + The extension of CEditor that displays the 'Source Not Found' form. + * plugin.properties + * plugin.xml + * CDTDebugModelPresentation.java + * AttachSourceEditor.java: removed + * AttachSourceEditorInput.java: removed + * FileNotFoundElement.java: new + * CDebugDocumentProvider.java: new + * CDebugEditor.java: new + * EditorInputDelegate.java: new + * ManageBreakpointRulerActionDelegate.java + 2003-02-28 Mikhail Khodjaiants Check if part is not null when set the selection. * AddExpressionActionDelegate.java diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.properties b/debug/org.eclipse.cdt.debug.ui/plugin.properties index 64628f274e1..2e47d2cafc9 100644 --- a/debug/org.eclipse.cdt.debug.ui/plugin.properties +++ b/debug/org.eclipse.cdt.debug.ui/plugin.properties @@ -56,6 +56,7 @@ SourcePropertyPage.name=Source Lookup DisassemblyEditor.name=Disassembly Editor AttachSourceEditor.name= Attach Source Editor +CDebugEditor.name= C/C++ Debug Editor LoadSymbolsAction.label=Load Symbols SignalAction.label=Resume With Signal diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.xml b/debug/org.eclipse.cdt.debug.ui/plugin.xml index 5662a2ef913..4c23cb9c171 100644 --- a/debug/org.eclipse.cdt.debug.ui/plugin.xml +++ b/debug/org.eclipse.cdt.debug.ui/plugin.xml @@ -964,6 +964,22 @@ + + + + + + + + @@ -1091,10 +1107,10 @@ id="org.eclipse.cdt.debug.ui.DisassemblyEditor"> + class="org.eclipse.cdt.debug.internal.ui.editors.CDebugEditor" + id="org.eclipse.cdt.debug.ui.editor.CDebugEditor"> diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDTDebugModelPresentation.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDTDebugModelPresentation.java index db52925843f..ee5d6509401 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDTDebugModelPresentation.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDTDebugModelPresentation.java @@ -34,9 +34,9 @@ import org.eclipse.cdt.debug.core.model.IState; import org.eclipse.cdt.debug.core.sourcelookup.IDisassemblyStorage; import org.eclipse.cdt.debug.internal.core.CDebugUtils; import org.eclipse.cdt.debug.internal.core.sourcelookup.DisassemblyManager; -import org.eclipse.cdt.debug.internal.ui.editors.AttachSourceEditor; -import org.eclipse.cdt.debug.internal.ui.editors.AttachSourceEditorInput; +import org.eclipse.cdt.debug.internal.ui.editors.CDebugEditor; import org.eclipse.cdt.debug.internal.ui.editors.DisassemblyEditorInput; +import org.eclipse.cdt.debug.internal.ui.editors.EditorInputDelegate; import org.eclipse.cdt.debug.internal.ui.editors.FileNotFoundElement; import org.eclipse.cdt.debug.ui.CDebugUIPlugin; import org.eclipse.cdt.internal.ui.util.ExternalEditorInput; @@ -164,7 +164,7 @@ public class CDTDebugModelPresentation extends LabelProvider } if ( element instanceof FileNotFoundElement ) { - return new AttachSourceEditorInput( (FileNotFoundElement)element ); + return new EditorInputDelegate( (FileNotFoundElement)element ); } return null; } @@ -174,17 +174,24 @@ public class CDTDebugModelPresentation extends LabelProvider */ public String getEditorId( IEditorInput input, Object element ) { + if ( input instanceof EditorInputDelegate ) + { + if ( ((EditorInputDelegate)input).getDelegate() == null ) + return CDebugEditor.EDITOR_ID; + else + return getEditorId( ((EditorInputDelegate)input).getDelegate(), element ); + } + + String id = null; if ( input != null ) { - if ( input instanceof AttachSourceEditorInput ) - { - return AttachSourceEditor.EDITOR_ID; - } IEditorRegistry registry = PlatformUI.getWorkbench().getEditorRegistry(); IEditorDescriptor descriptor = registry.getDefaultEditor( input.getName() ); - if ( descriptor != null ) - return descriptor.getId(); - return CUIPlugin.EDITOR_ID; + id = ( descriptor != null ) ? descriptor.getId() : CUIPlugin.EDITOR_ID; + } + if ( CUIPlugin.EDITOR_ID.equals( id ) ) + { + return CDebugEditor.EDITOR_ID; } return null; } diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/ManageBreakpointRulerActionDelegate.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/ManageBreakpointRulerActionDelegate.java index a56f01aa174..189d6c54749 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/ManageBreakpointRulerActionDelegate.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/ManageBreakpointRulerActionDelegate.java @@ -6,6 +6,9 @@ package org.eclipse.cdt.debug.internal.ui.actions; +import org.eclipse.cdt.debug.internal.ui.editors.CDebugEditor; +import org.eclipse.cdt.debug.internal.ui.editors.DisassemblyEditor; +import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.jface.action.IAction; import org.eclipse.jface.text.source.IVerticalRulerInfo; import org.eclipse.ui.IEditorPart; @@ -20,9 +23,7 @@ import org.eclipse.ui.texteditor.ITextEditor; */ public class ManageBreakpointRulerActionDelegate extends AbstractRulerActionDelegate { - static final private String C_EDITOR_ID = "org.eclipse.cdt.ui.editor.CEditor"; //$NON-NLS-1$ static final private String ASM_EDITOR_ID = "org.eclipse.cdt.ui.editor.asm.AsmEditor"; //$NON-NLS-1$ - static final private String DISASSEMBLY_EDITOR_ID = "org.eclipse.cdt.debug.ui.DisassemblyEditor"; //$NON-NLS-1$ /** * @see IEditorActionDelegate#setActiveEditor(IAction, IEditorPart) @@ -32,7 +33,10 @@ public class ManageBreakpointRulerActionDelegate extends AbstractRulerActionDele if ( targetEditor != null ) { String id = targetEditor.getSite().getId(); - if ( !id.equals( C_EDITOR_ID ) && !id.equals( ASM_EDITOR_ID ) && !id.equals( DISASSEMBLY_EDITOR_ID ) ) + if ( !id.equals( CDebugEditor.EDITOR_ID ) && + !id.equals( CUIPlugin.EDITOR_ID ) && + !id.equals( ASM_EDITOR_ID ) && + !id.equals( DisassemblyEditor.DISASSEMBLY_EDITOR_ID ) ) targetEditor = null; } super.setActiveEditor( callerAction, targetEditor ); diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/AttachSourceEditor.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/AttachSourceEditor.java deleted file mode 100644 index 0461e38a29e..00000000000 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/AttachSourceEditor.java +++ /dev/null @@ -1,382 +0,0 @@ -/* - *(c) Copyright QNX Software Systems Ltd. 2002. - * All Rights Reserved. - * - */ -package org.eclipse.cdt.debug.internal.ui.editors; - -import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocation; -import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator; -import org.eclipse.cdt.debug.internal.ui.wizards.AddDirectorySourceLocationWizard; -import org.eclipse.cdt.debug.internal.ui.wizards.AddSourceLocationWizard; -import org.eclipse.cdt.debug.ui.CDebugUIPlugin; -import org.eclipse.cdt.debug.ui.sourcelookup.INewSourceLocationWizard; -import org.eclipse.core.resources.IMarker; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Path; -import org.eclipse.debug.core.ILaunch; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; -import org.eclipse.debug.core.model.IPersistableSourceLocator; -import org.eclipse.jface.resource.JFaceResources; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; -import org.eclipse.jface.window.Window; -import org.eclipse.jface.wizard.WizardDialog; -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.ScrolledComposite; -import org.eclipse.swt.events.ControlEvent; -import org.eclipse.swt.events.ControlListener; -import org.eclipse.swt.events.DisposeEvent; -import org.eclipse.swt.events.DisposeListener; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.ScrollBar; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorSite; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.part.EditorPart; - -/** - * Enter type comment. - * - * @since: Feb 21, 2003 - */ -public class AttachSourceEditor extends EditorPart - implements IPropertyChangeListener -{ - public static final String EDITOR_ID = CDebugUIPlugin.getUniqueIdentifier() + ".editor.AttachSourceEditor"; - - /** The horizontal scroll increment. */ - private static final int HORIZONTAL_SCROLL_INCREMENT = 10; - /** The vertical scroll increment. */ - private static final int VERTICAL_SCROLL_INCREMENT = 10; - - private ScrolledComposite fScrolledComposite; - private Color fBackgroundColor; - private Color fForegroundColor; - private Color fSeparatorColor; - private List fBannerLabels= new ArrayList(); - private List fHeaderLabels= new ArrayList(); - private Font fFont; - private Button fAttachButton; - private Label fInputLabel; - - /** - * Constructor for AttachSourceEditor. - */ - public AttachSourceEditor() - { - super(); - } - - /* (non-Javadoc) - * @see org.eclipse.ui.IEditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor) - */ - public void doSave( IProgressMonitor monitor ) - { - } - - /* (non-Javadoc) - * @see org.eclipse.ui.IEditorPart#doSaveAs() - */ - public void doSaveAs() - { - } - - /* (non-Javadoc) - * @see org.eclipse.ui.IEditorPart#gotoMarker(org.eclipse.core.resources.IMarker) - */ - public void gotoMarker( IMarker marker ) - { - } - - /* (non-Javadoc) - * @see org.eclipse.ui.IEditorPart#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput) - */ - public void init( IEditorSite site, IEditorInput input ) throws PartInitException - { - setInput( input ); - setSite( site ); - } - - /* (non-Javadoc) - * @see org.eclipse.ui.IEditorPart#isDirty() - */ - public boolean isDirty() - { - return false; - } - - /* (non-Javadoc) - * @see org.eclipse.ui.IEditorPart#isSaveAsAllowed() - */ - public boolean isSaveAsAllowed() - { - return false; - } - - /* (non-Javadoc) - * @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) - */ - public void createPartControl( Composite parent ) - { - Display display = parent.getDisplay(); - fBackgroundColor = display.getSystemColor( SWT.COLOR_LIST_BACKGROUND ); - fForegroundColor = display.getSystemColor( SWT.COLOR_LIST_FOREGROUND ); - fSeparatorColor = new Color( display, 152, 170, 203 ); - - JFaceResources.getFontRegistry().addListener( this ); - - fScrolledComposite = new ScrolledComposite( parent, SWT.H_SCROLL | SWT.V_SCROLL ); - fScrolledComposite.setAlwaysShowScrollBars( false ); - fScrolledComposite.setExpandHorizontal( true ); - fScrolledComposite.setExpandVertical( true ); - fScrolledComposite.addDisposeListener( - new DisposeListener() - { - public void widgetDisposed( DisposeEvent e ) - { - JFaceResources.getFontRegistry().removeListener( AttachSourceEditor.this ); - fScrolledComposite = null; - fSeparatorColor.dispose(); - fSeparatorColor = null; - fBannerLabels.clear(); - fHeaderLabels.clear(); - if ( fFont != null ) - { - fFont.dispose(); - fFont = null; - } - } - } ); - - fScrolledComposite.addControlListener( - new ControlListener() - { - public void controlMoved( ControlEvent e ) - { - } - - public void controlResized( ControlEvent e ) - { - Rectangle clientArea = fScrolledComposite.getClientArea(); - - ScrollBar verticalBar = fScrolledComposite.getVerticalBar(); - verticalBar.setIncrement( VERTICAL_SCROLL_INCREMENT ); - verticalBar.setPageIncrement( clientArea.height - verticalBar.getIncrement() ); - - ScrollBar horizontalBar = fScrolledComposite.getHorizontalBar(); - horizontalBar.setIncrement( HORIZONTAL_SCROLL_INCREMENT ); - horizontalBar.setPageIncrement( clientArea.width - horizontalBar.getIncrement() ); - } - }); - - Composite composite = createComposite( fScrolledComposite ); - composite.setLayout( new GridLayout() ); - - createTitleLabel( composite, "C/C++ File Editor" ); - createLabel( composite, null ); - createLabel( composite, null ); - - createHeadingLabel( composite, "Source not found" ); - - Composite separator = createCompositeSeparator( composite ); - GridData data = new GridData( GridData.FILL_HORIZONTAL ); - data.heightHint = 2; - separator.setLayoutData( data ); - - fInputLabel = createLabel( composite, "" ); - createLabel( composite, "You can attach the source location by pressing the button below:" ); - createLabel( composite, null ); - - fAttachButton = createButton( composite, "&Attach Source..." ); - fAttachButton.addSelectionListener( - new SelectionListener() - { - public void widgetSelected( SelectionEvent event ) - { - AttachSourceEditor.this.attachSourceLocation(); - } - - public void widgetDefaultSelected( SelectionEvent e ) - { - } - } ); - - separator = createCompositeSeparator( composite ); - data = new GridData( GridData.FILL_HORIZONTAL ); - data.heightHint = 2; - separator.setLayoutData( data ); - - fScrolledComposite.setContent( composite ); - fScrolledComposite.setMinSize( composite.computeSize( SWT.DEFAULT, SWT.DEFAULT ) ); - - if ( getEditorInput() != null ) - { - setInputLabelText( getEditorInput().getName() ); - } - } - - private Composite createComposite( Composite parent ) - { - Composite composite = new Composite( parent, SWT.NONE ); - composite.setBackground( fBackgroundColor ); - return composite; - } - - private Label createLabel( Composite parent, String text ) - { - Label label = new Label( parent, SWT.NONE ); - if ( text != null ) - label.setText( text ); - label.setBackground( fBackgroundColor ); - label.setForeground( fForegroundColor ); - return label; - } - - private Label createTitleLabel( Composite parent, String text ) - { - Label label = new Label( parent, SWT.NONE ); - if ( text != null ) - label.setText( text ); - label.setBackground( fBackgroundColor ); - label.setForeground( fForegroundColor ); - label.setFont( JFaceResources.getHeaderFont() ); - fHeaderLabels.add( label ); - return label; - } - - private Label createHeadingLabel( Composite parent, String text ) - { - Label label = new Label( parent, SWT.NONE ); - if ( text != null ) - label.setText( text ); - label.setBackground( fBackgroundColor ); - label.setForeground( fForegroundColor ); - label.setFont( JFaceResources.getBannerFont() ); - fBannerLabels.add( label ); - return label; - } - - private Composite createCompositeSeparator( Composite parent ) - { - Composite composite = new Composite( parent, SWT.NONE ); - composite.setBackground( fSeparatorColor ); - return composite; - } - - private Button createButton( Composite parent, String text ) - { - Button button = new Button( parent, SWT.FLAT ); - button.setBackground( fBackgroundColor ); - button.setForeground( fForegroundColor ); - if ( text != null ) - button.setText( text ); - return button; - } - - /* (non-Javadoc) - * @see org.eclipse.ui.IWorkbenchPart#setFocus() - */ - public void setFocus() - { - if ( fAttachButton != null ) - fAttachButton.setFocus(); - } - - /* (non-Javadoc) - * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent) - */ - public void propertyChange( PropertyChangeEvent event ) - { - } - - /* (non-Javadoc) - * @see org.eclipse.ui.part.EditorPart#setInput(org.eclipse.ui.IEditorInput) - */ - protected void setInput( IEditorInput input ) - { - super.setInput( input ); - if ( input != null && fInputLabel != null ) - setInputLabelText( getEditorInput().getName() ); - } - - private void setInputLabelText( String inputName ) - { - fInputLabel.setText( MessageFormat.format( "There is no source for the file {0}", new String[] { inputName } ) ); - } - - protected void attachSourceLocation() - { - if ( getEditorInput() != null && getEditorInput().getAdapter( FileNotFoundElement.class ) != null ) - { - FileNotFoundElement element = (FileNotFoundElement)getEditorInput().getAdapter( FileNotFoundElement.class ); - if ( element.getLaunch() != null && element.getLaunch().getSourceLocator() instanceof IAdaptable ) - { - ILaunch launch = element.getLaunch(); - ICSourceLocator locator = (ICSourceLocator)((IAdaptable)element.getLaunch().getSourceLocator()).getAdapter( ICSourceLocator.class ); - if ( locator != null ) - { - IPath path = new Path( element.getName() ); - INewSourceLocationWizard wizard = null; - if ( path.isAbsolute() ) - { - path = path.removeLastSegments( 1 ); - wizard = new AddDirectorySourceLocationWizard( path ); - } - else - { - wizard = new AddSourceLocationWizard( locator.getSourceLocations() ); - } - WizardDialog dialog = new WizardDialog( CDebugUIPlugin.getActiveWorkbenchShell(), wizard ); - if ( dialog.open() == Window.OK ) - { - ICSourceLocation[] locations = locator.getSourceLocations(); - ArrayList list = new ArrayList( Arrays.asList( locations ) ); - list.add( wizard.getSourceLocation() ); - locator.setSourceLocations( (ICSourceLocation[])list.toArray( new ICSourceLocation[list.size()] ) ); - - if ( locator instanceof IPersistableSourceLocator ) - { - ILaunchConfiguration configuration = launch.getLaunchConfiguration(); - saveChanges( configuration, (IPersistableSourceLocator)launch.getSourceLocator() ); - } - } - } - } - } - } - - protected void saveChanges( ILaunchConfiguration configuration, IPersistableSourceLocator locator ) - { - try - { - ILaunchConfigurationWorkingCopy copy = configuration.copy( configuration.getName() ); - copy.setAttribute( ILaunchConfiguration.ATTR_SOURCE_LOCATOR_MEMENTO, locator.getMemento() ); - copy.doSave(); - } - catch( CoreException e ) - { - CDebugUIPlugin.errorDialog( e.getMessage(), (IStatus)null ); - } - } -} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/AttachSourceEditorInput.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/AttachSourceEditorInput.java deleted file mode 100644 index 09487ba7740..00000000000 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/AttachSourceEditorInput.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - *(c) Copyright QNX Software Systems Ltd. 2002. - * All Rights Reserved. - * - */ -package org.eclipse.cdt.debug.internal.ui.editors; - -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IPersistableElement; - -/** - * Enter type comment. - * - * @since: Feb 21, 2003 - */ -public class AttachSourceEditorInput implements IEditorInput -{ - private FileNotFoundElement fElement = null; - - /** - * Constructor for AttachSourceEditorInput. - */ - public AttachSourceEditorInput( FileNotFoundElement element ) - { - fElement = element; - } - - /* (non-Javadoc) - * @see org.eclipse.ui.IEditorInput#exists() - */ - public boolean exists() - { - return true; - } - - /* (non-Javadoc) - * @see org.eclipse.ui.IEditorInput#getImageDescriptor() - */ - public ImageDescriptor getImageDescriptor() - { - return null; - } - - /* (non-Javadoc) - * @see org.eclipse.ui.IEditorInput#getName() - */ - public String getName() - { - return ( fElement != null ) ? fElement.getName() : ""; - } - - /* (non-Javadoc) - * @see org.eclipse.ui.IEditorInput#getPersistable() - */ - public IPersistableElement getPersistable() - { - return null; - } - - /* (non-Javadoc) - * @see org.eclipse.ui.IEditorInput#getToolTipText() - */ - public String getToolTipText() - { - return null; - } - - /* (non-Javadoc) - * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) - */ - public Object getAdapter( Class adapter ) - { - if ( adapter.equals( FileNotFoundElement.class ) ) - return fElement; - return null; - } -} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/CDebugDocumentProvider.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/CDebugDocumentProvider.java new file mode 100644 index 00000000000..fd43ab78883 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/CDebugDocumentProvider.java @@ -0,0 +1,93 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.internal.ui.editors; + +import org.eclipse.cdt.debug.ui.CDebugUIPlugin; +import org.eclipse.cdt.internal.ui.editor.CDocumentProvider; +import org.eclipse.cdt.ui.CUIPlugin; +import org.eclipse.core.resources.IStorage; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.IDocumentPartitioner; +import org.eclipse.jface.text.source.IAnnotationModel; + +/** + * + * Enter type comment. + * + * @since Mar 4, 2003 + */ +public class CDebugDocumentProvider extends CDocumentProvider +{ + /** + * @see org.eclipse.ui.texteditor.AbstractDocumentProvider#createDocument(Object) + */ + protected IDocument createDocument( Object element ) throws CoreException + { + if ( element instanceof EditorInputDelegate ) + { + if ( ((EditorInputDelegate)element).getDelegate() != null ) + { + return super.createDocument( ((EditorInputDelegate)element).getDelegate() ); + } + else + { + IDocument document = null; + IStorage storage = ((EditorInputDelegate)element).getStorage(); + if ( storage != null ) + { + document = new CDocument(); + setDocumentContent( document, storage.getContents(), getDefaultEncoding() ); + } + else + { + return null; + } + if ( document != null) + { + IDocumentPartitioner partitioner= CUIPlugin.getDefault().getTextTools().createDocumentPartitioner(); + partitioner.connect( document ); + document.setDocumentPartitioner( partitioner ); + } + return document; + } + } + return super.createDocument( element ); + } + + /** + * @see org.eclipse.ui.texteditor.IDocumentProviderExtension#getStatus(Object) + */ + public IStatus getStatus( Object element ) + { + if ( element instanceof EditorInputDelegate ) + { + if ( ((EditorInputDelegate)element).getDelegate() != null ) + { + return super.getStatus( ((EditorInputDelegate)element).getDelegate() ); + } + else + { + return createFileNotFoundStatus( ((EditorInputDelegate)element).getElement() ); + } + } + return super.getStatus( element ); + } + + private IStatus createFileNotFoundStatus( FileNotFoundElement element ) + { + return new Status( IStatus.INFO, CDebugUIPlugin.getUniqueIdentifier(), 0, "", null ); + } + + protected IAnnotationModel createAnnotationModel( Object element ) throws CoreException + { + if ( element instanceof EditorInputDelegate && ((EditorInputDelegate)element).getDelegate() != null ) + return super.createAnnotationModel( ((EditorInputDelegate)element).getDelegate() ); + return super.createAnnotationModel( element ); + } +} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/CDebugEditor.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/CDebugEditor.java new file mode 100644 index 00000000000..24cbd88fde8 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/CDebugEditor.java @@ -0,0 +1,495 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.internal.ui.editors; + +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; + +import org.eclipse.cdt.core.resources.FileStorage; +import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocation; +import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator; +import org.eclipse.cdt.debug.internal.ui.wizards.AddDirectorySourceLocationWizard; +import org.eclipse.cdt.debug.internal.ui.wizards.AddSourceLocationWizard; +import org.eclipse.cdt.debug.ui.CDebugUIPlugin; +import org.eclipse.cdt.debug.ui.sourcelookup.INewSourceLocationWizard; +import org.eclipse.cdt.internal.ui.editor.CEditor; +import org.eclipse.cdt.internal.ui.util.ExternalEditorInput; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IStorage; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.debug.core.ILaunch; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; +import org.eclipse.debug.core.model.IPersistableSourceLocator; +import org.eclipse.debug.core.model.IStackFrame; +import org.eclipse.debug.ui.IDebugUIConstants; +import org.eclipse.debug.ui.IDebugView; +import org.eclipse.jface.resource.JFaceResources; +import org.eclipse.jface.util.IPropertyChangeListener; +import org.eclipse.jface.util.PropertyChangeEvent; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.window.Window; +import org.eclipse.jface.wizard.WizardDialog; +import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.ScrolledComposite; +import org.eclipse.swt.events.ControlEvent; +import org.eclipse.swt.events.ControlListener; +import org.eclipse.swt.events.DisposeEvent; +import org.eclipse.swt.events.DisposeListener; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.Font; +import org.eclipse.swt.graphics.Rectangle; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.ScrollBar; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IViewPart; +import org.eclipse.ui.part.FileEditorInput; + +/** + * Enter type comment. + * + * @since: Feb 26, 2003 + */ +public class CDebugEditor extends CEditor +{ + public class AttachSourceForm implements IPropertyChangeListener + { + /** The horizontal scroll increment. */ + private static final int HORIZONTAL_SCROLL_INCREMENT = 10; + /** The vertical scroll increment. */ + private static final int VERTICAL_SCROLL_INCREMENT = 10; + /** The form's root widget */ + private Font fFont; + /** The form's root widget */ + private ScrolledComposite fScrolledComposite; + /** The background color */ + private Color fBackgroundColor; + /** The foreground color */ + private Color fForegroundColor; + /** The separator's color */ + private Color fSeparatorColor; + /** The form headers */ + private List fHeaderLabels = new ArrayList(); + /** The form banners */ + private List fBannerLabels = new ArrayList(); + /** The form text */ + private Label fInputLabel; + /** The attach source button */ + private Button fAttachButton = null; + /** The preference change listener */ + private IPropertyChangeListener fPropertyChangeListener; + + private IEditorInput fInput = null; + + public AttachSourceForm( Composite parent, IEditorInput input ) + { + Display display = parent.getDisplay(); + fBackgroundColor = display.getSystemColor( SWT.COLOR_LIST_BACKGROUND ); + fForegroundColor = display.getSystemColor( SWT.COLOR_LIST_FOREGROUND ); + fSeparatorColor = new Color( display, 152, 170, 203 ); + + JFaceResources.getFontRegistry().addListener( AttachSourceForm.this ); + + fScrolledComposite = new ScrolledComposite( parent, SWT.H_SCROLL | SWT.V_SCROLL ); + fScrolledComposite.setAlwaysShowScrollBars( false ); + fScrolledComposite.setExpandHorizontal( true ); + fScrolledComposite.setExpandVertical( true ); + fScrolledComposite.addDisposeListener( + new DisposeListener() + { + public void widgetDisposed( DisposeEvent e ) + { + JFaceResources.getFontRegistry().removeListener( AttachSourceForm.this ); + setScrolledComposite( null ); + getSeparatorColor().dispose(); + setSeparatorColor( null ); + getBannerLabels().clear(); + getHeaderLabels().clear(); + if ( getFont() != null ) + { + getFont().dispose(); + setFont( null ); + } + } + } ); + + fScrolledComposite.addControlListener( + new ControlListener() + { + public void controlMoved( ControlEvent e ) + { + } + + public void controlResized(ControlEvent e) + { + Rectangle clientArea = getScrolledComposite().getClientArea(); + + ScrollBar verticalBar = getScrolledComposite().getVerticalBar(); + verticalBar.setIncrement( VERTICAL_SCROLL_INCREMENT ); + verticalBar.setPageIncrement( clientArea.height - verticalBar.getIncrement() ); + + ScrollBar horizontalBar = getScrolledComposite().getHorizontalBar(); + horizontalBar.setIncrement( HORIZONTAL_SCROLL_INCREMENT ); + horizontalBar.setPageIncrement( clientArea.width - horizontalBar.getIncrement() ); + } + } ); + + Composite composite = createComposite( fScrolledComposite ); + composite.setLayout( new GridLayout() ); + + createTitleLabel( composite, "C/C++ File Editor" ); + createLabel( composite, null ); + createLabel( composite, null ); + + createHeadingLabel( composite, "Source not found" ); + + Composite separator = createCompositeSeparator( composite ); + GridData data = new GridData( GridData.FILL_HORIZONTAL ); + data.heightHint = 2; + separator.setLayoutData( data ); + + fInputLabel = createLabel( composite, "" ); + createLabel( composite, "You can attach a new source location by pressing the button below:" ); + createLabel( composite, null ); + + fAttachButton = createButton( composite, "&Attach Source..." ); + fAttachButton.addSelectionListener( + new SelectionListener() + { + public void widgetSelected( SelectionEvent event ) + { + attachSourceLocation(); + } + + public void widgetDefaultSelected( SelectionEvent e ) + { + } + } ); + + separator = createCompositeSeparator( composite ); + data = new GridData( GridData.FILL_HORIZONTAL ); + data.heightHint = 2; + separator.setLayoutData( data ); + + fScrolledComposite.setContent( composite ); + fScrolledComposite.setMinSize( composite.computeSize( SWT.DEFAULT, SWT.DEFAULT ) ); + + if ( getEditorInput() != null ) + { + setInputLabelText( getEditorInput() ); + } + + fInput = input; + } + + private Composite createComposite( Composite parent ) + { + Composite composite = new Composite( parent, SWT.NONE ); + composite.setBackground( fBackgroundColor ); + return composite; + } + + private Label createLabel( Composite parent, String text ) + { + Label label = new Label( parent, SWT.NONE ); + if ( text != null ) + label.setText( text ); + label.setBackground( fBackgroundColor ); + label.setForeground( fForegroundColor ); + return label; + } + + private Label createTitleLabel( Composite parent, String text ) + { + Label label = new Label( parent, SWT.NONE ); + if ( text != null ) + label.setText( text ); + label.setBackground( fBackgroundColor ); + label.setForeground( fForegroundColor ); + label.setFont( JFaceResources.getHeaderFont() ); + fHeaderLabels.add( label ); + return label; + } + + private Label createHeadingLabel( Composite parent, String text ) + { + Label label = new Label( parent, SWT.NONE ); + if ( text != null ) + label.setText( text ); + label.setBackground( fBackgroundColor ); + label.setForeground( fForegroundColor ); + label.setFont( JFaceResources.getBannerFont() ); + fBannerLabels.add( label ); + return label; + } + + private Composite createCompositeSeparator( Composite parent ) + { + Composite composite = new Composite( parent, SWT.NONE ); + composite.setBackground( fSeparatorColor ); + return composite; + } + + private Button createButton( Composite parent, String text ) + { + Button button = new Button( parent, SWT.FLAT ); + button.setBackground( fBackgroundColor ); + button.setForeground( fForegroundColor ); + if ( text != null ) + button.setText( text ); + return button; + } + + /* (non-Javadoc) + * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent) + */ + public void propertyChange( PropertyChangeEvent event ) + { + for ( Iterator iterator = fBannerLabels.iterator(); iterator.hasNext(); ) + { + Label label = (Label)iterator.next(); + label.setFont( JFaceResources.getBannerFont() ); + } + + for ( Iterator iterator = fHeaderLabels.iterator(); iterator.hasNext(); ) + { + Label label = (Label)iterator.next(); + label.setFont( JFaceResources.getHeaderFont() ); + } + + Control control = fScrolledComposite.getContent(); + fScrolledComposite.setMinSize( control.computeSize( SWT.DEFAULT, SWT.DEFAULT ) ); + fScrolledComposite.setContent( control ); + + fScrolledComposite.layout( true ); + fScrolledComposite.redraw(); + } + + private void setInputLabelText( IEditorInput input ) + { + FileNotFoundElement element = (FileNotFoundElement)input.getAdapter( FileNotFoundElement.class ); + if ( element != null ) + { + IPath path = element.getFullPath(); + String message = ""; + if ( path.isAbsolute() ) + message = MessageFormat.format( "The file ''{0}'' does not exist.", new String[] { element.getFullPath().toOSString() } ); + else + message = MessageFormat.format( "The file ''{0}'' not found.", new String[] { element.getFullPath().toOSString() } ); + fInputLabel.setText( message ); + } + } + + protected ScrolledComposite getScrolledComposite() + { + return fScrolledComposite; + } + + protected void setScrolledComposite( ScrolledComposite scrolledComposite ) + { + fScrolledComposite = scrolledComposite; + } + + protected Color getSeparatorColor() + { + return fSeparatorColor; + } + + protected void setSeparatorColor( Color separatorColor ) + { + fSeparatorColor = separatorColor; + } + + protected List getBannerLabels() + { + return fBannerLabels; + } + + protected void setBannerLabels( List bannerLabels ) + { + fBannerLabels = bannerLabels; + } + + protected List getHeaderLabels() + { + return fHeaderLabels; + } + + protected void setHeaderLabels( List headerLabels ) + { + fHeaderLabels = headerLabels; + } + + protected Font getFont() + { + return fFont; + } + + protected void setFont( Font font ) + { + fFont = font; + } + + public Control getControl() + { + return fScrolledComposite; + } + + public IEditorInput getInput() + { + return fInput; + } + } + + public static final String EDITOR_ID = CDebugUIPlugin.getUniqueIdentifier() + ".editor.CDebugEditor"; + + private AttachSourceForm fAttachSourceForm = null; + + /** + * Constructor for CDebugEditor. + */ + public CDebugEditor() + { + super(); + setDocumentProvider( CDebugUIPlugin.getDefault().getDocumentProvider() ); + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) + */ + public void createPartControl( Composite parent ) + { + super.createPartControl( parent ); + } + + /* (non-Javadoc) + * @see org.eclipse.ui.texteditor.AbstractTextEditor#doSetInput(org.eclipse.ui.IEditorInput) + */ + protected void doSetInput( IEditorInput input ) throws CoreException + { + IEditorInput newInput = input; + if ( input instanceof EditorInputDelegate && ((EditorInputDelegate)input).getDelegate() != null ) + newInput = ((EditorInputDelegate)input).getDelegate(); + super.doSetInput( newInput ); + } + + protected void attachSourceLocation() + { + if ( getEditorInput() != null && getEditorInput().getAdapter( FileNotFoundElement.class ) != null ) + { + FileNotFoundElement element = (FileNotFoundElement)getEditorInput().getAdapter( FileNotFoundElement.class ); + if ( element.getLaunch() != null && element.getLaunch().getSourceLocator() instanceof IAdaptable ) + { + ILaunch launch = element.getLaunch(); + ICSourceLocator locator = (ICSourceLocator)((IAdaptable)element.getLaunch().getSourceLocator()).getAdapter( ICSourceLocator.class ); + if ( locator != null ) + { + IPath path = element.getFullPath(); + INewSourceLocationWizard wizard = null; + if ( path.isAbsolute() ) + { + path = path.removeLastSegments( 1 ); + wizard = new AddDirectorySourceLocationWizard( path ); + } + else + { + wizard = new AddSourceLocationWizard( locator.getSourceLocations() ); + } + WizardDialog dialog = new WizardDialog( CDebugUIPlugin.getActiveWorkbenchShell(), wizard ); + if ( dialog.open() == Window.OK ) + { + ICSourceLocation[] locations = locator.getSourceLocations(); + ArrayList list = new ArrayList( Arrays.asList( locations ) ); + list.add( wizard.getSourceLocation() ); + locator.setSourceLocations( (ICSourceLocation[])list.toArray( new ICSourceLocation[list.size()] ) ); + + if ( locator instanceof IPersistableSourceLocator ) + { + ILaunchConfiguration configuration = launch.getLaunchConfiguration(); + saveChanges( configuration, (IPersistableSourceLocator)launch.getSourceLocator() ); + } + Object newElement = locator.getSourceElement( element.getStackFrame() ); + IEditorInput newInput = null; + if ( newElement instanceof IFile ) + { + newInput = new FileEditorInput( (IFile)newElement ); + } + else if ( newElement instanceof FileStorage ) + { + newInput = new ExternalEditorInput( (IStorage)newElement ); + } + ((EditorInputDelegate)getEditorInput()).setDelegate( newInput ); + resetInput( element.getStackFrame() ); + } + } + } + } + } + + private void resetInput( IStackFrame frame ) + { + setInput( getEditorInput() ); + IViewPart view = CDebugUIPlugin.getActivePage().findView( IDebugUIConstants.ID_DEBUG_VIEW ); + if ( view instanceof IDebugView ) + { + ((IDebugView)view).getViewer().setSelection( new StructuredSelection( frame ) ); + } + } + + protected void saveChanges( ILaunchConfiguration configuration, IPersistableSourceLocator locator ) + { + try + { + ILaunchConfigurationWorkingCopy copy = configuration.copy( configuration.getName() ); + copy.setAttribute( ILaunchConfiguration.ATTR_SOURCE_LOCATOR_MEMENTO, locator.getMemento() ); + copy.doSave(); + } + catch( CoreException e ) + { + CDebugUIPlugin.errorDialog( e.getMessage(), (IStatus)null ); + } + } + + /** + * @see org.eclipse.ui.texteditor.StatusTextEditor#createStatusControl(Composite, IStatus) + */ + protected Control createStatusControl( Composite parent, IStatus status ) + { + fAttachSourceForm = new AttachSourceForm( parent, getEditorInput() ); + return fAttachSourceForm.getControl(); + } + + /** + * @see org.eclipse.ui.texteditor.StatusTextEditor#updatePartControl(IEditorInput) + */ + public void updatePartControl( IEditorInput input ) + { + if ( fAttachSourceForm != null ) + { + if ( fAttachSourceForm.getInput() != null && !fAttachSourceForm.getInput().equals( input ) ) + { + fAttachSourceForm = null; + super.updatePartControl( input ); + } + } + else + super.updatePartControl( input ); + } +} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/EditorInputDelegate.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/EditorInputDelegate.java new file mode 100644 index 00000000000..9cce600f72a --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/EditorInputDelegate.java @@ -0,0 +1,173 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.internal.ui.editors; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; + +import org.eclipse.core.resources.IStorage; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IPersistableElement; +import org.eclipse.ui.IStorageEditorInput; + +/** + * + * Enter type comment. + * + * @since Mar 4, 2003 + */ +public class EditorInputDelegate implements IEditorInput +{ + public static final int TYPE_ATTACH_SOURCE = 0; + public static final int TYPE_WORKSPACE_FILE = 1; + public static final int TYPE_EXTERNAL_FILE = 2; + + private int fType = TYPE_ATTACH_SOURCE; + private IEditorInput fDelegate = null; + private FileNotFoundElement fElement = null; + + /** + * Constructor for EditorInputDelegate. + */ + public EditorInputDelegate( FileNotFoundElement element ) + { + fElement = element; + } + + /** + * @see org.eclipse.ui.IEditorInput#exists() + */ + public boolean exists() + { + if ( fDelegate != null ) + return fDelegate.exists(); + return true; + } + + /** + * @see org.eclipse.ui.IEditorInput#getImageDescriptor() + */ + public ImageDescriptor getImageDescriptor() + { + if ( fDelegate != null ) + return fDelegate.getImageDescriptor(); + return null; + } + + /** + * @see org.eclipse.ui.IEditorInput#getName() + */ + public String getName() + { + if ( fDelegate != null ) + return fDelegate.getName(); + return ( fElement != null ) ? fElement.getName() : ""; + } + + /** + * @see org.eclipse.ui.IEditorInput#getPersistable() + */ + public IPersistableElement getPersistable() + { + if ( fDelegate != null ) + return fDelegate.getPersistable(); + return null; + } + + /** + * @see org.eclipse.ui.IEditorInput#getToolTipText() + */ + public String getToolTipText() + { + if ( fDelegate != null ) + return fDelegate.getToolTipText(); + return ""; + } + + /** + * @see org.eclipse.core.runtime.IAdaptable#getAdapter(Class) + */ + public Object getAdapter( Class adapter ) + { + if ( adapter.equals( FileNotFoundElement.class ) ) + return fElement; + if ( getDelegate() != null ) + return getDelegate().getAdapter( adapter ); + return null; + } + + public int getType() + { + return fType; + } + + public void setType( int type ) + { + fType = type; + } + + public IEditorInput getDelegate() + { + return fDelegate; + } + + public void setDelegate( IEditorInput input ) + { + fDelegate = input; + } + + public IStorage getStorage() throws CoreException + { + if ( getDelegate() instanceof IStorageEditorInput ) + return ((IStorageEditorInput)getDelegate()).getStorage(); + return getDummyStorage(); + } + + private IStorage getDummyStorage() + { + return new IStorage() + { + public InputStream getContents() throws CoreException + { + return new ByteArrayInputStream( new byte[0] ); + } + + public IPath getFullPath() + { + if ( getElement() != null ) + return getElement().getFullPath(); + return null; + } + + public String getName() + { + if ( getElement() != null ) + return getElement().getName(); + return ""; + } + + public boolean isReadOnly() + { + return true; + } + + public Object getAdapter( Class adapter ) + { + if ( adapter.equals( IStorage.class ) ) + return this; + return null; + } + }; + } + + protected FileNotFoundElement getElement() + { + return fElement; + } +} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/FileNotFoundElement.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/FileNotFoundElement.java index f6a760ffac9..1730ee539d9 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/FileNotFoundElement.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/editors/FileNotFoundElement.java @@ -6,11 +6,13 @@ package org.eclipse.cdt.debug.internal.ui.editors; import org.eclipse.cdt.debug.core.model.IStackFrameInfo; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Path; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.model.IStackFrame; /** - * Enter type comment. + * The source locator creates an instance of this class if it cannot find the file specified in stack frame. * * @since: Feb 21, 2003 */ @@ -26,14 +28,24 @@ public class FileNotFoundElement fStackFrame = stackFrame; } - public String getName() + public IPath getFullPath() { IStackFrameInfo frameInfo = (IStackFrameInfo)fStackFrame.getAdapter( IStackFrameInfo.class ); if ( frameInfo != null && frameInfo.getFile() != null && frameInfo.getFile().length() > 0 ) { - return frameInfo.getFile(); + Path path = new Path( frameInfo.getFile() ); + if ( path.isValidPath( frameInfo.getFile() ) ) + { + return path; + } } - return ""; + return null; + } + + public String getName() + { + IPath path = getFullPath(); + return ( path != null ) ? path.lastSegment() : ""; } public IStackFrame getStackFrame() diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/CDebugUIPlugin.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/CDebugUIPlugin.java index 984f7cc1dfe..89dae8f1625 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/CDebugUIPlugin.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/CDebugUIPlugin.java @@ -13,6 +13,7 @@ import org.eclipse.cdt.debug.core.sourcelookup.IDisassemblyStorage; import org.eclipse.cdt.debug.internal.ui.CDTDebugModelPresentation; import org.eclipse.cdt.debug.internal.ui.CDebugImageDescriptorRegistry; import org.eclipse.cdt.debug.internal.ui.ColorManager; +import org.eclipse.cdt.debug.internal.ui.editors.CDebugDocumentProvider; import org.eclipse.cdt.debug.internal.ui.editors.DisassemblyDocumentProvider; import org.eclipse.cdt.debug.internal.ui.editors.DisassemblyEditorInput; import org.eclipse.cdt.debug.internal.ui.preferences.CDebugPreferencePage; @@ -75,6 +76,9 @@ public class CDebugUIPlugin extends AbstractUIPlugin // Document provider for disassembly editor private DisassemblyDocumentProvider fDisassemblyDocumentProvider = null; + // Document provider for C/C++ debug editor + private CDebugDocumentProvider fDocumentProvider; + /** * The constructor. */ @@ -497,4 +501,16 @@ public class CDebugUIPlugin extends AbstractUIPlugin display.asyncExec( runnable ); } } + + /** + * Returns the used document provider + */ + public CDebugDocumentProvider getDocumentProvider() + { + if (fDocumentProvider == null) + { + fDocumentProvider = new CDebugDocumentProvider(); + } + return fDocumentProvider; + } }