diff --git a/launch/org.eclipse.cdt.launch/ChangeLog b/launch/org.eclipse.cdt.launch/ChangeLog index 98c4f78b4fb..5c4546acf4f 100644 --- a/launch/org.eclipse.cdt.launch/ChangeLog +++ b/launch/org.eclipse.cdt.launch/ChangeLog @@ -1,3 +1,16 @@ +2004-08-23 Mikhail Khodjaiants + Changes in the "Debugger" tab of the launch configuration dialog. + Replaced the "Run in debugger/Attach to running process" radio button by + the "Attach to running process" check box. + Added the "Advanced" button that opens the "Advanced options" dialog. + The "Automatically track the values of variables" check box is moved to the dialog. + The "CoreFileDebuggerTab" class is implemented as an extension of "CDebuggerTab". + * LaunchUIPluginResources.properties + * AbstractCDebuggerTab.java + * CoreFileCLaunchConfigurationTabGroup.java + * CDebuggerTab.java + * CorefileDebuggerTab.java renamed to CoreFileDebuggerTab.java + 2004-08-12 Mikhail Khodjaiants Warning cleanup. * CApplicationLaunchShortcut.java diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/AbstractCDebuggerTab.java b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/AbstractCDebuggerTab.java index f4fd0e25ec9..655d191fbb7 100644 --- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/AbstractCDebuggerTab.java +++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/AbstractCDebuggerTab.java @@ -153,10 +153,6 @@ public abstract class AbstractCDebuggerTab extends CLaunchConfigurationTab { LaunchUIPlugin.errorDialog(LaunchUIPlugin.getResourceString("AbstractCDebuggerTab.ErrorLoadingDebuggerPage"), e.getStatus()); //$NON-NLS-1$ } setDynamicTab(tab); - ICDebugConfiguration oldConfig = getDebugConfig(); - if ( oldConfig != null && oldConfig != debugConfig ) { - setInitializeDefault(true); - } } setDebugConfig(debugConfig); if (getDynamicTab() == null) { diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/CoreFileCLaunchConfigurationTabGroup.java b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/CoreFileCLaunchConfigurationTabGroup.java index f06df0ea115..90f44e3bfca 100644 --- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/CoreFileCLaunchConfigurationTabGroup.java +++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/CoreFileCLaunchConfigurationTabGroup.java @@ -13,7 +13,7 @@ package org.eclipse.cdt.launch.internal.ui; import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants; import org.eclipse.cdt.launch.ui.CMainTab; import org.eclipse.cdt.launch.ui.CSourceLookupTab; -import org.eclipse.cdt.launch.ui.CorefileDebuggerTab; +import org.eclipse.cdt.launch.ui.CoreFileDebuggerTab; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.ui.AbstractLaunchConfigurationTabGroup; import org.eclipse.debug.ui.CommonTab; @@ -28,7 +28,7 @@ public class CoreFileCLaunchConfigurationTabGroup extends AbstractLaunchConfigur public void createTabs(ILaunchConfigurationDialog dialog, String mode) { ILaunchConfigurationTab[] tabs = new ILaunchConfigurationTab[] { new CMainTab(), - new CorefileDebuggerTab(), + new CoreFileDebuggerTab(), new CSourceLookupTab(), new CommonTab() }; diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchUIPluginResources.properties b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchUIPluginResources.properties index d2af8cae16b..d8505d7ccee 100644 --- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchUIPluginResources.properties +++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchUIPluginResources.properties @@ -90,13 +90,15 @@ CMainTab.Search...=Searc&h... CMainTab.Choose_program_to_run=Choose a &program to run: CMainTab.Choose_program_to_run_from_NAME=Choose a program to run from {0}: -CDebuggerTab.Run_program_in_debugger=Run program in debugger. -CDebuggerTab.Attach_to_running_process=Attach to running process. -CDebuggerTab.Stop_at_main_on_startup=Stop at main() on startup. +CDebuggerTab.Attach_to_running_process=Attach to running process +CDebuggerTab.Advanced_Options_Dialog_Title=Advanced Options +CDebuggerTab.Stop_at_main_on_startup=Stop at main() on startup CDebuggerTab.Automatically_track_values_of_variables=Automatically track the values of variables. CDebuggerTab.Debugger_Options=Debugger Options +CDebuggerTab.Mode_not_supported=Mode ''{0}'' is not supported by selected debugger +CDebuggerTab.Advanced=Advanced... CDebuggerTab.No_debugger_available=No debugger available -CDebuggerTab.Select_Debug_mode=Select a Debug mode. +CDebuggerTab.CPU_is_not_supported=The CPU is not supported by selected debugger. CEnvironmentTab.Edit_Variable=Edit Variable CEnvironmentTab.New_Variable=New Variable diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CDebuggerTab.java b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CDebuggerTab.java index 4017ec4a55b..b4163c2885e 100644 --- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CDebuggerTab.java +++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CDebuggerTab.java @@ -10,19 +10,24 @@ ***********************************************************************/ package org.eclipse.cdt.launch.ui; +import java.text.MessageFormat; import java.util.Arrays; import java.util.Comparator; - +import java.util.HashMap; +import java.util.Map; import org.eclipse.cdt.core.model.IBinary; import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.debug.core.CDebugCorePlugin; import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants; import org.eclipse.cdt.debug.core.ICDebugConfiguration; +import org.eclipse.cdt.debug.internal.ui.PixelConverter; import org.eclipse.cdt.launch.internal.ui.AbstractCDebuggerTab; import org.eclipse.cdt.launch.internal.ui.LaunchUIPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; @@ -33,295 +38,246 @@ import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.help.WorkbenchHelp; public class CDebuggerTab extends AbstractCDebuggerTab { - protected Combo fDCombo; - protected Button fStopInMain; - protected Button fAttachButton; - protected Button fRunButton; - protected Button fVarBookKeeping; + public class AdvancedDebuggerOptionsDialog extends Dialog { - private final boolean DEFAULT_STOP_AT_MAIN = true; - private boolean pageUpdated; + private Button fVarBookKeeping; - public void createControl(Composite parent) { - GridData gd; + private Map fAttributes; - Composite comp = new Composite(parent, SWT.NONE); - setControl(comp); + /** + * Constructor for AdvancedDebuggerOptionsDialog. + */ + public AdvancedDebuggerOptionsDialog( Shell parentShell, Map attributes ) { + super( parentShell ); + fAttributes = attributes; + } - WorkbenchHelp.setHelp(getControl(), ICDTLaunchHelpContextIds.LAUNCH_CONFIGURATION_DIALOG_DEBBUGER_TAB); + /* (non-Javadoc) + * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite) + */ + protected Control createDialogArea( Composite parent ) { + Composite composite = (Composite)super.createDialogArea( parent ); + fVarBookKeeping = new Button( composite, SWT.CHECK ); + fVarBookKeeping.setText( LaunchUIPlugin.getResourceString( "CDebuggerTab.Automatically_track_values_of_variables" ) ); //$NON-NLS-1$ + initialize(); + return composite; + } - GridLayout layout = new GridLayout(2, false); - comp.setLayout(layout); + private Map getAttributes() { + return fAttributes; + } - Composite comboComp = new Composite(comp, SWT.NONE); - layout = new GridLayout(2, false); - comboComp.setLayout(layout); - Label dlabel = new Label(comboComp, SWT.NONE); - dlabel.setText(LaunchUIPlugin.getResourceString("Launch.common.DebuggerColon")); //$NON-NLS-1$ - fDCombo = new Combo(comboComp, SWT.DROP_DOWN | SWT.READ_ONLY); - fDCombo.addModifyListener(new ModifyListener() { + protected void okPressed() { + saveValues(); + super.okPressed(); + } - public void modifyText(ModifyEvent e) { - updateComboFromSelection(); - } - }); + private void initialize() { + Map attr = getAttributes(); + Object varBookkeeping = attr.get( ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ENABLE_VARIABLE_BOOKKEEPING ); + fVarBookKeeping.setSelection( ( varBookkeeping instanceof Boolean ) ? !((Boolean)varBookkeeping).booleanValue() : true ); + } - Composite radioComp = new Composite(comp, SWT.NONE); - GridLayout radioLayout = new GridLayout(2, true); - radioLayout.marginHeight = 0; - radioLayout.marginWidth = 0; - radioComp.setLayout(radioLayout); - fRunButton = createRadioButton(radioComp, LaunchUIPlugin.getResourceString("CDebuggerTab.Run_program_in_debugger")); //$NON-NLS-1$ - fRunButton.addSelectionListener(new SelectionAdapter() { + private void saveValues() { + Map attr = getAttributes(); + Boolean varBookkeeping = ( fVarBookKeeping.getSelection() ) ? Boolean.FALSE : Boolean.TRUE; + attr.put( ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ENABLE_VARIABLE_BOOKKEEPING, varBookkeeping ); + updateLaunchConfigurationDialog(); + } - public void widgetSelected(SelectionEvent e) { - if (fRunButton.getSelection() == true) { - fStopInMain.setEnabled(true); - } else { - fStopInMain.setEnabled(false); - } - updateLaunchConfigurationDialog(); - } - }); - fAttachButton = createRadioButton(radioComp, LaunchUIPlugin.getResourceString("CDebuggerTab.Attach_to_running_process")); //$NON-NLS-1$ - fAttachButton.addSelectionListener(new SelectionAdapter() { + /* (non-Javadoc) + * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell) + */ + protected void configureShell( Shell newShell ) { + super.configureShell( newShell ); + newShell.setText( LaunchUIPlugin.getResourceString( "CDebuggerTab.Advanced_Options_Dialog_Title" ) ); //$NON-NLS-1$ + } - public void widgetSelected(SelectionEvent e) { - updateLaunchConfigurationDialog(); - } - }); - - Composite optionComp = new Composite(comp, SWT.NONE); - layout = new GridLayout(2, false); - optionComp.setLayout(layout); - gd = new GridData(); - gd.horizontalSpan = 2; - optionComp.setLayoutData(gd); - - fStopInMain = new Button(optionComp, SWT.CHECK); - fStopInMain.setText(LaunchUIPlugin.getResourceString("CDebuggerTab.Stop_at_main_on_startup")); //$NON-NLS-1$ - fStopInMain.addSelectionListener(new SelectionAdapter() { - - public void widgetSelected(SelectionEvent e) { - updateLaunchConfigurationDialog(); - } - }); - - fVarBookKeeping = new Button(optionComp, SWT.CHECK); - fVarBookKeeping.setText(LaunchUIPlugin.getResourceString("CDebuggerTab.Automatically_track_values_of_variables")); //$NON-NLS-1$ - fVarBookKeeping.addSelectionListener(new SelectionAdapter() { - - public void widgetSelected(SelectionEvent e) { - updateLaunchConfigurationDialog(); - } - }); - - Group debuggerGroup = new Group(comp, SWT.SHADOW_ETCHED_IN); - debuggerGroup.setText(LaunchUIPlugin.getResourceString("CDebuggerTab.Debugger_Options")); //$NON-NLS-1$ - setDynamicTabHolder(debuggerGroup); - GridLayout tabHolderLayout = new GridLayout(); - tabHolderLayout.marginHeight = 0; - tabHolderLayout.marginWidth = 0; - tabHolderLayout.numColumns = 1; - getDynamicTabHolder().setLayout(tabHolderLayout); - gd = new GridData(GridData.FILL_BOTH); - gd.horizontalSpan = 2; - getDynamicTabHolder().setLayoutData(gd); + /* (non-Javadoc) + * @see org.eclipse.jface.window.Window#close() + */ + public boolean close() { + fAttributes.clear(); + return super.close(); + } } - protected void loadDebuggerComboBox(ILaunchConfiguration config, String selection) { + protected Combo fDCombo; + protected Button fAdvancedButton; + protected Button fStopInMain; + protected Button fAttachButton; + + private Map fAdvancedAttributes = new HashMap( 5 ); + + private boolean fPageUpdated; + + private boolean fIsInitializing = false; + + public void createControl( Composite parent ) { + Composite comp = new Composite( parent, SWT.NONE ); + setControl( comp ); + WorkbenchHelp.setHelp( getControl(), ICDTLaunchHelpContextIds.LAUNCH_CONFIGURATION_DIALOG_DEBBUGER_TAB ); + GridLayout layout = new GridLayout( 2, true ); + comp.setLayout( layout ); + GridData gd = new GridData(); + gd.horizontalAlignment = GridData.FILL_HORIZONTAL; + gd.grabExcessHorizontalSpace = true; + comp.setLayoutData( gd ); + + createDebuggerCombo( comp ); + createAttachButton( comp ); + createOptionsComposite( comp ); + createDebuggerGroup( comp ); + } + + protected void loadDebuggerComboBox( ILaunchConfiguration config, String selection ) { ICDebugConfiguration[] debugConfigs; - String configPlatform = getPlatform(config); - String programCPU = ICDebugConfiguration.CPU_NATIVE; - ICElement ce = getContext(config, configPlatform); - if (ce instanceof IBinary) { - IBinary bin = (IBinary) ce; - programCPU = bin.getCPU(); - } + String configPlatform = getPlatform( config ); fDCombo.removeAll(); debugConfigs = CDebugCorePlugin.getDefault().getDebugConfigurations(); - Arrays.sort(debugConfigs, new Comparator() { + Arrays.sort( debugConfigs, new Comparator() { - public int compare(Object o1, Object o2) { - ICDebugConfiguration ic1 = (ICDebugConfiguration) o1; - ICDebugConfiguration ic2 = (ICDebugConfiguration) o2; - return ic1.getName().compareTo(ic2.getName()); + public int compare( Object o1, Object o2 ) { + ICDebugConfiguration ic1 = (ICDebugConfiguration)o1; + ICDebugConfiguration ic2 = (ICDebugConfiguration)o2; + return ic1.getName().compareTo( ic2.getName() ); } - }); - int x = 0; + } ); int selndx = -1; - for (int i = 0; i < debugConfigs.length; i++) { - if (debugConfigs[i].supportsMode(ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN) - || debugConfigs[i].supportsMode(ICDTLaunchConfigurationConstants.DEBUGGER_MODE_ATTACH)) { + int x = 0; + for( int i = 0; i < debugConfigs.length; i++ ) { + if ( debugConfigs[i].supportsMode( ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN ) || debugConfigs[i].supportsMode( ICDTLaunchConfigurationConstants.DEBUGGER_MODE_ATTACH ) ) { String debuggerPlatform = debugConfigs[i].getPlatform(); - if (debuggerPlatform.equalsIgnoreCase(configPlatform) - || (debuggerPlatform.equalsIgnoreCase("*"))) { //$NON-NLS-1$ - if (debugConfigs[i].supportsCPU(programCPU)) { - fDCombo.add(debugConfigs[i].getName()); - fDCombo.setData(Integer.toString(x), debugConfigs[i]); - // select first exact matching debugger for platform or requested selection - if ((selndx == -1 && debuggerPlatform.equalsIgnoreCase(configPlatform)) - || selection.equals(debugConfigs[i].getID())) { - selndx = x; - } - x++; + if ( validatePlatform( config, debugConfigs[i] ) ) { + fDCombo.add( debugConfigs[i].getName() ); + fDCombo.setData( Integer.toString( x ), debugConfigs[i] ); + // select first exact matching debugger for platform or requested selection + if ( (selndx == -1 && debuggerPlatform.equalsIgnoreCase( configPlatform )) || selection.equals( debugConfigs[i].getID() ) ) { + selndx = x; } + x++; } } } // if no selection meaning nothing in config the force initdefault on tab - setInitializeDefault(selection.equals("") ? true : false); //$NON-NLS-1$ - - pageUpdated = false; - fDCombo.select(selndx == -1 ? 0 : selndx); + setInitializeDefault( selection.equals( "" ) ? true : false ); //$NON-NLS-1$ + fPageUpdated = false; + fDCombo.select( selndx == -1 ? 0 : selndx ); //The behaviour is undefined for if the callbacks should be triggered for this, //so force page update if needed. - if (!pageUpdated) { + if ( !fPageUpdated ) { updateComboFromSelection(); } - pageUpdated = false; - getControl().getParent().layout(true); + fPageUpdated = false; + getControl().getParent().layout( true ); } protected void updateComboFromSelection() { - pageUpdated = true; + fPageUpdated = true; handleDebuggerChanged(); - ICDebugConfiguration debugConfig = getConfigForCurrentDebugger(); - if (debugConfig != null) { - fRunButton.setEnabled(debugConfig.supportsMode(ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN)); - fRunButton.setSelection(false); - fAttachButton.setEnabled(debugConfig.supportsMode(ICDTLaunchConfigurationConstants.DEBUGGER_MODE_ATTACH)); - fAttachButton.setSelection(false); - try { - String mode = getLaunchConfiguration().getAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, - ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN); - if (mode.equals(ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN) && fRunButton.isEnabled()) { - fRunButton.setSelection(true); - } else if (mode.equals(ICDTLaunchConfigurationConstants.DEBUGGER_MODE_ATTACH) && fAttachButton.isEnabled()) { - fAttachButton.setSelection(true); - } - if (fRunButton.getSelection() == true) { - fStopInMain.setEnabled(true); - } else { - fStopInMain.setEnabled(false); - } - } catch (CoreException ex) { - } - } + initializeCommonControls( getLaunchConfigurationWorkingCopy() ); updateLaunchConfigurationDialog(); } - public void setDefaults(ILaunchConfigurationWorkingCopy config) { - super.setDefaults(config); - config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN, DEFAULT_STOP_AT_MAIN); - config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ENABLE_VARIABLE_BOOKKEEPING, false); - config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, - ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN); + public void setDefaults( ILaunchConfigurationWorkingCopy config ) { + super.setDefaults( config ); + config.setAttribute( ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN, ICDTLaunchConfigurationConstants.DEBUGGER_STOP_AT_MAIN_DEFAULT ); + config.setAttribute( ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ENABLE_VARIABLE_BOOKKEEPING, false ); + config.setAttribute( ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN ); } - public void activated(ILaunchConfigurationWorkingCopy workingCopy) { - super.activated(workingCopy); + public void initializeFrom( ILaunchConfiguration config ) { + setInitializing( true ); + super.initializeFrom( config ); try { - String id = workingCopy.getAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ID, ""); //$NON-NLS-1$ - loadDebuggerComboBox(workingCopy, id); - } catch (CoreException e) { + String id = config.getAttribute( ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ID, "" ); //$NON-NLS-1$ + loadDebuggerComboBox( config, id ); + initializeCommonControls( config ); } + catch( CoreException e ) { + } + setInitializing( false ); } - public void initializeFrom(ILaunchConfiguration config) { - super.initializeFrom(config); - try { - String id = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ID, ""); //$NON-NLS-1$ - loadDebuggerComboBox(config, id); - String mode = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, - ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN); - if (mode.equals(ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN)) { - fRunButton.setSelection(true); - fAttachButton.setSelection(false); - } else if (mode.equals(ICDTLaunchConfigurationConstants.DEBUGGER_MODE_ATTACH)) { - fAttachButton.setSelection(true); - fRunButton.setSelection(false); - } - if (config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN, DEFAULT_STOP_AT_MAIN) == true) { - fStopInMain.setSelection(true); - } - if (config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ENABLE_VARIABLE_BOOKKEEPING, false) == false) { - fVarBookKeeping.setSelection(true); - } - } catch (CoreException e) { - return; + public void performApply( ILaunchConfigurationWorkingCopy config ) { + super.performApply( config ); + if ( fAttachButton.getSelection() ) { + config.setAttribute( ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, ICDTLaunchConfigurationConstants.DEBUGGER_MODE_ATTACH ); } + else { + config.setAttribute( ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN, fStopInMain.getSelection() ); + config.setAttribute( ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN ); + } + applyAdvancedAttributes( config ); } - public void performApply(ILaunchConfigurationWorkingCopy config) { - if (isValid(config)) { - super.performApply(config); - config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN, false); - config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ENABLE_VARIABLE_BOOKKEEPING, - !fVarBookKeeping.getSelection()); - if (fAttachButton.getSelection() == true) { - config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, - ICDTLaunchConfigurationConstants.DEBUGGER_MODE_ATTACH); - } else { - config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN, fStopInMain.getSelection()); - config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, - ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN); - } - } - } - - public boolean isValid(ILaunchConfiguration config) { - if (!validateDebuggerConfig(config)) { - setErrorMessage(LaunchUIPlugin.getResourceString("CDebuggerTab.No_debugger_available")); //$NON-NLS-1$ + public boolean isValid( ILaunchConfiguration config ) { + if ( !validateDebuggerConfig( config ) ) { return false; } - if (super.isValid(config) == false) { + ICDebugConfiguration debugConfig = getDebugConfig(); + if ( debugConfig == null ) { + setErrorMessage( LaunchUIPlugin.getResourceString( "CDebuggerTab.No_debugger_available" ) ); //$NON-NLS-1$ return false; } - if (!fRunButton.getSelection() && !fAttachButton.getSelection()) { - setErrorMessage(LaunchUIPlugin.getResourceString("CDebuggerTab.Select_Debug_mode")); //$NON-NLS-1$ + if ( fAttachButton != null ) { + String mode = ( fAttachButton.getSelection() ) ? ICDTLaunchConfigurationConstants.DEBUGGER_MODE_ATTACH : ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN; + if ( !debugConfig.supportsMode( mode ) ) { + setErrorMessage( MessageFormat.format( LaunchUIPlugin.getResourceString( "CDebuggerTab.Mode_not_supported" ), new String[] { mode } ) ); //$NON-NLS-1$ + return false; + } + } + if ( super.isValid( config ) == false ) { return false; } return true; } - private boolean validateDebuggerConfig(ILaunchConfiguration config) { - ICElement ce = getContext(config, null); - String projectPlatform = getPlatform(config); + protected boolean validatePlatform( ILaunchConfiguration config, ICDebugConfiguration debugConfig ) { + String configPlatform = getPlatform( config ); + String debuggerPlatform = debugConfig.getPlatform(); + return ( debuggerPlatform.equals( "*" ) || debuggerPlatform.equalsIgnoreCase( configPlatform ) ); //$NON-NLS-1$ + } + + protected boolean validateCPU( ILaunchConfiguration config, ICDebugConfiguration debugConfig ) { + ICElement ce = getContext( config, null ); String projectCPU = ICDebugConfiguration.CPU_NATIVE; - if (ce != null) { - if (ce instanceof IBinary) { - IBinary bin = (IBinary) ce; + if ( ce != null ) { + if ( ce instanceof IBinary ) { + IBinary bin = (IBinary)ce; projectCPU = bin.getCPU(); } } + return debugConfig.supportsCPU( projectCPU ); + } + + protected boolean validateDebuggerConfig( ILaunchConfiguration config ) { ICDebugConfiguration debugConfig = getDebugConfig(); - if (debugConfig == null) { + if ( debugConfig == null ) { + setErrorMessage( LaunchUIPlugin.getResourceString( "CDebuggerTab.No_debugger_available" ) ); //$NON-NLS-1$ return false; } - String debuggerPlatform = debugConfig.getPlatform(); - if (debuggerPlatform.equalsIgnoreCase(projectPlatform) - || (debuggerPlatform.equalsIgnoreCase("*"))) { //$NON-NLS-1$ - if (debugConfig.supportsCPU(projectCPU)) { - return true; - } + if ( !validatePlatform( config, debugConfig ) || !validateCPU( config, debugConfig ) ) { + setErrorMessage( LaunchUIPlugin.getResourceString( "CDebuggerTab.CPU_is_not_supported" ) ); //$NON-NLS-1$ + return false; } - return false; + return true; } /** - * Return the class that implements ILaunchConfigurationTab that is registered against the debugger id of the - * currently selected debugger. + * Return the class that implements ILaunchConfigurationTab that is registered against the debugger id of the currently selected debugger. */ protected ICDebugConfiguration getConfigForCurrentDebugger() { int selectedIndex = fDCombo.getSelectionIndex(); - return (ICDebugConfiguration) fDCombo.getData(Integer.toString(selectedIndex)); + return (ICDebugConfiguration)fDCombo.getData( Integer.toString( selectedIndex ) ); } /** @@ -331,4 +287,149 @@ public class CDebuggerTab extends AbstractCDebuggerTab { super.updateLaunchConfigurationDialog(); } + protected void createDebuggerCombo( Composite parent ) { + Composite comboComp = new Composite( parent, SWT.NONE ); + GridLayout layout = new GridLayout( 2, false ); + comboComp.setLayout( layout ); + Label dlabel = new Label( comboComp, SWT.NONE ); + dlabel.setText( LaunchUIPlugin.getResourceString( "Launch.common.DebuggerColon" ) ); //$NON-NLS-1$ + fDCombo = new Combo( comboComp, SWT.DROP_DOWN | SWT.READ_ONLY ); + fDCombo.addModifyListener( new ModifyListener() { + + public void modifyText( ModifyEvent e ) { + if ( !isInitializing() ) { + setInitializeDefault( true ); + updateComboFromSelection(); + } + } + } ); + } + + protected void createAttachButton( Composite parent ) { + Composite attachComp = new Composite( parent, SWT.NONE ); + GridLayout attachLayout = new GridLayout(); + attachLayout.marginHeight = 0; + attachLayout.marginWidth = 0; + attachComp.setLayout( attachLayout ); + fAttachButton = createCheckButton( attachComp, LaunchUIPlugin.getResourceString( "CDebuggerTab.Attach_to_running_process" ) ); //$NON-NLS-1$ + fAttachButton.addSelectionListener( new SelectionAdapter() { + + public void widgetSelected( SelectionEvent e ) { + if ( !isInitializing() ) { + fStopInMain.setSelection( !fAttachButton.getSelection() ); + fStopInMain.setEnabled( !fAttachButton.getSelection() ); + updateLaunchConfigurationDialog(); + } + } + } ); + } + + protected void createOptionsComposite( Composite parent ) { + Composite optionsComp = new Composite( parent, SWT.NONE ); + GridLayout layout = new GridLayout( 2, true ); + optionsComp.setLayout( layout ); + optionsComp.setLayoutData( new GridData( GridData.FILL, GridData.CENTER, true, false, 2, 1 ) ); + + fStopInMain = createCheckButton( optionsComp, LaunchUIPlugin.getResourceString( "CDebuggerTab.Stop_at_main_on_startup" ) ); //$NON-NLS-1$ + fStopInMain.addSelectionListener( new SelectionAdapter() { + + public void widgetSelected( SelectionEvent e ) { + if ( !isInitializing() ) { + updateLaunchConfigurationDialog(); + } + } + } ); + + fAdvancedButton = createPushButton( optionsComp, LaunchUIPlugin.getResourceString( "CDebuggerTab.Advanced" ), null ); //$NON-NLS-1$ + GridData data = new GridData(); + data.horizontalAlignment = GridData.END; + PixelConverter pc = new PixelConverter( parent ); + data.widthHint = pc.convertHorizontalDLUsToPixels( IDialogConstants.BUTTON_WIDTH ); + fAdvancedButton.setLayoutData( data ); + fAdvancedButton.addSelectionListener( new SelectionAdapter() { + + public void widgetSelected( SelectionEvent e ) { + Dialog dialog = new AdvancedDebuggerOptionsDialog( getShell(), getAdvancedAttributes() ); + dialog.open(); + } + } ); + } + + protected void createDebuggerGroup( Composite parent ) { + Group debuggerGroup = new Group( parent, SWT.SHADOW_ETCHED_IN ); + debuggerGroup.setText( LaunchUIPlugin.getResourceString( "CDebuggerTab.Debugger_Options" ) ); //$NON-NLS-1$ + setDynamicTabHolder( debuggerGroup ); + GridLayout tabHolderLayout = new GridLayout(); + tabHolderLayout.marginHeight = 0; + tabHolderLayout.marginWidth = 0; + tabHolderLayout.numColumns = 1; + getDynamicTabHolder().setLayout( tabHolderLayout ); + GridData gd = new GridData( GridData.FILL_BOTH ); + gd.horizontalSpan = 2; + getDynamicTabHolder().setLayoutData( gd ); + } + + protected Map getAdvancedAttributes() { + return fAdvancedAttributes; + } + + private void initializeAdvancedAttributes( ILaunchConfiguration config ) { + Map attr = getAdvancedAttributes(); + try { + Boolean varBookkeeping = ( config.getAttribute( ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ENABLE_VARIABLE_BOOKKEEPING, false ) ) ? Boolean.TRUE : Boolean.FALSE; + attr.put( ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ENABLE_VARIABLE_BOOKKEEPING, varBookkeeping ); + } + catch( CoreException e ) { + } + } + + private void applyAdvancedAttributes( ILaunchConfigurationWorkingCopy config ) { + Map attr = getAdvancedAttributes(); + Object varBookkeeping = attr.get( ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ENABLE_VARIABLE_BOOKKEEPING ); + if ( varBookkeeping instanceof Boolean ) + config.setAttribute( ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ENABLE_VARIABLE_BOOKKEEPING, ((Boolean)varBookkeeping).booleanValue() ); + } + + protected Shell getShell() { + return super.getShell(); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.ui.ILaunchConfigurationTab#dispose() + */ + public void dispose() { + getAdvancedAttributes().clear(); + super.dispose(); + } + + protected void initializeCommonControls( ILaunchConfiguration config ) { + ICDebugConfiguration debugConfig = getConfigForCurrentDebugger(); + try { + String mode = config.getAttribute( ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, ICDTLaunchConfigurationConstants.DEBUGGER_MODE_RUN ); + fAttachButton.setEnabled( debugConfig != null && debugConfig.supportsMode( ICDTLaunchConfigurationConstants.DEBUGGER_MODE_ATTACH ) ); + if ( fAttachButton.isEnabled() ) + fAttachButton.setSelection( mode.equals( ICDTLaunchConfigurationConstants.DEBUGGER_MODE_ATTACH ) ); + fStopInMain.setEnabled( debugConfig != null && !fAttachButton.getSelection() ); + if ( fStopInMain.isEnabled() ) + fStopInMain.setSelection( ( fAttachButton.getSelection() ) ? false : config.getAttribute( ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_STOP_AT_MAIN, ICDTLaunchConfigurationConstants.DEBUGGER_STOP_AT_MAIN_DEFAULT ) ); + initializeAdvancedAttributes( config ); + } + catch( CoreException e ) { + } + } + + protected boolean isInitializing() { + return fIsInitializing; + } + + private void setInitializing( boolean isInitializing ) { + fIsInitializing = isInitializing; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.launch.internal.ui.AbstractCDebuggerTab#setInitializeDefault(boolean) + */ + protected void setInitializeDefault( boolean init ) { + super.setInitializeDefault( init ); + } } \ No newline at end of file diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CoreFileDebuggerTab.java b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CoreFileDebuggerTab.java new file mode 100644 index 00000000000..0a0028e115a --- /dev/null +++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CoreFileDebuggerTab.java @@ -0,0 +1,124 @@ +/********************************************************************** + * Copyright (c) 2004 QNX Software Systems and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * QNX Software Systems - Initial API and implementation + ***********************************************************************/ +package org.eclipse.cdt.launch.ui; + +import java.util.Map; +import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.ICDescriptor; +import org.eclipse.cdt.core.model.ICElement; +import org.eclipse.cdt.debug.core.CDebugCorePlugin; +import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants; +import org.eclipse.cdt.debug.core.ICDebugConfiguration; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; +import org.eclipse.debug.ui.ILaunchConfigurationTab; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.help.WorkbenchHelp; + +public class CoreFileDebuggerTab extends CDebuggerTab { + + /* (non-Javadoc) + * @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(org.eclipse.swt.widgets.Composite) + */ + public void createControl( Composite parent ) { + Composite comp = new Composite( parent, SWT.NONE ); + setControl( comp ); + WorkbenchHelp.setHelp( getControl(), ICDTLaunchHelpContextIds.LAUNCH_CONFIGURATION_DIALOG_DEBBUGER_TAB ); + GridLayout topLayout = new GridLayout( 2, false ); + comp.setLayout( topLayout ); + createDebuggerCombo( comp ); + createDebuggerGroup( comp ); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.ui.ILaunchConfigurationTab#setDefaults(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) + */ + public void setDefaults( ILaunchConfigurationWorkingCopy config ) { + super.setDefaults( config ); + config.setAttribute( ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, ICDTLaunchConfigurationConstants.DEBUGGER_MODE_CORE ); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.launch.ui.CDebuggerTab#initializeCommonControls(org.eclipse.debug.core.ILaunchConfiguration) + */ + protected void initializeCommonControls( ILaunchConfiguration config ) { + // no common controls for this tab + } + + /* (non-Javadoc) + * @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) + */ + public void performApply( ILaunchConfigurationWorkingCopy config ) { + if ( getDebugConfig() != null ) { + config.setAttribute( ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ID, getDebugConfig().getID() ); + ILaunchConfigurationTab dynamicTab = getDynamicTab(); + if ( dynamicTab == null ) { + config.setAttribute( ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_SPECIFIC_ATTRS_MAP, (Map)null ); + } + else { + dynamicTab.performApply( config ); + } + } + } + + protected void loadDebuggerComboBox( ILaunchConfiguration config, String selection ) { + fDCombo.removeAll(); + ICDebugConfiguration[] debugConfigs = CDebugCorePlugin.getDefault().getDebugConfigurations(); + String projectPlatform = getProjectPlatform( config ); + int x = 0; + int selndx = -1; + for( int i = 0; i < debugConfigs.length; i++ ) { + if ( debugConfigs[i].supportsMode( ICDTLaunchConfigurationConstants.DEBUGGER_MODE_CORE ) ) { + if ( validatePlatform( config, debugConfigs[i] ) ) { + fDCombo.add( debugConfigs[i].getName() ); + fDCombo.setData( Integer.toString( x ), debugConfigs[i] ); + // select first exact matching debugger for platform or requested selection + String debuggerPlatform = debugConfigs[i].getPlatform(); + if ( (selndx == -1 && debuggerPlatform.equalsIgnoreCase( projectPlatform )) || selection.equals( debugConfigs[i].getID() ) ) { + selndx = x; + } + x++; + } + } + } + // if no selection meaning nothing in config the force initdefault on tab + setInitializeDefault( selection.equals( "" ) ? true : false ); //$NON-NLS-1$ + fDCombo.select( selndx == -1 ? 0 : selndx ); + //The behaviour is undefined for if the callbacks should be triggered for this, + //so to avoid unnecessary confusion, we force an update. + handleDebuggerChanged(); + getControl().getParent().layout( true ); + } + + protected boolean validatePlatform( ILaunchConfiguration config, ICDebugConfiguration debugConfig ) { + String projectPlatform = getProjectPlatform( config ); + String debuggerPlatform = debugConfig.getPlatform(); + return ( debuggerPlatform.equals( "*" ) || debuggerPlatform.equalsIgnoreCase( projectPlatform ) ); //$NON-NLS-1$ + } + + private String getProjectPlatform( ILaunchConfiguration config ) { + ICElement ce = getContext( config, null ); + String projectPlatform = "*"; //$NON-NLS-1$ + if ( ce != null ) { + try { + ICDescriptor descriptor = CCorePlugin.getDefault().getCProjectDescription( ce.getCProject().getProject(), false ); + if ( descriptor != null ) { + projectPlatform = descriptor.getPlatform(); + } + } + catch( Exception e ) { + } + } + return projectPlatform; + } +} diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CorefileDebuggerTab.java b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CorefileDebuggerTab.java deleted file mode 100644 index 3521bae261b..00000000000 --- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CorefileDebuggerTab.java +++ /dev/null @@ -1,206 +0,0 @@ -/********************************************************************** - * Copyright (c) 2002 - 2004 QNX Software Systems and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - * - * Contributors: - * QNX Software Systems - Initial API and implementation -***********************************************************************/ -package org.eclipse.cdt.launch.ui; - -import org.eclipse.cdt.core.CCorePlugin; -import org.eclipse.cdt.core.ICDescriptor; -import org.eclipse.cdt.core.model.IBinary; -import org.eclipse.cdt.core.model.ICElement; -import org.eclipse.cdt.debug.core.CDebugCorePlugin; -import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants; -import org.eclipse.cdt.debug.core.ICDebugConfiguration; -import org.eclipse.cdt.launch.internal.ui.AbstractCDebuggerTab; -import org.eclipse.cdt.launch.internal.ui.LaunchUIPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.debug.core.ILaunchConfiguration; -import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Group; -import org.eclipse.swt.widgets.Label; -import org.eclipse.ui.help.WorkbenchHelp; - -public class CorefileDebuggerTab extends AbstractCDebuggerTab { - protected Combo fDCombo; - - private boolean initializingComboBox = false; - - public void createControl(Composite parent) { - Composite comp = new Composite(parent, SWT.NONE); - setControl(comp); - - WorkbenchHelp.setHelp(getControl(), ICDTLaunchHelpContextIds.LAUNCH_CONFIGURATION_DIALOG_DEBBUGER_TAB); - - GridLayout topLayout = new GridLayout(2, false); - comp.setLayout(topLayout); - Label dlabel = new Label(comp, SWT.NONE); - dlabel.setText(LaunchUIPlugin.getResourceString("Launch.common.DebuggerColon")); //$NON-NLS-1$ - fDCombo = new Combo(comp, SWT.DROP_DOWN | SWT.READ_ONLY); - fDCombo.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - handleDebuggerChanged(); - } - }); - Group debuggerGroup = new Group(comp, SWT.SHADOW_ETCHED_IN); - debuggerGroup.setText(LaunchUIPlugin.getResourceString("CorefileDebuggerTab.Debugger_Options")); //$NON-NLS-1$ - setDynamicTabHolder(debuggerGroup); - GridLayout tabHolderLayout = new GridLayout(); - tabHolderLayout.marginHeight = 0; - tabHolderLayout.marginWidth = 0; - tabHolderLayout.numColumns = 1; - getDynamicTabHolder().setLayout(tabHolderLayout); - GridData gd = new GridData(GridData.FILL_BOTH); - gd.horizontalSpan = 2; - getDynamicTabHolder().setLayoutData(gd); - } - - protected void loadDebuggerComboBox(ILaunchConfiguration config, String selection) { - if (initializingComboBox) { - return; - } - initializingComboBox = true; - ICDebugConfiguration[] debugConfigs; - String configPlatform = getPlatform(config); - ICElement ce = getContext(config, null); - String projectPlatform = "*"; //$NON-NLS-1$ - String projectCPU = "*"; //$NON-NLS-1$ - if (ce != null) { - try { - ICDescriptor descriptor = CCorePlugin.getDefault().getCProjectDescription(ce.getCProject().getProject(), false); - if (descriptor != null) { - projectPlatform = descriptor.getPlatform(); - } - IBinary bin = (IBinary) ce; - projectCPU = bin.getCPU(); - } catch (Exception e) { - } - } - fDCombo.removeAll(); - debugConfigs = CDebugCorePlugin.getDefault().getDebugConfigurations(); - int x = 0; - int selndx = -1; - for (int i = 0; i < debugConfigs.length; i++) { - if (debugConfigs[i].supportsMode(ICDTLaunchConfigurationConstants.DEBUGGER_MODE_CORE)) { - String debuggerPlatform = debugConfigs[i].getPlatform(); - boolean platformMatch = configPlatform.equals(projectPlatform); - if (debuggerPlatform.equalsIgnoreCase(projectPlatform) || (platformMatch && projectPlatform.equals("*"))) { //$NON-NLS-1$ - if (debugConfigs[i].supportsCPU(projectCPU)) { - fDCombo.add(debugConfigs[i].getName()); - fDCombo.setData(Integer.toString(x), debugConfigs[i]); - // select first exact matching debugger for platform or requested selection - if ((selndx == -1 && debuggerPlatform.equalsIgnoreCase(projectPlatform)) - || selection.equals(debugConfigs[i].getID())) { - selndx = x; - } - x++; - } - } - } - } - // if no selection meaning nothing in config the force initdefault on tab - setInitializeDefault(selection.equals("") ? true : false); //$NON-NLS-1$ - - fDCombo.select(selndx == -1 ? 0 : selndx); - //The behaviour is undefined for if the callbacks should be triggered for this, - //so to avoid unnecessary confusion, we force an update. - handleDebuggerChanged(); - getControl().getParent().layout(true); - initializingComboBox = false; - } - - public void activated(ILaunchConfigurationWorkingCopy workingCopy) { - super.activated(workingCopy); - try { - String id = workingCopy.getAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ID, ""); //$NON-NLS-1$ - if (getDebugConfig() == null || !getDebugConfig().getID().equals(id) || !validateDebuggerConfig(workingCopy)) { - loadDebuggerComboBox(workingCopy, id); - } - } catch (CoreException e) { - } - } - - public void initializeFrom(ILaunchConfiguration config) { - super.initializeFrom(config); - try { - String id = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ID, ""); //$NON-NLS-1$ - loadDebuggerComboBox(config, id); - } catch (CoreException e) { - return; - } - } - - public void setDefaults(ILaunchConfigurationWorkingCopy config) { - super.setDefaults(config); - config.setAttribute( - ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_START_MODE, - ICDTLaunchConfigurationConstants.DEBUGGER_MODE_CORE); - } - - public boolean isValid(ILaunchConfiguration config) { - if (!validateDebuggerConfig(config)) { - setErrorMessage(LaunchUIPlugin.getResourceString("CorefileDebuggerTab.No_debugger_available")); //$NON-NLS-1$ - return false; - } - return super.isValid(config); - } - - private boolean validateDebuggerConfig(ILaunchConfiguration config) { - String platform = getPlatform(config); - ICElement ce = getContext(config, null); - String projectPlatform = "*"; //$NON-NLS-1$ - String projectCPU = "*"; //$NON-NLS-1$ - if (ce != null) { - try { - ICDescriptor descriptor = CCorePlugin.getDefault().getCProjectDescription(ce.getCProject().getProject(), false); - if (descriptor != null) { - projectPlatform = descriptor.getPlatform(); - } - IBinary bin = (IBinary) ce; - projectCPU = bin.getCPU(); - } catch (Exception e) { - } - } - ICDebugConfiguration debugConfig = getDebugConfig(); - if (debugConfig == null) { - return false; - } - String debuggerPlatform = debugConfig.getPlatform(); - boolean platformMatch = platform.equals(projectPlatform); - if (debuggerPlatform.equalsIgnoreCase(projectPlatform) || (platformMatch && projectPlatform.equals("*"))) { //$NON-NLS-1$ - if (debugConfig.supportsCPU(projectCPU)) { - return true; - } - } - return false; - } - - /** - * Return the class that implements ILaunchConfigurationTab - * that is registered against the debugger id of the currently selected debugger. - */ - protected ICDebugConfiguration getConfigForCurrentDebugger() { - int selectedIndex = fDCombo.getSelectionIndex(); - return (ICDebugConfiguration) fDCombo.getData(Integer.toString(selectedIndex)); - } - - /** - * @see org.eclipse.cdt.launch.internal.ui.AbstractCDebuggerTab#handleDebuggerChanged() - */ - protected void handleDebuggerChanged() { - super.handleDebuggerChanged(); - } - -}