mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
The extension of CEditor that displays the 'Source Not Found' form.
This commit is contained in:
parent
a895d01561
commit
2ef508ee7f
12 changed files with 850 additions and 480 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -964,6 +964,22 @@
|
|||
</enablement>
|
||||
</action>
|
||||
</editorContribution>
|
||||
<editorContribution
|
||||
targetID="org.eclipse.cdt.debug.ui.editor.CDebugEditor"
|
||||
id="org.eclipse.cdt.debug.ui.CEditor.BreakpointRulerActions">
|
||||
<action
|
||||
label="%Dummy.label"
|
||||
class="org.eclipse.cdt.debug.internal.ui.actions.ManageBreakpointRulerActionDelegate"
|
||||
actionID="RulerDoubleClick"
|
||||
id="org.eclipse.cdt.debug.ui.CEditor.ManageBreakpointRulerAction">
|
||||
<enablement>
|
||||
<pluginState
|
||||
value="activated"
|
||||
id="org.eclipse.cdt.debug.ui">
|
||||
</pluginState>
|
||||
</enablement>
|
||||
</action>
|
||||
</editorContribution>
|
||||
<editorContribution
|
||||
targetID="org.eclipse.cdt.ui.editor.asm.AsmEditor"
|
||||
id="org.eclipse.cdt.ui.editor.asm.AsmEditor.BreakpointRulerActions">
|
||||
|
@ -1091,10 +1107,10 @@
|
|||
id="org.eclipse.cdt.debug.ui.DisassemblyEditor">
|
||||
</editor>
|
||||
<editor
|
||||
name="%AttachSourceEditor.name"
|
||||
name="%CDebugEditor.name"
|
||||
icon="icons/full/obj16/filenotfound_obj.gif"
|
||||
class="org.eclipse.cdt.debug.internal.ui.editors.AttachSourceEditor"
|
||||
id="org.eclipse.cdt.debug.ui.editor.AttachSourceEditor">
|
||||
class="org.eclipse.cdt.debug.internal.ui.editors.CDebugEditor"
|
||||
id="org.eclipse.cdt.debug.ui.editor.CDebugEditor">
|
||||
</editor>
|
||||
</extension>
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 );
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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 );
|
||||
}
|
||||
}
|
|
@ -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 );
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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()
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue