1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

The UI part of the prompting source locator.

This commit is contained in:
Mikhail Khodjaiants 2002-12-17 20:00:40 +00:00
parent 9a7b5690eb
commit 8771229edc
6 changed files with 611 additions and 236 deletions

View file

@ -1,3 +1,10 @@
2002-12-17 Mikhail Khodjaiants
The UI part of the prompting source locator.
* AttachSourceLocationBlock.java
* AttachSourceLocationDialog.java
* CUISourceLocator.java
* plugin.xml
2002-12-16 Mikhail Khodjaiants 2002-12-16 Mikhail Khodjaiants
New formating actions for variables, registers, and expressions New formating actions for variables, registers, and expressions
* VariableFormatActionDelegate.java * VariableFormatActionDelegate.java

View file

@ -667,14 +667,6 @@
id="org.eclipse.cdt.debug.internal.ui.editors.DebugTextHover"> id="org.eclipse.cdt.debug.internal.ui.editors.DebugTextHover">
</textHover> </textHover>
</extension> </extension>
<extension
point="org.eclipse.debug.core.sourceLocators">
<sourceLocator
name="Prompting C/C++ Source Locator"
class="org.eclipse.cdt.debug.ui.CUISourceLocator"
id="org.eclipse.cdt.debug.ui.cSourceLocator">
</sourceLocator>
</extension>
<extension <extension
point="org.eclipse.debug.core.statusHandlers"> point="org.eclipse.debug.core.statusHandlers">
<statusHandler <statusHandler

View file

@ -1,228 +0,0 @@
/*
*(c) Copyright QNX Software Systems Ltd. 2002.
* All Rights Reserved.
*
*/
package org.eclipse.cdt.debug.ui;
import java.text.MessageFormat;
import org.eclipse.cdt.debug.core.model.IStackFrameInfo;
import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceLocator;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
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.jface.dialogs.Dialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.FontMetrics;
import org.eclipse.swt.graphics.GC;
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.Label;
import org.eclipse.swt.widgets.Shell;
/**
*
* A source locator that prompts the user to find source when source cannot
* be found on the current source lookup path.
*
* @since Sep 24, 2002
*/
public class CUISourceLocator implements IPersistableSourceLocator
{
/**
* Identifier for the 'Prompting C/C++ Source Locator' extension
* (value <code>"org.eclipse.cdt.debug.ui.cSourceLocator"</code>).
*/
public static final String ID_PROMPTING_C_SOURCE_LOCATOR = CDebugUIPlugin.getUniqueIdentifier() + ".cSourceLocator"; //$NON-NLS-1$
/**
* The project being debugged.
*/
private IProject fProject = null;
/**
* Underlying source locator.
*/
private CSourceLocator fSourceLocator;
/**
* Whether the user should be prompted for source.
* Initially true, until the user checks the 'do not
* ask again' box.
*/
protected boolean fAllowedToAsk;
/**
* Constructor for CUISourceLocator.
*/
public CUISourceLocator()
{
fSourceLocator = new CSourceLocator();
fAllowedToAsk = true;
}
/**
* Constructor for CUISourceLocator.
*/
public CUISourceLocator( IProject project )
{
fProject = project;
fSourceLocator = new CSourceLocator( project );
fAllowedToAsk = true;
}
/* (non-Javadoc)
* @see org.eclipse.debug.core.model.IPersistableSourceLocator#getMemento()
*/
public String getMemento() throws CoreException
{
return fSourceLocator.getMemento();
}
/* (non-Javadoc)
* @see org.eclipse.debug.core.model.IPersistableSourceLocator#initializeFromMemento(String)
*/
public void initializeFromMemento( String memento ) throws CoreException
{
fSourceLocator.initializeFromMemento( memento );
}
/* (non-Javadoc)
* @see org.eclipse.debug.core.model.IPersistableSourceLocator#initializeDefaults(ILaunchConfiguration)
*/
public void initializeDefaults( ILaunchConfiguration configuration ) throws CoreException
{
fSourceLocator.initializeDefaults( configuration );
}
/* (non-Javadoc)
* @see org.eclipse.debug.core.model.ISourceLocator#getSourceElement(IStackFrame)
*/
public Object getSourceElement( IStackFrame stackFrame )
{
Object res = fSourceLocator.getSourceElement( stackFrame );
if ( res == null && fAllowedToAsk )
{
IStackFrameInfo frameInfo = (IStackFrameInfo)stackFrame.getAdapter( IStackFrameInfo.class );
if ( frameInfo != null )
{
showDebugSourcePage( frameInfo.getFile(), stackFrame.getLaunch().getLaunchConfiguration() );
res = fSourceLocator.getSourceElement( stackFrame );
}
}
return res;
}
/**
* Prompts to locate the source of the given type.
*
* @param frameInfo the frame information for which source
* could not be located
*/
private void showDebugSourcePage( final String fileName, final ILaunchConfiguration lc )
{
Runnable prompter = new Runnable()
{
public void run()
{
SourceLookupDialog dialog = new SourceLookupDialog( CDebugUIPlugin.getActiveWorkbenchShell(), fileName, lc, CUISourceLocator.this );
dialog.open();
fAllowedToAsk = !dialog.isNotAskAgain();
}
};
CDebugUIPlugin.getStandardDisplay().syncExec( prompter );
}
/**
* Dialog that prompts for source lookup path.
*/
private static class SourceLookupDialog extends Dialog
{
private CUISourceLocator fLocator;
private ILaunchConfiguration fConfiguration;
private String fFileName;
private boolean fNotAskAgain;
private Button fAskAgainCheckBox;
public SourceLookupDialog( Shell shell,
String fileName,
ILaunchConfiguration configuration,
CUISourceLocator locator )
{
super( shell );
fFileName = fileName;
fNotAskAgain = false;
fAskAgainCheckBox = null;
fLocator = locator;
fConfiguration = configuration;
}
public boolean isNotAskAgain()
{
return fNotAskAgain;
}
protected Control createDialogArea( Composite parent )
{
getShell().setText( "Debugger Source Lookup" );
Composite composite = (Composite)super.createDialogArea( parent );
composite.setLayout( new GridLayout() );
Label message = new Label( composite, SWT.LEFT + SWT.WRAP );
message.setText( MessageFormat.format( "The source could not be shown as the file ''{0}'' was not found.", new String[] { fFileName } ) );
GridData data = new GridData();
data.widthHint = convertWidthInCharsToPixels( message, 70 );
message.setLayoutData( data );
fAskAgainCheckBox = new Button( composite, SWT.CHECK + SWT.WRAP );
data = new GridData();
data.widthHint = convertWidthInCharsToPixels( fAskAgainCheckBox, 70 );
fAskAgainCheckBox.setLayoutData(data);
fAskAgainCheckBox.setText( "Do &not ask again" );
return composite;
}
/**
* @see Dialog#convertWidthInCharsToPixels(FontMetrics, int)
*/
protected int convertWidthInCharsToPixels( Control control, int chars )
{
GC gc = new GC( control );
gc.setFont( control.getFont() );
FontMetrics fontMetrics = gc.getFontMetrics();
gc.dispose();
return Dialog.convertWidthInCharsToPixels( fontMetrics, chars );
}
protected void okPressed()
{
try
{
if ( fAskAgainCheckBox != null )
{
fNotAskAgain = fAskAgainCheckBox.getSelection();
}
ILaunchConfigurationWorkingCopy wc = fConfiguration.getWorkingCopy();
if ( !fConfiguration.contentsEqual( wc ) )
{
fConfiguration = wc.doSave();
fLocator.initializeDefaults( fConfiguration );
}
}
catch( CoreException e )
{
CDebugUIPlugin.log( e );
}
super.okPressed();
}
}
}

View file

@ -0,0 +1,200 @@
/*
*(c) Copyright QNX Software Systems Ltd. 2002.
* All Rights Reserved.
*
*/
package org.eclipse.cdt.debug.ui.sourcelookup;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.FontMetrics;
import org.eclipse.swt.graphics.GC;
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.DirectoryDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
/**
* Enter type comment.
*
* @since: Dec 12, 2002
*/
public class AttachSourceLocationBlock
{
private Composite fControl = null;
private Text fLocationText = null;
private Text fAssociationText = null;
private Button fAssocitedCheckButton = null;
private FontMetrics fFontMetrics;
private Shell fShell = null;
/**
* Constructor for AttachSourceLocationBlock.
*/
public AttachSourceLocationBlock()
{
}
public void createControl( Composite parent )
{
fShell = parent.getShell();
fControl = new Composite( parent, SWT.NONE );
fControl.setLayout( new GridLayout() );
fControl.setLayoutData( new GridData( GridData.FILL_BOTH ) );
fControl.setFont( JFaceResources.getDialogFont() );
initializeDialogUnits( fControl );
createLocationControls( fControl );
createAssociationControls( fControl );
}
public void setInitialLocationPath( IPath path )
{
if ( path != null )
{
fLocationText.setText( path.toOSString() );
}
}
public void setInitialAssociationPath( IPath path )
{
if ( path != null )
{
fAssocitedCheckButton.setSelection( true );
fAssociationText.setText( path.toOSString() );
}
}
public Control getControl()
{
return fControl;
}
protected void createLocationControls( Composite parent )
{
Label label = new Label( parent, SWT.NONE );
label.setText( "Select location directory:" );
label.setLayoutData( new GridData( GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL ) );
Composite composite = new Composite( parent, SWT.NONE );
composite.setLayout( new GridLayout( 2, false ) );
GridData data = new GridData( GridData.FILL_BOTH );
data.widthHint = Dialog.convertWidthInCharsToPixels( fFontMetrics, 70 );
composite.setLayoutData( data );
fLocationText = new Text( composite, SWT.SINGLE | SWT.BORDER );
fLocationText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL ) );
Button button = createButton( composite, "&Browse..." );
button.addSelectionListener( new SelectionAdapter()
{
/* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(SelectionEvent)
*/
public void widgetSelected( SelectionEvent e )
{
selectLocation();
}
} );
}
protected void selectLocation()
{
DirectoryDialog dialog = new DirectoryDialog( fShell );
dialog.setMessage( "Select Location Directory" );
String result = dialog.open();
if ( result != null )
{
fLocationText.setText( result );
}
}
protected void createAssociationControls( Composite parent )
{
Composite composite = new Composite( parent, SWT.NONE );
composite.setLayout( new GridLayout() );
GridData data = new GridData( GridData.FILL_BOTH );
composite.setLayoutData( data );
fAssocitedCheckButton = new Button( composite, SWT.CHECK );
fAssocitedCheckButton.setText( "&Associate with" );
fAssociationText = new Text( composite, SWT.SINGLE | SWT.BORDER );
fAssociationText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
fAssocitedCheckButton.addSelectionListener( new SelectionAdapter()
{
/* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(SelectionEvent)
*/
public void widgetSelected(SelectionEvent e)
{
associationSelectionChanged();
}
} );
}
protected void associationSelectionChanged()
{
boolean checked = fAssocitedCheckButton.getSelection();
fAssociationText.setEnabled( checked );
if ( !checked )
fAssociationText.setText( "" );
}
protected Button createButton( Composite parent, String label )
{
Button button = new Button( parent, SWT.PUSH );
button.setText( label );
GridData data = new GridData( GridData.END );
data.heightHint = convertVerticalDLUsToPixels( IDialogConstants.BUTTON_HEIGHT );
int widthHint = convertHorizontalDLUsToPixels( IDialogConstants.BUTTON_WIDTH );
data.widthHint = Math.max( widthHint, button.computeSize( SWT.DEFAULT, SWT.DEFAULT, true ).x );
button.setLayoutData( data );
button.setFont( parent.getFont() );
return button;
}
protected int convertVerticalDLUsToPixels( int dlus )
{
if ( fFontMetrics == null )
return 0;
return Dialog.convertVerticalDLUsToPixels( fFontMetrics, dlus );
}
protected int convertHorizontalDLUsToPixels( int dlus )
{
if ( fFontMetrics == null )
return 0;
return Dialog.convertHorizontalDLUsToPixels( fFontMetrics, dlus );
}
protected void initializeDialogUnits( Control control )
{
// Compute and store a font metric
GC gc = new GC( control );
gc.setFont( control.getFont() );
fFontMetrics = gc.getFontMetrics();
gc.dispose();
}
public String getLocationPath()
{
return fLocationText.getText().trim();
}
public String getAssociationPath()
{
if ( fAssocitedCheckButton.getSelection() )
{
return fAssociationText.getText().trim();
}
return "";
}
}

View file

@ -0,0 +1,130 @@
/*
*(c) Copyright QNX Software Systems Ltd. 2002.
* All Rights Reserved.
*
*/
package org.eclipse.cdt.debug.ui.sourcelookup;
import java.text.MessageFormat;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
/**
* Enter type comment.
*
* @since: Dec 12, 2002
*/
public class AttachSourceLocationDialog extends Dialog
{
private IPath fLocationPath = null;
private IPath fAssociationPath = null;
private AttachSourceLocationBlock fAttachBlock;
/**
* Constructor for AttachSourceLocationDialog.
* @param parentShell
*/
public AttachSourceLocationDialog( Shell parentShell )
{
super( parentShell );
fAttachBlock = new AttachSourceLocationBlock();
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#createDialogArea(Composite)
*/
protected Control createDialogArea( Composite parent )
{
Composite composite = (Composite)super.createDialogArea( parent );
getShell().setText( "Attach Source Location" );
fAttachBlock.createControl( composite );
fAttachBlock.setInitialAssociationPath( fAssociationPath );
return composite;
}
public void setInitialPath( IPath path )
{
fAssociationPath = path;
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#okPressed()
*/
protected void okPressed()
{
String locationString = fAttachBlock.getLocationPath();
if ( locationString.length() == 0 )
{
MessageDialog.openError( getShell(), getShell().getText(), "Location directory is not selected" );
return;
}
if ( !isLocationPathValid( locationString ) )
{
MessageDialog.openError( getShell(), getShell().getText(), MessageFormat.format( "Invalid path: ''{0}''", new String[] { locationString } ) );
return;
}
String associationString = fAttachBlock.getAssociationPath();
if ( !isAssociationPathValid( associationString ) )
{
MessageDialog.openError( getShell(), getShell().getText(), MessageFormat.format( "Invalid path: ''{0}''", new String[] { associationString } ) );
return;
}
fLocationPath = getLocation0();
fAssociationPath = getAssociation0();
super.okPressed();
}
public boolean isLocationPathValid( String pathString )
{
if ( Path.EMPTY.isValidPath( pathString ) )
{
Path path = new Path( pathString );
return path.toFile().exists();
}
return false;
}
public boolean isAssociationPathValid( String pathString )
{
if ( pathString.length() > 0 )
{
return Path.EMPTY.isValidPath( pathString );
}
return true;
}
public IPath getLocation()
{
return fLocationPath;
}
private IPath getLocation0()
{
if ( Path.EMPTY.isValidPath( fAttachBlock.getLocationPath() ) )
{
return new Path( fAttachBlock.getLocationPath() );
}
return null;
}
public IPath getAssociation()
{
return fAssociationPath;
}
private IPath getAssociation0()
{
if ( Path.EMPTY.isValidPath( fAttachBlock.getAssociationPath() ) )
{
return new Path( fAttachBlock.getAssociationPath() );
}
return null;
}
}

View file

@ -0,0 +1,274 @@
/*
*(c) Copyright QNX Software Systems Ltd. 2002.
* All Rights Reserved.
*
*/
package org.eclipse.cdt.debug.ui.sourcelookup;
import java.text.MessageFormat;
import org.eclipse.cdt.debug.core.model.IStackFrameInfo;
import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator;
import org.eclipse.cdt.debug.core.sourcelookup.ISourceMode;
import org.eclipse.cdt.debug.internal.core.sourcelookup.CDirectorySourceLocation;
import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceLocator;
import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceManager;
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.Path;
import org.eclipse.debug.core.model.IStackFrame;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.FontMetrics;
import org.eclipse.swt.graphics.GC;
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.Label;
import org.eclipse.swt.widgets.Layout;
import org.eclipse.swt.widgets.Shell;
/**
*
* A source locator that prompts the user to find source when source cannot
* be found on the current source lookup path.
*
* @since Sep 24, 2002
*/
public class CUISourceLocator implements IAdaptable
{
/**
* Dialog that prompts for source lookup path.
*/
private static class SourceLookupDialog extends Dialog
{
public static final int ATTACH_ID = 1000;
public static final int ATTACH = 1000;
private String fFileName;
private boolean fNotAskAgain;
private Button fAskAgainCheckBox;
public SourceLookupDialog( Shell shell,
String fileName )
{
super( shell );
fFileName = fileName;
fNotAskAgain = false;
fAskAgainCheckBox = null;
}
public boolean isNotAskAgain()
{
return fNotAskAgain;
}
protected Control createDialogArea( Composite parent )
{
getShell().setText( "Debugger Source Lookup" );
Composite composite = (Composite)super.createDialogArea( parent );
composite.setLayout( new GridLayout() );
Composite group = new Composite( composite, SWT.NONE );
group.setLayout( new GridLayout() );
createMessageControls( group );
createControls( group );
return composite;
}
protected void createMessageControls( Composite parent )
{
Label message = new Label( parent, SWT.LEFT + SWT.WRAP );
message.setText( MessageFormat.format( "The source could not be shown as the file ''{0}'' was not found.", new String[] { fFileName } ) );
GridData data = new GridData();
data.widthHint = convertWidthInCharsToPixels( message, 70 );
message.setLayoutData( data );
}
protected void createControls( Composite parent )
{
Composite composite = new Composite( parent, SWT.NONE );
Layout layout = new GridLayout();
composite.setLayout( layout );
GridData data = new GridData();
data.horizontalAlignment = GridData.FILL;
data.grabExcessHorizontalSpace = true;
composite.setLayoutData( data );
fAskAgainCheckBox = new Button( composite, SWT.CHECK + SWT.WRAP );
data = new GridData();
data.horizontalAlignment = GridData.FILL;
fAskAgainCheckBox.setLayoutData( data );
data.grabExcessHorizontalSpace = true;
fAskAgainCheckBox.setText( "Do &not ask again" );
fAskAgainCheckBox.addSelectionListener( new SelectionAdapter()
{
/* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(SelectionEvent)
*/
public void widgetSelected( SelectionEvent e )
{
askAgainSelected();
}
} );
}
protected void askAgainSelected()
{
getButton( ATTACH_ID ).setEnabled( !fAskAgainCheckBox.getSelection() );
}
/**
* @see Dialog#convertWidthInCharsToPixels(FontMetrics, int)
*/
protected int convertWidthInCharsToPixels( Control control, int chars )
{
GC gc = new GC( control );
gc.setFont( control.getFont() );
FontMetrics fontMetrics = gc.getFontMetrics();
gc.dispose();
return Dialog.convertWidthInCharsToPixels( fontMetrics, chars );
}
protected void okPressed()
{
if ( fAskAgainCheckBox != null )
{
fNotAskAgain = fAskAgainCheckBox.getSelection();
}
super.okPressed();
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(Composite)
*/
protected void createButtonsForButtonBar( Composite parent )
{
super.createButtonsForButtonBar( parent );
Button button = createButton( parent, ATTACH_ID, "&Attach ...", false );
button.setToolTipText( "Attach New Source Location" );
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#buttonPressed(int)
*/
protected void buttonPressed( int buttonId )
{
super.buttonPressed( buttonId );
if ( buttonId == ATTACH_ID )
attachPressed();
}
protected void attachPressed()
{
setReturnCode( ATTACH );
close();
}
}
/**
* The project being debugged.
*/
private IProject fProject = null;
/**
* Underlying source locator.
*/
private CSourceManager fSourceLocator;
/**
* Whether the user should be prompted for source.
* Initially true, until the user checks the 'do not
* ask again' box.
*/
protected boolean fAllowedToAsk;
protected boolean fNewLocationAttached;
/**
* Constructor for CUISourceLocator.
*/
public CUISourceLocator( IProject project )
{
fProject = project;
fSourceLocator = new CSourceManager( new CSourceLocator( project ) );
fAllowedToAsk = true;
fNewLocationAttached = false;
}
public Object getSourceElement( IStackFrame stackFrame )
{
Object res = fSourceLocator.getSourceElement( stackFrame );
if ( res == null && fAllowedToAsk )
{
IStackFrameInfo frameInfo = (IStackFrameInfo)stackFrame.getAdapter( IStackFrameInfo.class );
if ( frameInfo != null )
{
showDebugSourcePage( frameInfo.getFile() );
if ( fNewLocationAttached )
{
res = fSourceLocator.getSourceElement( stackFrame );
}
}
}
return res;
}
/**
* Prompts to locate the source of the given type.
*
* @param frameInfo the frame information for which source
* could not be located
*/
private void showDebugSourcePage( final String fileName )
{
Runnable prompter = new Runnable()
{
public void run()
{
SourceLookupDialog dialog = new SourceLookupDialog( CDebugUIPlugin.getActiveWorkbenchShell(), fileName );
if ( dialog.open() == SourceLookupDialog.ATTACH )
{
attachSourceLocation( fileName );
}
fAllowedToAsk = !dialog.isNotAskAgain();
}
};
CDebugUIPlugin.getStandardDisplay().syncExec( prompter );
}
protected void attachSourceLocation( String fileName )
{
AttachSourceLocationDialog dialog = new AttachSourceLocationDialog( CDebugUIPlugin.getActiveWorkbenchShell() );
Path path = new Path( fileName );
dialog.setInitialPath( path.removeLastSegments( 1 ) );
if ( dialog.open() == Dialog.OK )
{
if ( dialog.getLocation() != null )
{
fSourceLocator.addSourceLocation( new CDirectorySourceLocation( dialog.getLocation(), dialog.getAssociation() ) );
fNewLocationAttached = true;
}
}
}
/* (non-Javadoc)
* @see org.eclipse.core.runtime.IAdaptable#getAdapter(Class)
*/
public Object getAdapter( Class adapter )
{
if ( fSourceLocator != null )
{
if ( adapter.equals( ICSourceLocator.class ) )
return fSourceLocator;
if ( adapter.equals( ISourceMode.class ) )
return fSourceLocator;
}
return null;
}
}