diff options
author | Alena Laskavaia | 2015-01-14 18:49:22 +0000 |
---|---|---|
committer | Elena Laskavaia | 2015-01-15 14:09:51 +0000 |
commit | 971176c83f93f39daf74620e38937cb09a2d24e1 (patch) | |
tree | d6150157f6e3dc8986ccf1e5d3733e952153adb0 /launch | |
parent | eb5d03de5c888e54e5acd4fa791ecca4f2462f5d (diff) | |
download | org.eclipse.cdt-971176c83f93f39daf74620e38937cb09a2d24e1.tar.gz org.eclipse.cdt-971176c83f93f39daf74620e38937cb09a2d24e1.tar.xz org.eclipse.cdt-971176c83f93f39daf74620e38937cb09a2d24e1.zip |
abstract main tab: replace auto-config checkbox with combo item
as discussed on cdt-dev I am trying to make ui look better
and more generic by replacing
"Select configuration using 'C/C++ Application'"
checkbox with Automatic selector.
Launch delegate or subclass on main page can control and override
behaivior of this ui control
This won't break API but it will break UI if subclasses were actually
doing something with original chechbox control
(besides not creating it).
Change-Id: I36f20bf05ff19e1fd66782e2351f18edc7d507cc
Signed-off-by: Alena Laskavaia <elaskavaia.cdt@gmail.com>
Reviewed-on: https://git.eclipse.org/r/39619
Tested-by: Hudson CI
Diffstat (limited to 'launch')
5 files changed, 154 insertions, 128 deletions
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 @@ <relativePath>../../pom.xml</relativePath> </parent> - <version>7.1.0-SNAPSHOT</version> + <version>7.2.0-SNAPSHOT</version> <artifactId>org.eclipse.cdt.launch</artifactId> <packaging>eclipse-plugin</packaging> </project> 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<ICProject> list = new ArrayList<ICProject>(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 - public void widgetDefaultSelected(SelectionEvent e) { - updateLaunchConfigurationDialog(); - } - }); - - new Label(comboComp, SWT.NONE).setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + updateLaunchConfigurationDialog(); + } - 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 + @Override public void widgetDefaultSelected(SelectionEvent e) { - fBuildConfigAutoChanged = true; - fBuildConfigCombo.setEnabled(true); - updateBuildConfigCombo(EMPTY_STRING); - updateLaunchConfigurationDialog(); - } + updateLaunchConfigurationDialog(); + } }); + fBuildConfigAuto = new Button(comboComp, SWT.CHECK); + 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()))); - } - - if (fBuildConfigAutoChanged && fBuildConfigAuto != null) { - config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_BUILD_CONFIG_AUTO, fBuildConfigAuto.getSelection()); + 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 (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 |