mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Added persistency to the source locator.
This commit is contained in:
parent
fcdfb49342
commit
acf0c44f7a
4 changed files with 131 additions and 11 deletions
|
@ -1,6 +1,7 @@
|
|||
2003-02-18 Mikhail Khodjaiants
|
||||
Added persistency to the source locator.
|
||||
* CUISourceLocator.java
|
||||
* SourceLookupBlock.java
|
||||
* SourcePropertyPage.java
|
||||
|
||||
2003-02-14 Mikhail Khodjaiants
|
||||
|
|
|
@ -16,9 +16,15 @@ import org.eclipse.cdt.debug.internal.ui.wizards.AddDirectorySourceLocationWizar
|
|||
import org.eclipse.cdt.debug.internal.ui.wizards.AddSourceLocationWizard;
|
||||
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
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.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.debug.core.model.IStackFrame;
|
||||
import org.eclipse.jface.dialogs.Dialog;
|
||||
import org.eclipse.jface.window.Window;
|
||||
|
@ -213,7 +219,7 @@ public class CUISourceLocator implements IAdaptable
|
|||
IStackFrameInfo frameInfo = (IStackFrameInfo)stackFrame.getAdapter( IStackFrameInfo.class );
|
||||
if ( frameInfo != null && frameInfo.getFile() != null && frameInfo.getFile().length() > 0 )
|
||||
{
|
||||
showDebugSourcePage( frameInfo.getFile() );
|
||||
showDebugSourcePage( stackFrame.getLaunch(), frameInfo.getFile() );
|
||||
if ( fNewLocationAttached )
|
||||
{
|
||||
res = fSourceLocator.getSourceElement( stackFrame );
|
||||
|
@ -229,7 +235,7 @@ public class CUISourceLocator implements IAdaptable
|
|||
* @param frameInfo the frame information for which source
|
||||
* could not be located
|
||||
*/
|
||||
private void showDebugSourcePage( final String fileName )
|
||||
private void showDebugSourcePage( final ILaunch launch, final String fileName )
|
||||
{
|
||||
Runnable prompter = new Runnable()
|
||||
{
|
||||
|
@ -238,7 +244,7 @@ public class CUISourceLocator implements IAdaptable
|
|||
SourceLookupDialog dialog = new SourceLookupDialog( CDebugUIPlugin.getActiveWorkbenchShell(), fileName );
|
||||
if ( dialog.open() == SourceLookupDialog.ATTACH )
|
||||
{
|
||||
attachSourceLocation( fileName );
|
||||
attachSourceLocation( launch, fileName );
|
||||
}
|
||||
fAllowedToAsk = !dialog.isNotAskAgain();
|
||||
}
|
||||
|
@ -246,7 +252,7 @@ public class CUISourceLocator implements IAdaptable
|
|||
CDebugUIPlugin.getStandardDisplay().syncExec( prompter );
|
||||
}
|
||||
|
||||
protected void attachSourceLocation( String fileName )
|
||||
protected void attachSourceLocation( ILaunch launch, String fileName )
|
||||
{
|
||||
IPath path = new Path( fileName );
|
||||
INewSourceLocationWizard wizard = null;
|
||||
|
@ -263,6 +269,11 @@ public class CUISourceLocator implements IAdaptable
|
|||
if ( dialog.open() == Window.OK )
|
||||
{
|
||||
fSourceLocator.addSourceLocation( wizard.getSourceLocation() );
|
||||
if ( launch.getSourceLocator() instanceof IPersistableSourceLocator )
|
||||
{
|
||||
ILaunchConfiguration configuration = launch.getLaunchConfiguration();
|
||||
saveChanges( configuration, (IPersistableSourceLocator)launch.getSourceLocator() );
|
||||
}
|
||||
fNewLocationAttached = true;
|
||||
}
|
||||
}
|
||||
|
@ -281,4 +292,23 @@ public class CUISourceLocator implements IAdaptable
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public IProject getProject()
|
||||
{
|
||||
return fProject;
|
||||
}
|
||||
|
||||
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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,7 +15,9 @@ import org.eclipse.cdt.debug.internal.ui.dialogfields.IListAdapter;
|
|||
import org.eclipse.cdt.debug.internal.ui.dialogfields.LayoutUtil;
|
||||
import org.eclipse.cdt.debug.internal.ui.dialogfields.ListDialogField;
|
||||
import org.eclipse.cdt.debug.internal.ui.wizards.AddSourceLocationWizard;
|
||||
import org.eclipse.debug.ui.ILaunchConfigurationDialog;
|
||||
import org.eclipse.jface.resource.JFaceResources;
|
||||
import org.eclipse.jface.viewers.ILabelProvider;
|
||||
import org.eclipse.jface.viewers.LabelProvider;
|
||||
import org.eclipse.jface.window.Window;
|
||||
import org.eclipse.jface.wizard.WizardDialog;
|
||||
|
@ -35,6 +37,20 @@ import org.eclipse.swt.widgets.Shell;
|
|||
*/
|
||||
public class SourceLookupBlock
|
||||
{
|
||||
private class SourceListDialogField extends ListDialogField
|
||||
{
|
||||
public SourceListDialogField( IListAdapter adapter, String[] buttonLabels, ILabelProvider lprovider )
|
||||
{
|
||||
super( adapter, buttonLabels, lprovider );
|
||||
}
|
||||
|
||||
protected boolean managedButtonPressed( int index )
|
||||
{
|
||||
super.managedButtonPressed( index );
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private class SourceLookupAdapter implements IListAdapter
|
||||
{
|
||||
public void customButtonPressed( DialogField field, int index )
|
||||
|
@ -79,7 +95,9 @@ public class SourceLookupBlock
|
|||
|
||||
private Composite fControl = null;
|
||||
private Shell fShell = null;
|
||||
private ListDialogField fSourceListField;
|
||||
private SourceListDialogField fSourceListField;
|
||||
private ILaunchConfigurationDialog fLaunchConfigurationDialog = null;
|
||||
private boolean fIsDirty = false;
|
||||
|
||||
/**
|
||||
* Constructor for SourceLookupBlock.
|
||||
|
@ -98,7 +116,7 @@ public class SourceLookupBlock
|
|||
|
||||
SourceLookupAdapter adapter = new SourceLookupAdapter();
|
||||
|
||||
fSourceListField = new ListDialogField( adapter, buttonLabels, new SourceLookupLabelProvider() );
|
||||
fSourceListField = new SourceListDialogField( adapter, buttonLabels, new SourceLookupLabelProvider() );
|
||||
fSourceListField.setLabelText( "Source Locations" );
|
||||
fSourceListField.setUpButtonIndex( 2 );
|
||||
fSourceListField.setDownButtonIndex( 3 );
|
||||
|
@ -130,7 +148,7 @@ public class SourceLookupBlock
|
|||
return fControl;
|
||||
}
|
||||
|
||||
protected void initialize( ICSourceLocation[] locations )
|
||||
public void initialize( ICSourceLocation[] locations )
|
||||
{
|
||||
fSourceListField.removeAllElements();
|
||||
for ( int i = 0; i < locations.length; ++i )
|
||||
|
@ -144,9 +162,17 @@ public class SourceLookupBlock
|
|||
switch( index )
|
||||
{
|
||||
case 0: // Add...
|
||||
addSourceLocation();
|
||||
if ( addSourceLocation() )
|
||||
fIsDirty = true;
|
||||
break;
|
||||
case 2:
|
||||
case 3:
|
||||
case 5:
|
||||
fIsDirty = true;
|
||||
break;
|
||||
}
|
||||
if ( isDirty() )
|
||||
updateLaunchConfigurationDialog();
|
||||
}
|
||||
|
||||
protected void doSelectionChanged()
|
||||
|
@ -158,13 +184,39 @@ public class SourceLookupBlock
|
|||
return (ICSourceLocation[])fSourceListField.getElements().toArray( new ICSourceLocation[fSourceListField.getElements().size()] );
|
||||
}
|
||||
|
||||
private void addSourceLocation()
|
||||
private boolean addSourceLocation()
|
||||
{
|
||||
AddSourceLocationWizard wizard = new AddSourceLocationWizard( getSourceLocations() );
|
||||
WizardDialog dialog = new WizardDialog( fControl.getShell(), wizard );
|
||||
if ( dialog.open() == Window.OK )
|
||||
{
|
||||
fSourceListField.addElement( wizard.getSourceLocation() );
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void updateLaunchConfigurationDialog()
|
||||
{
|
||||
if ( getLaunchConfigurationDialog() != null )
|
||||
{
|
||||
getLaunchConfigurationDialog().updateMessage();
|
||||
getLaunchConfigurationDialog().updateButtons();
|
||||
}
|
||||
}
|
||||
|
||||
public ILaunchConfigurationDialog getLaunchConfigurationDialog()
|
||||
{
|
||||
return fLaunchConfigurationDialog;
|
||||
}
|
||||
|
||||
public void setLaunchConfigurationDialog( ILaunchConfigurationDialog launchConfigurationDialog )
|
||||
{
|
||||
fLaunchConfigurationDialog = launchConfigurationDialog;
|
||||
}
|
||||
|
||||
public boolean isDirty()
|
||||
{
|
||||
return fIsDirty;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,7 +8,14 @@ package org.eclipse.cdt.debug.ui.sourcelookup;
|
|||
import org.eclipse.cdt.debug.core.model.ICDebugTarget;
|
||||
import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocation;
|
||||
import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator;
|
||||
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IAdaptable;
|
||||
import org.eclipse.core.runtime.IStatus;
|
||||
import org.eclipse.debug.core.DebugException;
|
||||
import org.eclipse.debug.core.ILaunchConfiguration;
|
||||
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
|
||||
import org.eclipse.debug.core.model.IPersistableSourceLocator;
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.Control;
|
||||
|
@ -96,11 +103,22 @@ public class SourcePropertyPage extends PropertyPage
|
|||
*/
|
||||
public boolean performOk()
|
||||
{
|
||||
setSourceLocations( fBlock.getSourceLocations() );
|
||||
if ( fBlock.isDirty() )
|
||||
{
|
||||
try
|
||||
{
|
||||
setSourceLocations( fBlock.getSourceLocations() );
|
||||
}
|
||||
catch( DebugException e )
|
||||
{
|
||||
CDebugUIPlugin.errorDialog( e.getMessage(), (IStatus)null );
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void setSourceLocations( ICSourceLocation[] locations )
|
||||
private void setSourceLocations( ICSourceLocation[] locations ) throws DebugException
|
||||
{
|
||||
ICDebugTarget target = getDebugTarget();
|
||||
if ( target != null )
|
||||
|
@ -111,8 +129,27 @@ public class SourcePropertyPage extends PropertyPage
|
|||
if ( locator != null )
|
||||
{
|
||||
locator.setSourceLocations( locations );
|
||||
if ( target.getLaunch().getSourceLocator() instanceof IPersistableSourceLocator )
|
||||
{
|
||||
ILaunchConfiguration configuration = target.getLaunch().getLaunchConfiguration();
|
||||
saveChanges( configuration, (IPersistableSourceLocator)target.getLaunch().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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue