diff --git a/launch/org.eclipse.cdt.launch/META-INF/MANIFEST.MF b/launch/org.eclipse.cdt.launch/META-INF/MANIFEST.MF index b481d6d220c..66f737441be 100644 --- a/launch/org.eclipse.cdt.launch/META-INF/MANIFEST.MF +++ b/launch/org.eclipse.cdt.launch/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.cdt.launch; singleton:=true -Bundle-Version: 7.1.0.qualifier +Bundle-Version: 7.2.0.qualifier Bundle-Activator: org.eclipse.cdt.launch.internal.ui.LaunchUIPlugin Bundle-Vendor: %providerName Bundle-Localization: plugin diff --git a/launch/org.eclipse.cdt.launch/pom.xml b/launch/org.eclipse.cdt.launch/pom.xml index 2179cc5cdb7..5837dc3f671 100644 --- a/launch/org.eclipse.cdt.launch/pom.xml +++ b/launch/org.eclipse.cdt.launch/pom.xml @@ -11,7 +11,7 @@ ../../pom.xml - 7.1.0-SNAPSHOT + 7.2.0-SNAPSHOT org.eclipse.cdt.launch eclipse-plugin diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchMessages.java b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchMessages.java index 1652d80a8a7..92aec31276d 100644 --- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchMessages.java +++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchMessages.java @@ -83,7 +83,10 @@ public class LaunchMessages extends NLS { public static String CMainTab_Program_invalid_proj_path; public static String CMainTab_Build_Config; public static String CMainTab_Use_Active; + public static String CMainTab_Use_Automatic; + public static String CMainTab_Build_Config_Active_tooltip; public static String CMainTab_Build_Config_Auto; + public static String CMainTab_Build_Config_Auto_tooltip; public static String CMainTab_Configuration_name; public static String CMainTab_Build_options; public static String CMainTab_Disable_build_button_label; diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchMessages.properties b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchMessages.properties index a6efff76eea..b70eeb5f237 100644 --- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchMessages.properties +++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/internal/ui/LaunchMessages.properties @@ -89,7 +89,10 @@ CMainTab_UseTerminal=Connect process input && output to a terminal. CMainTab_Program_invalid_proj_path=Program specification is not a valid project-relative path. CMainTab_Build_Config=Build configuration: CMainTab_Use_Active=Use Active +CMainTab_Use_Automatic=Select Automatically +CMainTab_Build_Config_Active_tooltip=Use active build configuration CMainTab_Build_Config_Auto=Select configuration using 'C/C++ Application' +CMainTab_Build_Config_Auto_tooltip=Select build configuration based on the location of the application #For CMainTab_Configuration_name: {0} - project name; {1} - configuration name CMainTab_Configuration_name={0} {1} CMainTab_Build_options=Build (if required) before launching diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CAbstractMainTab.java b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CAbstractMainTab.java index 79dc66f0750..05199f83945 100644 --- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CAbstractMainTab.java +++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CAbstractMainTab.java @@ -67,17 +67,25 @@ public abstract class CAbstractMainTab extends CLaunchConfigurationTab { private static final String LAUNCHING_PREFERENCE_PAGE_ID = "org.eclipse.debug.ui.LaunchingPreferencePage"; //$NON-NLS-1$ protected static final String EMPTY_STRING = ""; //$NON-NLS-1$ protected String filterPlatform = EMPTY_STRING; - + /** + * @since 7.2 + */ + protected static final String AUTO_CONFIG = "AUTO"; //$NON-NLS-1$ /** * @since 6.0 */ protected Combo fBuildConfigCombo; - /** @since 7.0*/ + /** + * @since 7.0 + * @deprecated This control won't be used anymore, combo will have addition item: Select Automatically + * */ protected Button fBuildConfigAuto; /** - * Indicates whether the user has clicked on the build config auto button - * Prevents causing a delta to the underlying launch configuration if the user hasn't touched this setting. + * Indicates whether the user has clicked on the build config auto button Prevents causing a delta to the underlying launch + * configuration if the user hasn't touched this setting. + * * @since 7.0 + * @deprecated */ protected boolean fBuildConfigAutoChanged; /** @since 6.1 */ @@ -92,11 +100,9 @@ public abstract class CAbstractMainTab extends CLaunchConfigurationTab { protected Label fProjLabel; protected Text fProjText; protected Button fProjButton; - protected Label fProgLabel; protected Text fProgText; protected Button fSearchButton; - // Core file UI widgets /** @since 2.0 */ protected Label fCoreLabel; @@ -104,20 +110,18 @@ public abstract class CAbstractMainTab extends CLaunchConfigurationTab { protected Text fCoreText; /** @since 2.0 */ protected Button fCoreButton; - /** - * Name of most recently checked program; avoid constantly checking binary. - * See bug 277663. + * Name of most recently checked program; avoid constantly checking binary. See bug 277663. */ protected String fPreviouslyCheckedProgram; /** - * Validity result of most recently checked program; avoid constantly - * checking binary. See bug 277663. N/A if fPreviouslyCheckedProgram = null; + * Validity result of most recently checked program; avoid constantly checking binary. See bug 277663. N/A if + * fPreviouslyCheckedProgram = null; */ protected boolean fPreviouslyCheckedProgramIsValid; /** - * Validity error message of most recently checked program; avoid constantly - * checking binary. See bug 277663. N/A if fPreviouslyCheckedProgram = null. + * Validity error message of most recently checked program; avoid constantly checking binary. See bug 277663. N/A if + * fPreviouslyCheckedProgram = null. */ protected String fPreviouslyCheckedProgramErrorMsg; @@ -140,13 +144,11 @@ public abstract class CAbstractMainTab extends CLaunchConfigurationTab { GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = colSpan; projComp.setLayoutData(gd); - fProjLabel = new Label(projComp, SWT.NONE); fProjLabel.setText(LaunchMessages.CMainTab_ProjectColon); gd = new GridData(); gd.horizontalSpan = 2; fProjLabel.setLayoutData(gd); - fProjText = new Text(projComp, SWT.SINGLE | SWT.BORDER); gd = new GridData(GridData.FILL_HORIZONTAL); fProjText.setLayoutData(gd); @@ -159,8 +161,7 @@ public abstract class CAbstractMainTab extends CLaunchConfigurationTab { updateLaunchConfigurationDialog(); } }); - - fProjButton = createPushButton(projComp, LaunchMessages.Launch_common_Browse_1, null); + fProjButton = createPushButton(projComp, LaunchMessages.Launch_common_Browse_1, null); fProjButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent evt) { @@ -171,8 +172,8 @@ public abstract class CAbstractMainTab extends CLaunchConfigurationTab { } /** - * Return the ICProject corresponding to the project name in the project name text field, or - * null if the text does not match a project name. + * Return the ICProject corresponding to the project name in the project name text field, or null if the text does not match a + * project name. */ protected ICProject getCProject() { String projectName = fProjText.getText().trim(); @@ -183,9 +184,8 @@ public abstract class CAbstractMainTab extends CLaunchConfigurationTab { } /** - * Show a dialog that lets the user select a project. This in turn provides context for the main - * type, allowing the user to key a main type name, or constraining the search for main types to - * the specified project. + * Show a dialog that lets the user select a project. This in turn provides context for the main type, allowing the user to key + * a main type name, or constraining the search for main types to the specified project. */ protected void handleProjectButtonSelected() { String currentProjectName = fProjText.getText(); @@ -193,13 +193,12 @@ public abstract class CAbstractMainTab extends CLaunchConfigurationTab { if (project == null) { return; } - String projectName = project.getElementName(); fProjText.setText(projectName); if (currentProjectName.length() == 0) { // New project selected for the first time, set the program name default too. IBinary[] bins = getBinaryFiles(project); - if (bins != null && bins.length == 1) { + if (bins != null && bins.length == 1) { fProgText.setText(bins[0].getResource().getProjectRelativePath().toOSString()); } } @@ -211,7 +210,6 @@ public abstract class CAbstractMainTab extends CLaunchConfigurationTab { protected ICProject[] getCProjects() throws CModelException { ICProject cproject[] = CoreModel.getDefault().getCModel().getCProjects(); ArrayList list = new ArrayList(cproject.length); - for (int i = 0; i < cproject.length; i++) { ICDescriptor cdesciptor = null; try { @@ -234,25 +232,22 @@ public abstract class CAbstractMainTab extends CLaunchConfigurationTab { } /** - * Realize a C Project selection dialog and return the first selected project, or null if there - * was none. + * Realize a C Project selection dialog and return the first selected project, or null if there was none. */ protected ICProject chooseCProject() { try { ICProject[] projects = getCProjects(); - ILabelProvider labelProvider = new CElementLabelProvider(); ElementListSelectionDialog dialog = new ElementListSelectionDialog(getShell(), labelProvider); - dialog.setTitle(LaunchMessages.CMainTab_Project_Selection); - dialog.setMessage(LaunchMessages.CMainTab_Choose_project_to_constrain_search_for_program); + dialog.setTitle(LaunchMessages.CMainTab_Project_Selection); + dialog.setMessage(LaunchMessages.CMainTab_Choose_project_to_constrain_search_for_program); dialog.setElements(projects); - ICProject cProject = getCProject(); if (cProject != null) { dialog.setInitialSelections(new Object[] { cProject }); } if (dialog.open() == Window.OK) { - return (ICProject)dialog.getFirstResult(); + return (ICProject) dialog.getFirstResult(); } } catch (CModelException e) { LaunchUIPlugin.errorDialog("Launch UI internal error", e); //$NON-NLS-1$ @@ -265,39 +260,40 @@ public abstract class CAbstractMainTab extends CLaunchConfigurationTab { */ protected void updateBuildConfigCombo(String selectedConfigID) { if (fBuildConfigCombo != null) { - fBuildConfigCombo.setEnabled(!fBuildConfigAuto.getSelection()); fBuildConfigCombo.removeAll(); - fBuildConfigCombo.add(LaunchMessages.CMainTab_Use_Active); - fBuildConfigCombo.setData("0", EMPTY_STRING); //$NON-NLS-1$ - fBuildConfigCombo.select(0); + int offset = 0; + fBuildConfigCombo.add(LaunchMessages.CMainTab_Use_Active); + fBuildConfigCombo.setData(String.valueOf(offset), EMPTY_STRING); + fBuildConfigCombo.select(offset); + offset++; + if (isAutoConfigSupported()) { + fBuildConfigCombo.add(LaunchMessages.CMainTab_Use_Automatic); + fBuildConfigCombo.setData(String.valueOf(offset), AUTO_CONFIG); + if (selectedConfigID.equals(AUTO_CONFIG)) { + fBuildConfigCombo.select(offset); + } + } + offset++; ICProject cproject = getCProject(); if (cproject != null) { ICProjectDescription projDes = CDTPropertyManager.getProjectDescription(cproject.getProject()); if (projDes != null) { - // Find the config that should be automatically selected - String autoConfigId = null; - if (fBuildConfigAuto.getSelection()) { - ICConfigurationDescription autoConfig = LaunchUtils.getBuildConfigByProgramPath(cproject.getProject(), fProgText.getText()); - if (autoConfig != null) - autoConfigId = autoConfig.getId(); - } - - int selIndex = 0; + // Populate and select config ICConfigurationDescription[] configurations = projDes.getConfigurations(); - ICConfigurationDescription selectedConfig = projDes.getConfigurationById(selectedConfigID); + for (int i = 0; i < configurations.length; i++) { String configName = configurations[i].getName(); + String id = configurations[i].getId(); fBuildConfigCombo.add(configName); - fBuildConfigCombo.setData(Integer.toString(i + 1), configurations[i].getId()); - if (selectedConfig != null && selectedConfigID.equals(configurations[i].getId()) || - fBuildConfigAuto.getSelection() && configurations[i].getId().equals(autoConfigId)) { - selIndex = i + 1; + int comboIndex = i + offset; + fBuildConfigCombo.setData(String.valueOf(comboIndex), id); + if (id.equals(selectedConfigID)) { + fBuildConfigCombo.select(comboIndex); } } - fBuildConfigCombo.select(selIndex); } } - } + } } /** @@ -311,42 +307,27 @@ public abstract class CAbstractMainTab extends CLaunchConfigurationTab { gd.horizontalSpan = colspan; comboComp.setLayoutData(gd); Label dlabel = new Label(comboComp, SWT.NONE); - dlabel.setText(LaunchMessages.CMainTab_Build_Config); + dlabel.setText(LaunchMessages.CMainTab_Build_Config); fBuildConfigCombo = new Combo(comboComp, SWT.READ_ONLY | SWT.DROP_DOWN); fBuildConfigCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); fBuildConfigCombo.addSelectionListener(new SelectionListener() { - @Override + @Override public void widgetSelected(SelectionEvent e) { - updateLaunchConfigurationDialog(); - } - - @Override + updateLaunchConfigurationDialog(); + } + + @Override public void widgetDefaultSelected(SelectionEvent e) { - updateLaunchConfigurationDialog(); - } + updateLaunchConfigurationDialog(); + } }); - - new Label(comboComp, SWT.NONE).setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - fBuildConfigAuto = new Button(comboComp, SWT.CHECK); - fBuildConfigAuto.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - fBuildConfigAuto.setText(LaunchMessages.CMainTab_Build_Config_Auto); - fBuildConfigAuto.addSelectionListener(new SelectionListener() { - @Override - public void widgetSelected(SelectionEvent e) { - fBuildConfigAutoChanged = true; - fBuildConfigCombo.setEnabled(false); - updateBuildConfigCombo(EMPTY_STRING); - updateLaunchConfigurationDialog(); - } - @Override - public void widgetDefaultSelected(SelectionEvent e) { - fBuildConfigAutoChanged = true; - fBuildConfigCombo.setEnabled(true); - updateBuildConfigCombo(EMPTY_STRING); - updateLaunchConfigurationDialog(); - } - }); + GridData gd1 = new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.GRAB_HORIZONTAL); + gd1.heightHint = 0; + gd1.horizontalSpan = 2; + fBuildConfigAuto.setLayoutData(gd1); + fBuildConfigAuto.setVisible(false); + fBuildConfigAuto.setText(LaunchMessages.CMainTab_Build_Config_Auto); } /** @since 6.1 */ @@ -358,55 +339,47 @@ public abstract class CAbstractMainTab extends CLaunchConfigurationTab { gridLayout.numColumns = 2; gridLayout.marginHeight = 5; gridLayout.marginWidth = 5; - gridLayout.makeColumnsEqualWidth= true; + gridLayout.makeColumnsEqualWidth = true; buildGroup.setLayoutData(gridData); buildGroup.setLayout(gridLayout); - buildGroup.setText(LaunchMessages.CMainTab_Build_options); - + buildGroup.setText(LaunchMessages.CMainTab_Build_options); createBuildConfigCombo(buildGroup, 2); - fEnableBuildButton = new Button(buildGroup, SWT.RADIO); - fEnableBuildButton.setText(LaunchMessages.CMainTab_Enable_build_button_label); - fEnableBuildButton.setToolTipText(LaunchMessages.CMainTab_Enable_build_button_tooltip); + fEnableBuildButton.setText(LaunchMessages.CMainTab_Enable_build_button_label); + fEnableBuildButton.setToolTipText(LaunchMessages.CMainTab_Enable_build_button_tooltip); fEnableBuildButton.addSelectionListener(new SelectionAdapter() { - @Override public void widgetSelected(SelectionEvent evt) { updateLaunchConfigurationDialog(); } }); - fDisableBuildButton = new Button(buildGroup, SWT.RADIO); - fDisableBuildButton.setText(LaunchMessages.CMainTab_Disable_build_button_label); - fDisableBuildButton.setToolTipText(LaunchMessages.CMainTab_Disable_build_button_tooltip); + fDisableBuildButton.setText(LaunchMessages.CMainTab_Disable_build_button_label); + fDisableBuildButton.setToolTipText(LaunchMessages.CMainTab_Disable_build_button_tooltip); fDisableBuildButton.addSelectionListener(new SelectionAdapter() { - @Override public void widgetSelected(SelectionEvent evt) { updateLaunchConfigurationDialog(); } }); - fWorkspaceSettingsButton = new Button(buildGroup, SWT.RADIO); - fWorkspaceSettingsButton.setText(LaunchMessages.CMainTab_Workspace_settings_button_label); - fWorkspaceSettingsButton.setToolTipText(LaunchMessages.CMainTab_Workspace_settings_button_tooltip); + fWorkspaceSettingsButton.setText(LaunchMessages.CMainTab_Workspace_settings_button_label); + fWorkspaceSettingsButton.setToolTipText(LaunchMessages.CMainTab_Workspace_settings_button_tooltip); fWorkspaceSettingsButton.addSelectionListener(new SelectionAdapter() { - @Override public void widgetSelected(SelectionEvent evt) { updateLaunchConfigurationDialog(); } }); - fWorkpsaceSettingsLink = new Link(buildGroup, SWT.NONE); - fWorkpsaceSettingsLink.setText(LaunchMessages.CMainTab_Workspace_settings_link_label); + fWorkpsaceSettingsLink.setText(LaunchMessages.CMainTab_Workspace_settings_link_label); fWorkpsaceSettingsLink.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { PreferencesUtil.createPreferenceDialogOn( - parent.getShell(), + parent.getShell(), LAUNCHING_PREFERENCE_PAGE_ID, - null, + null, null).open(); } }); @@ -417,23 +390,23 @@ public abstract class CAbstractMainTab extends CLaunchConfigurationTab { boolean configAuto = false; int buildBeforeLaunchValue = ICDTLaunchConfigurationConstants.BUILD_BEFORE_LAUNCH_USE_WORKSPACE_SETTING; try { - buildBeforeLaunchValue = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_BUILD_BEFORE_LAUNCH, buildBeforeLaunchValue); + buildBeforeLaunchValue = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_BUILD_BEFORE_LAUNCH, + buildBeforeLaunchValue); configAuto = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_BUILD_CONFIG_AUTO, false); } catch (CoreException e) { LaunchUIPlugin.log(e); } - - if (fBuildConfigAuto != null) { - fBuildConfigAuto.setSelection(configAuto); - if (configAuto) - updateBuildConfigCombo(EMPTY_STRING); - } + if (configAuto) + updateBuildConfigCombo(AUTO_CONFIG); + updateComboTooltip(); if (fDisableBuildButton != null) - fDisableBuildButton.setSelection(buildBeforeLaunchValue == ICDTLaunchConfigurationConstants.BUILD_BEFORE_LAUNCH_DISABLED); + fDisableBuildButton + .setSelection(buildBeforeLaunchValue == ICDTLaunchConfigurationConstants.BUILD_BEFORE_LAUNCH_DISABLED); if (fEnableBuildButton != null) fEnableBuildButton.setSelection(buildBeforeLaunchValue == ICDTLaunchConfigurationConstants.BUILD_BEFORE_LAUNCH_ENABLED); if (fWorkspaceSettingsButton != null) - fWorkspaceSettingsButton.setSelection(buildBeforeLaunchValue == ICDTLaunchConfigurationConstants.BUILD_BEFORE_LAUNCH_USE_WORKSPACE_SETTING); + fWorkspaceSettingsButton + .setSelection(buildBeforeLaunchValue == ICDTLaunchConfigurationConstants.BUILD_BEFORE_LAUNCH_USE_WORKSPACE_SETTING); } /** @@ -459,7 +432,7 @@ public abstract class CAbstractMainTab extends CLaunchConfigurationTab { gd.horizontalSpan = colSpan; coreComp.setLayoutData(gd); fCoreLabel = new Label(coreComp, SWT.NONE); - fCoreLabel.setText(LaunchMessages.CMainTab_CoreFile_path); + fCoreLabel.setText(LaunchMessages.CMainTab_CoreFile_path); gd = new GridData(); gd.horizontalSpan = 3; fCoreLabel.setLayoutData(gd); @@ -472,7 +445,6 @@ public abstract class CAbstractMainTab extends CLaunchConfigurationTab { updateLaunchConfigurationDialog(); } }); - Button browseForCoreButton; browseForCoreButton = createPushButton(coreComp, LaunchMessages.Launch_common_Browse_3, null); browseForCoreButton.addSelectionListener(new SelectionAdapter() { @@ -488,8 +460,9 @@ public abstract class CAbstractMainTab extends CLaunchConfigurationTab { } /** - * This method is deprecated since LaunchUtils#getBinary(IProject, IPath) is too slow to be - * called on the UI thread. See "https://bugs.eclipse.org/bugs/show_bug.cgi?id=328012". + * This method is deprecated since LaunchUtils#getBinary(IProject, IPath) is too slow to be called on the UI thread. See + * "https://bugs.eclipse.org/bugs/show_bug.cgi?id=328012". + * * @param project * @param exePath * @return @@ -502,14 +475,14 @@ public abstract class CAbstractMainTab extends CLaunchConfigurationTab { if (binValue == null) { IBinaryObject exe = LaunchUtils.getBinary(project, exePath); binValue = exe != null; - fBinaryExeCache.put(exePath, binValue); + fBinaryExeCache.put(exePath, binValue); } return binValue; } catch (ClassCastException e) { } return false; } - + /** * Iterate through and suck up all of the executable files that we can find. */ @@ -534,7 +507,6 @@ public abstract class CAbstractMainTab extends CLaunchConfigurationTab { } } }); - return ret[0]; } @@ -546,13 +518,15 @@ public abstract class CAbstractMainTab extends CLaunchConfigurationTab { @Override public void performApply(ILaunchConfigurationWorkingCopy config) { if (fBuildConfigCombo != null) { - config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_BUILD_CONFIG_ID, (String)fBuildConfigCombo.getData(Integer.toString(fBuildConfigCombo.getSelectionIndex()))); + String configId = (String) fBuildConfigCombo.getData(Integer.toString(fBuildConfigCombo.getSelectionIndex())); + boolean auto = false; + if (configId.equals(AUTO_CONFIG)) { + auto = true; + configId = getAutoConfigId(); + } + config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_BUILD_CONFIG_ID, configId); + config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_BUILD_CONFIG_AUTO, auto); } - - if (fBuildConfigAutoChanged && fBuildConfigAuto != null) { - config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_BUILD_CONFIG_AUTO, fBuildConfigAuto.getSelection()); - } - if (fDisableBuildButton != null) { int buildBeforeLaunchValue = ICDTLaunchConfigurationConstants.BUILD_BEFORE_LAUNCH_USE_WORKSPACE_SETTING; if (fDisableBuildButton.getSelection()) { @@ -564,18 +538,49 @@ public abstract class CAbstractMainTab extends CLaunchConfigurationTab { } } + /** + * Calculate build config id based on selection of the binary. Subclasses may override. + * + * @return + * @since 7.2 + */ + protected String getAutoConfigId() { + String data = null; + ICProject cproject = getCProject(); + if (cproject != null) { + ICConfigurationDescription autoConfig = LaunchUtils.getBuildConfigByProgramPath(cproject.getProject(), + fProgText.getText()); + if (autoConfig != null) + data = autoConfig.getId(); + } + if (data == null) + data = EMPTY_STRING; + return data; + } + + /** + * Either page wants Automatic selection in combo or not. Subclass should override + * + * @return true if panel support AUTO_CONFIG + * @since 7.2 + */ + protected boolean isAutoConfigSupported() { + // original behavior was if this button is null it won't be shown and "supported" + return fBuildConfigAuto != null; + } + protected void updateProjectFromConfig(ILaunchConfiguration config) { String projectName = EMPTY_STRING; String configName = EMPTY_STRING; try { projectName = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME, EMPTY_STRING); - configName = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_BUILD_CONFIG_ID, EMPTY_STRING); + configName = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_BUILD_CONFIG_ID, EMPTY_STRING); } catch (CoreException ce) { LaunchUIPlugin.log(ce); } if (!fProjText.getText().equals(projectName)) fProjText.setText(projectName); - updateBuildConfigCombo(configName); + updateBuildConfigCombo(configName); } protected void updateProgramFromConfig(ILaunchConfiguration config) { @@ -597,8 +602,23 @@ public abstract class CAbstractMainTab extends CLaunchConfigurationTab { */ @Override protected void updateLaunchConfigurationDialog() { - if (fBuildConfigAuto != null && fBuildConfigAuto.getSelection()) - updateBuildConfigCombo(EMPTY_STRING); + updateComboTooltip(); super.updateLaunchConfigurationDialog(); } + + /** + * @since 7.2 + */ + protected void updateComboTooltip() { + if (fBuildConfigCombo != null) { + String configId = (String) fBuildConfigCombo.getData(Integer.toString(fBuildConfigCombo.getSelectionIndex())); + String tooltip = EMPTY_STRING; + if (configId.equals(AUTO_CONFIG)) { + tooltip = LaunchMessages.CMainTab_Build_Config_Auto_tooltip; + } else if (configId.equals(EMPTY_STRING)) { + tooltip = LaunchMessages.CMainTab_Build_Config_Active_tooltip; + } + fBuildConfigCombo.setToolTipText(tooltip); + } + } } \ No newline at end of file