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;
+ }
}