diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/CMainTab.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/CMainTab.java
index 50a8880ef30..3bb979175c9 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/CMainTab.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/launching/CMainTab.java
@@ -11,16 +11,7 @@
*******************************************************************************/
package org.eclipse.cdt.dsf.gdb.internal.ui.launching;
-import java.io.IOException;
-import java.util.ArrayList;
-
import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.core.IBinaryParser;
-import org.eclipse.cdt.core.ICDescriptor;
-import org.eclipse.cdt.core.ICExtensionReference;
-import org.eclipse.cdt.core.IBinaryParser.IBinaryObject;
-import org.eclipse.cdt.core.model.CModelException;
-import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.IBinary;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ICProject;
@@ -28,6 +19,7 @@ import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
import org.eclipse.cdt.dsf.gdb.internal.ui.GdbUIPlugin;
import org.eclipse.cdt.dsf.gdb.launching.LaunchMessages;
+import org.eclipse.cdt.launch.ui.CAbstractMainTab;
import org.eclipse.cdt.ui.CElementLabelProvider;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
@@ -43,7 +35,6 @@ import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.BusyIndicator;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
@@ -53,11 +44,8 @@ import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.dialogs.ElementListSelectionDialog;
import org.eclipse.ui.dialogs.TwoPaneElementSelector;
/**
@@ -68,7 +56,7 @@ import org.eclipse.ui.dialogs.TwoPaneElementSelector;
*
*/
-public class CMainTab extends CLaunchConfigurationTab {
+public class CMainTab extends CAbstractMainTab {
/**
* Tab identifier used for ordering of tabs added using the
@@ -79,41 +67,22 @@ public class CMainTab extends CLaunchConfigurationTab {
*/
public static final String TAB_ID = "org.eclipse.cdt.dsf.gdb.launch.mainTab"; //$NON-NLS-1$
- // Project UI widgets
- protected Label fProjLabel;
- protected Text fProjText;
- protected Button fProjButton;
-
- // Main class UI widgets
- protected Label fProgLabel;
- protected Text fProgText;
- protected Button fSearchButton;
-
- // Core file UI widgets
- /** @since 2.0 */
- protected Label fCoreLabel;
- /** @since 2.0 */
- protected Text fCoreText;
- /** @since 2.0 */
- protected Button fCoreButton;
-
private final boolean fDontCheckProgram;
private final boolean fSpecifyCoreFile;
-
- protected static final String EMPTY_STRING = ""; //$NON-NLS-1$
-
- private String filterPlatform = EMPTY_STRING;
+ private final boolean fIncludeBuildSettings;
public static final int DONT_CHECK_PROGRAM = 2;
public static final int SPECIFY_CORE_FILE = 4;
+ public static final int INCLUDE_BUILD_SETTINGS = 8;
public CMainTab() {
- this(0);
+ this(INCLUDE_BUILD_SETTINGS);
}
public CMainTab(int flags) {
fDontCheckProgram = (flags & DONT_CHECK_PROGRAM) != 0;
fSpecifyCoreFile = (flags & SPECIFY_CORE_FILE) != 0;
+ fIncludeBuildSettings = (flags & INCLUDE_BUILD_SETTINGS) != 0;
}
/*
@@ -137,48 +106,13 @@ public class CMainTab extends CLaunchConfigurationTab {
if (fSpecifyCoreFile) {
createCoreFileGroup(comp, 1);
}
+ if (fIncludeBuildSettings){
+ createBuildOptionGroup(comp, 1);
+ }
GdbUIPlugin.setDialogShell(parent.getShell());
}
- protected void createProjectGroup(Composite parent, int colSpan) {
- Composite projComp = new Composite(parent, SWT.NONE);
- GridLayout projLayout = new GridLayout();
- projLayout.numColumns = 2;
- projLayout.marginHeight = 0;
- projLayout.marginWidth = 0;
- projComp.setLayout(projLayout);
- GridData gd = new GridData(GridData.FILL_HORIZONTAL);
- gd.horizontalSpan = colSpan;
- projComp.setLayoutData(gd);
-
- fProjLabel = new Label(projComp, SWT.NONE);
- fProjLabel.setText(LaunchMessages.getString("CMainTab.&ProjectColon")); //$NON-NLS-1$
- 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);
- fProjText.addModifyListener(new ModifyListener() {
-
- public void modifyText(ModifyEvent evt) {
- updateLaunchConfigurationDialog();
- }
- });
-
- fProjButton = createPushButton(projComp, LaunchMessages.getString("Launch.common.Browse_1"), null); //$NON-NLS-1$
- fProjButton.addSelectionListener(new SelectionAdapter() {
-
- @Override
- public void widgetSelected(SelectionEvent evt) {
- handleProjectButtonSelected();
- updateLaunchConfigurationDialog();
- }
- });
- }
-
protected void createExeFileGroup(Composite parent, int colSpan) {
Composite mainComp = new Composite(parent, SWT.NONE);
GridLayout mainLayout = new GridLayout();
@@ -225,45 +159,6 @@ public class CMainTab extends CLaunchConfigurationTab {
}
});
}
-
- /** @since 2.0 */
- protected void createCoreFileGroup(Composite parent, int colSpan) {
- Composite coreComp = new Composite(parent, SWT.NONE);
- GridLayout coreLayout = new GridLayout();
- coreLayout.numColumns = 3;
- coreLayout.marginHeight = 0;
- coreLayout.marginWidth = 0;
- coreComp.setLayout(coreLayout);
- GridData gd = new GridData(GridData.FILL_HORIZONTAL);
- gd.horizontalSpan = colSpan;
- coreComp.setLayoutData(gd);
- fCoreLabel = new Label(coreComp, SWT.NONE);
- fCoreLabel.setText(LaunchMessages.getString("CMainTab.CoreFile_path")); //$NON-NLS-1$
- gd = new GridData();
- gd.horizontalSpan = 3;
- fCoreLabel.setLayoutData(gd);
- fCoreText = new Text(coreComp, SWT.SINGLE | SWT.BORDER);
- gd = new GridData(GridData.FILL_HORIZONTAL);
- fCoreText.setLayoutData(gd);
- fCoreText.addModifyListener(new ModifyListener() {
- public void modifyText(ModifyEvent evt) {
- updateLaunchConfigurationDialog();
- }
- });
-
- Button browseForCoreButton;
- browseForCoreButton = createPushButton(coreComp, LaunchMessages.getString("Launch.common.Browse_2"), null); //$NON-NLS-1$
- browseForCoreButton.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent evt) {
- String text = handleBrowseButtonSelected();
- if (text != null) {
- fCoreText.setText(text);
- }
- updateLaunchConfigurationDialog();
- }
- });
- }
/*
* (non-Javadoc)
@@ -275,26 +170,7 @@ public class CMainTab extends CLaunchConfigurationTab {
updateProjectFromConfig(config);
updateProgramFromConfig(config);
updateCoreFromConfig(config);
- }
-
- protected void updateProjectFromConfig(ILaunchConfiguration config) {
- String projectName = EMPTY_STRING;
- try {
- projectName = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME, EMPTY_STRING);
- } catch (CoreException ce) {
- GdbUIPlugin.log(ce);
- }
- fProjText.setText(projectName);
- }
-
- protected void updateProgramFromConfig(ILaunchConfiguration config) {
- String programName = EMPTY_STRING;
- try {
- programName = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROGRAM_NAME, EMPTY_STRING);
- } catch (CoreException ce) {
- GdbUIPlugin.log(ce);
- }
- fProgText.setText(programName);
+ updateBuildOptionFromConfig(config);
}
/** @since 2.0 */
@@ -315,22 +191,13 @@ public class CMainTab extends CLaunchConfigurationTab {
*
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy)
*/
+ @Override
public void performApply(ILaunchConfigurationWorkingCopy config) {
+ super.performApply(config);
ICProject cProject = this.getCProject();
if (cProject != null && cProject.exists())
{
config.setMappedResources(new IResource[] { cProject.getProject() });
- try { // Only initialize the build config ID once.
- if (config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_BUILD_CONFIG_ID, "").length() == 0)//$NON-NLS-1$
- {
- ICProjectDescription projDes = CCorePlugin.getDefault().getProjectDescription(cProject.getProject());
- if (projDes != null)
- {
- String buildConfigID = projDes.getActiveConfiguration().getId();
- config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_BUILD_CONFIG_ID, buildConfigID);
- }
- }
- } catch (CoreException e) { e.printStackTrace(); }
} else {
config.setMappedResources(null);
}
@@ -345,6 +212,7 @@ public class CMainTab extends CLaunchConfigurationTab {
/**
* Show a dialog that lists all main types
*/
+ @Override
protected void handleSearchButtonSelected() {
if (getCProject() == null) {
@@ -415,135 +283,6 @@ public class CMainTab extends CLaunchConfigurationTab {
}
- /**
- * Show a dialog that lets the user select a file.
- */
- protected String handleBrowseButtonSelected() {
- FileDialog fileDialog = new FileDialog(getShell(), SWT.NONE);
- fileDialog.setFileName(fProgText.getText());
- return fileDialog.open();
- }
-
- /**
- * Iterate through and suck up all of the executable files that we can find.
- */
- protected IBinary[] getBinaryFiles(final ICProject cproject) {
- final Display display;
- if (cproject == null || !cproject.exists()) {
- return null;
- }
- if (getShell() == null) {
- display = GdbUIPlugin.getShell().getDisplay();
- } else {
- display = getShell().getDisplay();
- }
- final Object[] ret = new Object[1];
- BusyIndicator.showWhile(display, new Runnable() {
-
- public void run() {
- try {
- ret[0] = cproject.getBinaryContainer().getBinaries();
- } catch (CModelException e) {
- GdbUIPlugin.errorDialog("Launch UI internal error", e); //$NON-NLS-1$
- }
- }
- });
-
- return (IBinary[])ret[0];
- }
-
- /**
- * 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();
- ICProject project = chooseCProject();
- 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) {
- fProgText.setText(bins[0].getResource().getProjectRelativePath().toOSString());
- }
-
- }
- }
-
- /**
- * 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.getString("CMainTab.Project_Selection")); //$NON-NLS-1$
- dialog.setMessage(LaunchMessages.getString("CMainTab.Choose_project_to_constrain_search_for_program")); //$NON-NLS-1$
- dialog.setElements(projects);
-
- ICProject cProject = getCProject();
- if (cProject != null) {
- dialog.setInitialSelections(new Object[]{cProject});
- }
- if (dialog.open() == Window.OK) {
- return (ICProject)dialog.getFirstResult();
- }
- } catch (CModelException e) {
- GdbUIPlugin.errorDialog("Launch UI internal error", e); //$NON-NLS-1$
- }
- return null;
- }
-
- /**
- * Return an array a ICProject whose platform match that of the runtime env.
- */
- 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 {
- cdesciptor = CCorePlugin.getDefault().getCProjectDescription((IProject)cproject[i].getResource(), false);
- if (cdesciptor != null) {
- String projectPlatform = cdesciptor.getPlatform();
- if (filterPlatform.equals("*") //$NON-NLS-1$
- || projectPlatform.equals("*") //$NON-NLS-1$
- || filterPlatform.equalsIgnoreCase(projectPlatform) == true) {
- list.add(cproject[i]);
- }
- } else {
- list.add(cproject[i]);
- }
- } catch (CoreException e) {
- list.add(cproject[i]);
- }
- }
- return list.toArray(new ICProject[list.size()]);
- }
-
- /**
- * 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();
- if (projectName.length() < 1) {
- return null;
- }
- return CoreModel.getDefault().getCModel().getCProject(projectName);
- }
-
/*
* (non-Javadoc)
*
@@ -625,34 +364,6 @@ public class CMainTab extends CLaunchConfigurationTab {
return true;
}
- /**
- * @param project
- * @param exePath
- * @return
- * @throws CoreException
- */
- protected boolean isBinary(IProject project, IPath exePath) throws CoreException {
- ICExtensionReference[] parserRef = CCorePlugin.getDefault().getBinaryParserExtensions(project);
- for (int i = 0; i < parserRef.length; i++) {
- try {
- IBinaryParser parser = (IBinaryParser)parserRef[i].createExtension();
- IBinaryObject exe = (IBinaryObject)parser.getBinary(exePath);
- if (exe != null) {
- return true;
- }
- } catch (ClassCastException e) {
- } catch (IOException e) {
- }
- }
- IBinaryParser parser = CCorePlugin.getDefault().getDefaultBinaryParser();
- try {
- IBinaryObject exe = (IBinaryObject)parser.getBinary(exePath);
- return exe != null;
- } catch (ClassCastException e) {
- } catch (IOException e) {
- }
- return false;
- }
/*
* (non-Javadoc)
*
@@ -666,6 +377,7 @@ public class CMainTab extends CLaunchConfigurationTab {
// corresponding text boxes)
// plus getContext will use this to base context from if set.
config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME, EMPTY_STRING);
+ config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_BUILD_CONFIG_ID, EMPTY_STRING);
config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_COREFILE_PATH, EMPTY_STRING);
ICElement cElement = null;
@@ -763,13 +475,4 @@ public class CMainTab extends CLaunchConfigurationTab {
return LaunchImages.get(LaunchImages.IMG_VIEW_MAIN_TAB);
}
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#updateLaunchConfigurationDialog()
- */
- @Override
- protected void updateLaunchConfigurationDialog() {
- super.updateLaunchConfigurationDialog();
- }
}
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
new file mode 100644
index 00000000000..b357863f1c9
--- /dev/null
+++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CAbstractMainTab.java
@@ -0,0 +1,540 @@
+package org.eclipse.cdt.launch.ui;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.cdt.core.CCorePlugin;
+import org.eclipse.cdt.core.ICDescriptor;
+import org.eclipse.cdt.core.IBinaryParser.IBinaryObject;
+import org.eclipse.cdt.core.model.CModelException;
+import org.eclipse.cdt.core.model.CoreModel;
+import org.eclipse.cdt.core.model.IBinary;
+import org.eclipse.cdt.core.model.ICProject;
+import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
+import org.eclipse.cdt.core.settings.model.ICProjectDescription;
+import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
+import org.eclipse.cdt.launch.LaunchUtils;
+import org.eclipse.cdt.launch.internal.ui.LaunchMessages;
+import org.eclipse.cdt.launch.internal.ui.LaunchUIPlugin;
+import org.eclipse.cdt.ui.CElementLabelProvider;
+import org.eclipse.cdt.ui.newui.CDTPropertyManager;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.BusyIndicator;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+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.Display;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Link;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.dialogs.ElementListSelectionDialog;
+import org.eclipse.ui.dialogs.PreferencesUtil;
+
+/**
+ * @since 6.1
+ */
+public abstract class CAbstractMainTab extends CLaunchConfigurationTab {
+
+
+ protected static final String EMPTY_STRING = ""; //$NON-NLS-1$
+
+ protected String filterPlatform = EMPTY_STRING;
+
+ /**
+ * @since 6.0
+ */
+ protected Combo fBuildConfigCombo;
+ /** @since 6.1 */
+ protected Button fDisableBuildButton;
+ /** @since 6.1 */
+ protected Button fEnableBuildButton;
+ /** @since 6.1 */
+ protected Button fWorkspaceSettingsButton;
+ /** @since 6.1 */
+ protected Link fWorkpsaceSettingsLink;
+ protected final Map fBinaryExeCache = new HashMap();
+ 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;
+ /** @since 2.0 */
+ protected Text fCoreText;
+ /** @since 2.0 */
+ protected Button fCoreButton;
+
+ /**
+ * 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;
+ */
+ protected boolean fPreviouslyCheckedProgramIsValid;
+ /**
+ * Validity error message of most recently checked program; avoid constantly
+ * checking binary. See bug 277663. N/A if fPreviouslyCheckedProgram = null.
+ */
+ protected String fPreviouslyCheckedProgramErrorMsg;
+
+ public CAbstractMainTab() {
+ super();
+ }
+
+ abstract protected void handleSearchButtonSelected();
+
+ /**
+ * @since 6.0
+ */
+ protected void createProjectGroup(Composite parent, int colSpan) {
+ Composite projComp = new Composite(parent, SWT.NONE);
+ GridLayout projLayout = new GridLayout();
+ projLayout.numColumns = 2;
+ projLayout.marginHeight = 0;
+ projLayout.marginWidth = 0;
+ projComp.setLayout(projLayout);
+ GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan = colSpan;
+ projComp.setLayoutData(gd);
+
+ fProjLabel = new Label(projComp, SWT.NONE);
+ fProjLabel.setText(LaunchMessages.getString("CMainTab.&ProjectColon")); //$NON-NLS-1$
+ 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);
+ fProjText.addModifyListener(new ModifyListener() {
+
+ public void modifyText(ModifyEvent evt) {
+ // if project changes, invalidate program name cache
+ fPreviouslyCheckedProgram = null;
+
+ updateBuildConfigCombo(""); //$NON-NLS-1$
+ updateLaunchConfigurationDialog();
+ }
+ });
+
+ fProjButton = createPushButton(projComp, LaunchMessages.getString("Launch.common.Browse_1"), null); //$NON-NLS-1$
+ fProjButton.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent evt) {
+ handleProjectButtonSelected();
+ updateLaunchConfigurationDialog();
+ }
+ });
+ }
+
+ /**
+ * 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();
+ if (projectName.length() < 1) {
+ return null;
+ }
+ return CoreModel.getDefault().getCModel().getCProject(projectName);
+ }
+
+ /**
+ * 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();
+ ICProject project = chooseCProject();
+ 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) {
+ fProgText.setText(bins[0].getResource().getProjectRelativePath().toOSString());
+ }
+
+ }
+ }
+
+ /**
+ * Return an array a ICProject whose platform match that of the runtime env.
+ */
+ 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 {
+ cdesciptor = CCorePlugin.getDefault().getCProjectDescription((IProject)cproject[i].getResource(), false);
+ if (cdesciptor != null) {
+ String projectPlatform = cdesciptor.getPlatform();
+ if (filterPlatform.equals("*") //$NON-NLS-1$
+ || projectPlatform.equals("*") //$NON-NLS-1$
+ || filterPlatform.equalsIgnoreCase(projectPlatform) == true) {
+ list.add(cproject[i]);
+ }
+ } else {
+ list.add(cproject[i]);
+ }
+ } catch (CoreException e) {
+ list.add(cproject[i]);
+ }
+ }
+ return list.toArray(new ICProject[list.size()]);
+ }
+
+ /**
+ * 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.getString("CMainTab.Project_Selection")); //$NON-NLS-1$
+ dialog.setMessage(LaunchMessages.getString("CMainTab.Choose_project_to_constrain_search_for_program")); //$NON-NLS-1$
+ dialog.setElements(projects);
+
+ ICProject cProject = getCProject();
+ if (cProject != null) {
+ dialog.setInitialSelections(new Object[]{cProject});
+ }
+ if (dialog.open() == Window.OK) {
+ return (ICProject)dialog.getFirstResult();
+ }
+ } catch (CModelException e) {
+ LaunchUIPlugin.errorDialog("Launch UI internal error", e); //$NON-NLS-1$
+ }
+ return null;
+ }
+
+ /**
+ * @since 6.0
+ */
+ protected void updateBuildConfigCombo(String selectedConfigID) {
+ if (fBuildConfigCombo != null)
+ {
+ fBuildConfigCombo.removeAll();
+ fBuildConfigCombo.add(LaunchMessages.getString("CMainTab.Use_Active")); //$NON-NLS-1$
+ fBuildConfigCombo.setData("0", ""); //$NON-NLS-1$ //$NON-NLS-2$
+ fBuildConfigCombo.select(0);
+ ICProject cproject = getCProject();
+ if (cproject != null){
+
+ ICProjectDescription projDes = CDTPropertyManager.getProjectDescription(cproject.getProject());
+ if (projDes != null)
+ {
+ int selIndex = 0;
+ ICConfigurationDescription[] configurations = projDes.getConfigurations();
+ ICConfigurationDescription selectedConfig = projDes.getConfigurationById(selectedConfigID);
+ for (int i = 0; i < configurations.length; i++) {
+ String configName = configurations[i].getName();
+ fBuildConfigCombo.add(configName);
+ fBuildConfigCombo.setData(Integer.toString(i + 1), configurations[i].getId());
+ if (selectedConfig != null && selectedConfigID.equals(configurations[i].getId()))
+ selIndex = i + 1;
+ }
+ fBuildConfigCombo.select(selIndex);
+ }
+
+ }
+
+ }
+ }
+
+ /**
+ * @since 6.0
+ */
+ protected void createBuildConfigCombo(Composite parent, int colspan) {
+ Composite comboComp = new Composite(parent, SWT.NONE);
+ GridLayout layout = new GridLayout(2, false);
+ comboComp.setLayout(layout);
+ GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan = colspan;
+ comboComp.setLayoutData(gd);
+ Label dlabel = new Label(comboComp, SWT.NONE);
+ dlabel.setText(LaunchMessages.getString("CMainTab.Build_Config")); //$NON-NLS-1$
+ fBuildConfigCombo = new Combo(comboComp, SWT.READ_ONLY | SWT.DROP_DOWN);
+ fBuildConfigCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ fBuildConfigCombo.addSelectionListener(new SelectionListener() {
+ public void widgetSelected(SelectionEvent e) {
+ updateLaunchConfigurationDialog();
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ updateLaunchConfigurationDialog();
+ }
+ });
+ }
+
+ /** @since 6.1 */
+ protected void createBuildOptionGroup(final Composite parent, int colSpan) {
+ Group buildGroup = new Group(parent, SWT.NONE);
+ GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
+ gridData.horizontalSpan = colSpan;
+ GridLayout gridLayout = new GridLayout();
+ gridLayout.numColumns = 2;
+ gridLayout.marginHeight = 5;
+ gridLayout.marginWidth = 5;
+ gridLayout.makeColumnsEqualWidth= true;
+ buildGroup.setLayoutData(gridData);
+ buildGroup.setLayout(gridLayout);
+ buildGroup.setText(LaunchMessages.getString("CMainTab.Build_options")); //$NON-NLS-1$
+
+ createBuildConfigCombo(buildGroup, 2);
+
+ fEnableBuildButton = new Button(buildGroup, SWT.RADIO);
+ fEnableBuildButton.setText(LaunchMessages.getString("CMainTab.Enable_build_button_label")); //$NON-NLS-1$
+ fEnableBuildButton.setToolTipText(LaunchMessages.getString("CMainTab.Enable_build_button_tooltip")); //$NON-NLS-1$
+ fEnableBuildButton.addSelectionListener(new SelectionAdapter() {
+
+ public void widgetSelected(SelectionEvent evt) {
+ updateLaunchConfigurationDialog();
+ }
+ });
+
+ fDisableBuildButton = new Button(buildGroup, SWT.RADIO);
+ fDisableBuildButton.setText(LaunchMessages.getString("CMainTab.Disable_build_button_label")); //$NON-NLS-1$
+ fDisableBuildButton.setToolTipText(LaunchMessages.getString("CMainTab.Disable_build_button_tooltip")); //$NON-NLS-1$
+ fDisableBuildButton.addSelectionListener(new SelectionAdapter() {
+
+ public void widgetSelected(SelectionEvent evt) {
+ updateLaunchConfigurationDialog();
+ }
+ });
+
+ fWorkspaceSettingsButton = new Button(buildGroup, SWT.RADIO);
+ fWorkspaceSettingsButton.setText(LaunchMessages.getString("CMainTab.Workspace_settings_button_label")); //$NON-NLS-1$
+ fWorkspaceSettingsButton.setToolTipText(LaunchMessages.getString("CMainTab.Workspace_settings_button_tooltip")); //$NON-NLS-1$
+ fWorkspaceSettingsButton.addSelectionListener(new SelectionAdapter() {
+
+ public void widgetSelected(SelectionEvent evt) {
+ updateLaunchConfigurationDialog();
+ }
+ });
+
+ fWorkpsaceSettingsLink = new Link(buildGroup, SWT.NONE); //$NON-NLS-1$
+ fWorkpsaceSettingsLink.setText(LaunchMessages.getString("CMainTab.Workspace_settings_link_label")); //$NON-NLS-1$
+ fWorkpsaceSettingsLink.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ PreferencesUtil.createPreferenceDialogOn(
+ parent.getShell(),
+ LaunchMessages.getString("CMainTab.Workspace_settings_page_id"), //$NON-NLS-1$
+ null,
+ null).open();
+ }
+ });
+
+ }
+
+ /** @since 6.1 */
+ protected void updateBuildOptionFromConfig(ILaunchConfiguration config) {
+ int buildBeforeLaunchValue = ICDTLaunchConfigurationConstants.BUILD_BEFORE_LAUNCH_USE_WORKSPACE_SETTING;
+ try {
+ buildBeforeLaunchValue = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_BUILD_BEFORE_LAUNCH, buildBeforeLaunchValue);
+ } catch (CoreException e) {
+ LaunchUIPlugin.log(e);
+ }
+
+ if (fDisableBuildButton != null)
+ 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);
+ }
+
+ /**
+ * Show a dialog that lets the user select a file.
+ *
+ * @since 6.0
+ */
+ protected String handleBrowseButtonSelected() {
+ FileDialog fileDialog = new FileDialog(getShell(), SWT.NONE);
+ fileDialog.setFileName(fProgText.getText());
+ return fileDialog.open();
+ }
+
+ /** @since 2.0 */
+ protected void createCoreFileGroup(Composite parent, int colSpan) {
+ Composite coreComp = new Composite(parent, SWT.NONE);
+ GridLayout coreLayout = new GridLayout();
+ coreLayout.numColumns = 3;
+ coreLayout.marginHeight = 0;
+ coreLayout.marginWidth = 0;
+ coreComp.setLayout(coreLayout);
+ GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan = colSpan;
+ coreComp.setLayoutData(gd);
+ fCoreLabel = new Label(coreComp, SWT.NONE);
+ fCoreLabel.setText(LaunchMessages.getString("CMainTab.CoreFile_path")); //$NON-NLS-1$
+ gd = new GridData();
+ gd.horizontalSpan = 3;
+ fCoreLabel.setLayoutData(gd);
+ fCoreText = new Text(coreComp, SWT.SINGLE | SWT.BORDER);
+ gd = new GridData(GridData.FILL_HORIZONTAL);
+ fCoreText.setLayoutData(gd);
+ fCoreText.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent evt) {
+ updateLaunchConfigurationDialog();
+ }
+ });
+
+ Button browseForCoreButton;
+ browseForCoreButton = createPushButton(coreComp, LaunchMessages.getString("Launch.common.Browse_2"), null); //$NON-NLS-1$
+ browseForCoreButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent evt) {
+ String text = handleBrowseButtonSelected();
+ if (text != null) {
+ fCoreText.setText(text);
+ }
+ updateLaunchConfigurationDialog();
+ }
+ });
+ }
+
+ /**
+ * @param project
+ * @param exePath
+ * @return
+ * @throws CoreException
+ */
+ protected boolean isBinary(IProject project, IPath exePath) throws CoreException {
+ try {
+ Boolean binValue = fBinaryExeCache.get(exePath);
+ if (binValue == null)
+ {
+ IBinaryObject exe = LaunchUtils.getBinary(project, exePath);
+ binValue = exe != null;
+ 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.
+ */
+ protected IBinary[] getBinaryFiles(final ICProject cproject) {
+ final Display display;
+ if (cproject == null || !cproject.exists()) {
+ return null;
+ }
+ if (getShell() == null) {
+ display = LaunchUIPlugin.getShell().getDisplay();
+ } else {
+ display = getShell().getDisplay();
+ }
+ final Object[] ret = new Object[1];
+ BusyIndicator.showWhile(display, new Runnable() {
+
+ public void run() {
+ try {
+ ret[0] = cproject.getBinaryContainer().getBinaries();
+ } catch (CModelException e) {
+ LaunchUIPlugin.errorDialog("Launch UI internal error", e); //$NON-NLS-1$
+ }
+ }
+ });
+
+ return (IBinary[])ret[0];
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy)
+ */
+ public void performApply(ILaunchConfigurationWorkingCopy config) {
+ if (fBuildConfigCombo != null) {
+ config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_BUILD_CONFIG_ID, (String)fBuildConfigCombo.getData(Integer.toString(fBuildConfigCombo.getSelectionIndex())));
+ }
+
+ if (fDisableBuildButton != null) {
+ int buildBeforeLaunchValue = ICDTLaunchConfigurationConstants.BUILD_BEFORE_LAUNCH_USE_WORKSPACE_SETTING;
+ if (fDisableBuildButton.getSelection()) {
+ buildBeforeLaunchValue = ICDTLaunchConfigurationConstants.BUILD_BEFORE_LAUNCH_DISABLED;
+ } else if (fEnableBuildButton.getSelection()) {
+ buildBeforeLaunchValue = ICDTLaunchConfigurationConstants.BUILD_BEFORE_LAUNCH_ENABLED;
+ }
+ config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_BUILD_BEFORE_LAUNCH, buildBeforeLaunchValue);
+ }
+ }
+
+ 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);
+ } catch (CoreException ce) {
+ LaunchUIPlugin.log(ce);
+ }
+ fProjText.setText(projectName);
+ updateBuildConfigCombo(configName);
+ }
+
+ protected void updateProgramFromConfig(ILaunchConfiguration config) {
+ if (fProgText != null)
+ {
+ String programName = EMPTY_STRING;
+ try {
+ programName = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROGRAM_NAME, EMPTY_STRING);
+ } catch (CoreException ce) {
+ LaunchUIPlugin.log(ce);
+ }
+ fProgText.setText(programName);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#updateLaunchConfigurationDialog()
+ */
+ @Override
+ protected void updateLaunchConfigurationDialog() {
+ super.updateLaunchConfigurationDialog();
+ }
+
+}
\ No newline at end of file
diff --git a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CMainTab.java b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CMainTab.java
index f76630c5f52..66bb5f51a50 100644
--- a/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CMainTab.java
+++ b/launch/org.eclipse.cdt.launch/src/org/eclipse/cdt/launch/ui/CMainTab.java
@@ -12,29 +12,18 @@
*******************************************************************************/
package org.eclipse.cdt.launch.ui;
-import java.util.ArrayList;
-import java.util.HashMap;
import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.core.ICDescriptor;
-import org.eclipse.cdt.core.IBinaryParser.IBinaryObject;
-import org.eclipse.cdt.core.model.CModelException;
-import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.IBinary;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ICProject;
-import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICProjectDescription;
import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
-import org.eclipse.cdt.launch.LaunchUtils;
import org.eclipse.cdt.launch.internal.ui.LaunchImages;
import org.eclipse.cdt.launch.internal.ui.LaunchMessages;
import org.eclipse.cdt.launch.internal.ui.LaunchUIPlugin;
import org.eclipse.cdt.ui.CElementLabelProvider;
-import org.eclipse.cdt.ui.newui.CDTPropertyManager;
import org.eclipse.cdt.utils.pty.PTY;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
@@ -52,26 +41,18 @@ import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.BusyIndicator;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
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.Display;
import org.eclipse.swt.widgets.FileDialog;
-import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.dialogs.ElementListSelectionDialog;
-import org.eclipse.ui.dialogs.PreferencesUtil;
import org.eclipse.ui.dialogs.TwoPaneElementSelector;
/**
@@ -84,7 +65,7 @@ import org.eclipse.ui.dialogs.TwoPaneElementSelector;
* @since 2.0
*/
-public class CMainTab extends CLaunchConfigurationTab {
+public class CMainTab extends CAbstractMainTab {
/**
* Tab identifier used for ordering of tabs added using the
@@ -95,16 +76,6 @@ public class CMainTab extends CLaunchConfigurationTab {
*/
public static final String TAB_ID = "org.eclipse.cdt.cdi.launch.mainTab"; //$NON-NLS-1$
- // Project UI widgets
- protected Label fProjLabel;
- protected Text fProjText;
- protected Button fProjButton;
-
- // Main class UI widgets
- protected Label fProgLabel;
- protected Text fProgText;
- protected Button fSearchButton;
-
// Core file UI widgets
/** @since 6.0 */
protected Label fCoreLabel;
@@ -113,56 +84,17 @@ public class CMainTab extends CLaunchConfigurationTab {
/** @since 6.0 */
protected Button fCoreButton;
- /**
- * @since 6.0
- */
- protected Combo fBuildConfigCombo;
- // Build option UI widgets
- /** @since 6.1 */
- protected Button fDisableBuildButton;
- /** @since 6.1 */
- protected Button fEnableBuildButton;
- /** @since 6.1 */
- protected Button fWorkspaceSettingsButton;
- /** @since 6.1 */
- protected Link fWorkpsaceSettingsLink;
-
private final boolean fWantsTerminalOption;
protected Button fTerminalButton;
private final boolean dontCheckProgram;
private final boolean fSpecifyCoreFile;
-
- protected static final String EMPTY_STRING = ""; //$NON-NLS-1$
-
- private String filterPlatform = EMPTY_STRING;
public static final int WANTS_TERMINAL = 1;
public static final int DONT_CHECK_PROGRAM = 2;
/** @since 6.0 */
public static final int SPECIFY_CORE_FILE = 4;
- private final Map fBinaryExeCache = new HashMap();
-
- /**
- * Name of most recently checked program; avoid constantly checking binary.
- * See bug 277663.
- */
- private String fPreviouslyCheckedProgram;
-
- /**
- * Validity result of most recently checked program; avoid constantly
- * checking binary. See bug 277663. N/A if fPreviouslyCheckedProgram = null;
- */
- private boolean fPreviouslyCheckedProgramIsValid;
-
- /**
- * Validity error message of most recently checked program; avoid constantly
- * checking binary. See bug 277663. N/A if fPreviouslyCheckedProgram = null.
- */
- private String fPreviouslyCheckedProgramErrorMsg;
-
-
public CMainTab() {
this(WANTS_TERMINAL);
}
@@ -205,252 +137,6 @@ public class CMainTab extends CLaunchConfigurationTab {
LaunchUIPlugin.setDialogShell(parent.getShell());
}
- /**
- * @since 6.0
- */
- protected void createProjectGroup(Composite parent, int colSpan) {
- Composite projComp = new Composite(parent, SWT.NONE);
- GridLayout projLayout = new GridLayout();
- projLayout.numColumns = 2;
- projLayout.marginHeight = 0;
- projLayout.marginWidth = 0;
- projComp.setLayout(projLayout);
- GridData gd = new GridData(GridData.FILL_HORIZONTAL);
- gd.horizontalSpan = colSpan;
- projComp.setLayoutData(gd);
-
- fProjLabel = new Label(projComp, SWT.NONE);
- fProjLabel.setText(LaunchMessages.getString("CMainTab.&ProjectColon")); //$NON-NLS-1$
- 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);
- fProjText.addModifyListener(new ModifyListener() {
-
- public void modifyText(ModifyEvent evt) {
- // if project changes, invalidate program name cache
- fPreviouslyCheckedProgram = null;
-
- updateBuildConfigCombo(EMPTY_STRING);
- updateLaunchConfigurationDialog();
- }
- });
-
- fProjButton = createPushButton(projComp, LaunchMessages.getString("Launch.common.Browse_1"), null); //$NON-NLS-1$
- fProjButton.addSelectionListener(new SelectionAdapter() {
-
- @Override
- public void widgetSelected(SelectionEvent evt) {
- handleProjectButtonSelected();
- updateLaunchConfigurationDialog();
- }
- });
- }
-
- /**
- * @since 6.0
- */
- protected void updateBuildConfigCombo(String selectedConfigID) {
- if (fBuildConfigCombo != null)
- {
- fBuildConfigCombo.removeAll();
- fBuildConfigCombo.add(LaunchMessages.getString("CMainTab.Use_Active")); //$NON-NLS-1$
- fBuildConfigCombo.setData("0", EMPTY_STRING); //$NON-NLS-1$
- fBuildConfigCombo.select(0);
- ICProject cproject = getCProject();
- if (cproject != null){
-
- ICProjectDescription projDes = CDTPropertyManager.getProjectDescription(cproject.getProject());
- if (projDes != null)
- {
- int selIndex = 0;
- ICConfigurationDescription[] configurations = projDes.getConfigurations();
- ICConfigurationDescription selectedConfig = projDes.getConfigurationById(selectedConfigID);
- for (int i = 0; i < configurations.length; i++) {
- String configName = configurations[i].getName();
- fBuildConfigCombo.add(configName);
- fBuildConfigCombo.setData(Integer.toString(i + 1), configurations[i].getId());
- if (selectedConfig != null && selectedConfigID.equals(configurations[i].getId()))
- selIndex = i + 1;
- }
- fBuildConfigCombo.select(selIndex);
- }
-
- }
-
- }
- }
-
- /**
- * @since 6.0
- */
- protected void createBuildConfigCombo(Composite parent, int colspan) {
- Composite comboComp = new Composite(parent, SWT.NONE);
- GridLayout layout = new GridLayout(2, false);
- comboComp.setLayout(layout);
- GridData gd = new GridData(GridData.FILL_HORIZONTAL);
- gd.horizontalSpan = colspan;
- comboComp.setLayoutData(gd);
- Label dlabel = new Label(comboComp, SWT.NONE);
- dlabel.setText(LaunchMessages.getString("CMainTab.Build_Config")); //$NON-NLS-1$
- fBuildConfigCombo = new Combo(comboComp, SWT.READ_ONLY | SWT.DROP_DOWN);
- fBuildConfigCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- fBuildConfigCombo.addSelectionListener(new SelectionListener() {
- public void widgetSelected(SelectionEvent e) {
- updateLaunchConfigurationDialog();
- }
-
- public void widgetDefaultSelected(SelectionEvent e) {
- updateLaunchConfigurationDialog();
- }
- });
- }
-
- protected void createExeFileGroup(Composite parent, int colSpan) {
- Composite mainComp = new Composite(parent, SWT.NONE);
- GridLayout mainLayout = new GridLayout();
- mainLayout.numColumns = 3;
- mainLayout.marginHeight = 0;
- mainLayout.marginWidth = 0;
- mainComp.setLayout(mainLayout);
- GridData gd = new GridData(GridData.FILL_HORIZONTAL);
- gd.horizontalSpan = colSpan;
- mainComp.setLayoutData(gd);
- fProgLabel = new Label(mainComp, SWT.NONE);
- fProgLabel.setText(LaunchMessages.getString("CMainTab.C/C++_Application")); //$NON-NLS-1$
- gd = new GridData();
- gd.horizontalSpan = 3;
- fProgLabel.setLayoutData(gd);
- fProgText = new Text(mainComp, SWT.SINGLE | SWT.BORDER);
- gd = new GridData(GridData.FILL_HORIZONTAL);
- fProgText.setLayoutData(gd);
- fProgText.addModifyListener(new ModifyListener() {
- public void modifyText(ModifyEvent evt) {
- updateLaunchConfigurationDialog();
- }
- });
-
- fSearchButton = createPushButton(mainComp, LaunchMessages.getString("CMainTab.Search..."), null); //$NON-NLS-1$
- fSearchButton.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent evt) {
- handleSearchButtonSelected();
- updateLaunchConfigurationDialog();
- }
- });
-
- Button fBrowseForBinaryButton;
- fBrowseForBinaryButton = createPushButton(mainComp, LaunchMessages.getString("Launch.common.Browse_2"), null); //$NON-NLS-1$
- fBrowseForBinaryButton.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent evt) {
- handleBinaryBrowseButtonSelected();
- updateLaunchConfigurationDialog();
- }
- });
- }
-
- /** @since 6.1 */
- protected void createBuildOptionGroup(final Composite parent, int colSpan) {
- Group buildGroup = new Group(parent, SWT.NONE);
- GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
- gridData.horizontalSpan = colSpan;
- GridLayout gridLayout = new GridLayout();
- gridLayout.numColumns = 2;
- gridLayout.marginHeight = 5;
- gridLayout.marginWidth = 5;
- gridLayout.makeColumnsEqualWidth= true;
- buildGroup.setLayoutData(gridData);
- buildGroup.setLayout(gridLayout);
- buildGroup.setText(LaunchMessages.getString("CMainTab.Build_options")); //$NON-NLS-1$
-
- createBuildConfigCombo(buildGroup, 2);
-
- fEnableBuildButton = new Button(buildGroup, SWT.RADIO);
- fEnableBuildButton.setText(LaunchMessages.getString("CMainTab.Enable_build_button_label")); //$NON-NLS-1$
- fEnableBuildButton.setToolTipText(LaunchMessages.getString("CMainTab.Enable_build_button_tooltip")); //$NON-NLS-1$
- fEnableBuildButton.addSelectionListener(new SelectionAdapter() {
-
- public void widgetSelected(SelectionEvent evt) {
- updateLaunchConfigurationDialog();
- }
- });
-
- fDisableBuildButton = new Button(buildGroup, SWT.RADIO);
- fDisableBuildButton.setText(LaunchMessages.getString("CMainTab.Disable_build_button_label")); //$NON-NLS-1$
- fDisableBuildButton.setToolTipText(LaunchMessages.getString("CMainTab.Disable_build_button_tooltip")); //$NON-NLS-1$
- fDisableBuildButton.addSelectionListener(new SelectionAdapter() {
-
- public void widgetSelected(SelectionEvent evt) {
- updateLaunchConfigurationDialog();
- }
- });
-
- fWorkspaceSettingsButton = new Button(buildGroup, SWT.RADIO);
- fWorkspaceSettingsButton.setText(LaunchMessages.getString("CMainTab.Workspace_settings_button_label")); //$NON-NLS-1$
- fWorkspaceSettingsButton.setToolTipText(LaunchMessages.getString("CMainTab.Workspace_settings_button_tooltip")); //$NON-NLS-1$
- fWorkspaceSettingsButton.addSelectionListener(new SelectionAdapter() {
-
- public void widgetSelected(SelectionEvent evt) {
- updateLaunchConfigurationDialog();
- }
- });
-
- fWorkpsaceSettingsLink = new Link(buildGroup, SWT.NONE); //$NON-NLS-1$
- fWorkpsaceSettingsLink.setText(LaunchMessages.getString("CMainTab.Workspace_settings_link_label")); //$NON-NLS-1$
- fWorkpsaceSettingsLink.addSelectionListener(new SelectionAdapter() {
- public void widgetSelected(SelectionEvent e) {
- PreferencesUtil.createPreferenceDialogOn(
- parent.getShell(),
- LaunchMessages.getString("CMainTab.Workspace_settings_page_id"), //$NON-NLS-1$
- null,
- null).open();
- }
- });
-
- }
- /** @since 6.0 */
- protected void createCoreFileGroup(Composite parent, int colSpan) {
- Composite coreComp = new Composite(parent, SWT.NONE);
- GridLayout coreLayout = new GridLayout();
- coreLayout.numColumns = 3;
- coreLayout.marginHeight = 0;
- coreLayout.marginWidth = 0;
- coreComp.setLayout(coreLayout);
- GridData gd = new GridData(GridData.FILL_HORIZONTAL);
- gd.horizontalSpan = colSpan;
- coreComp.setLayoutData(gd);
- fCoreLabel = new Label(coreComp, SWT.NONE);
- fCoreLabel.setText(LaunchMessages.getString("CMainTab.CoreFile_path")); //$NON-NLS-1$
- gd = new GridData();
- gd.horizontalSpan = 3;
- fCoreLabel.setLayoutData(gd);
- fCoreText = new Text(coreComp, SWT.SINGLE | SWT.BORDER);
- gd = new GridData(GridData.FILL_HORIZONTAL);
- fCoreText.setLayoutData(gd);
- fCoreText.addModifyListener(new ModifyListener() {
- public void modifyText(ModifyEvent evt) {
- updateLaunchConfigurationDialog();
- }
- });
-
- Button browseForCoreButton;
- browseForCoreButton = createPushButton(coreComp, LaunchMessages.getString("Launch.common.Browse_2"), null); //$NON-NLS-1$
- browseForCoreButton.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent evt) {
- String text = handleBrowseButtonSelected();
- if (text != null) {
- fCoreText.setText(text);
- }
- updateLaunchConfigurationDialog();
- }
- });
- }
-
protected boolean wantsTerminalOption() {
return fWantsTerminalOption;
}
@@ -503,32 +189,6 @@ public class CMainTab extends CLaunchConfigurationTab {
}
}
- 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);
- } catch (CoreException ce) {
- LaunchUIPlugin.log(ce);
- }
- fProjText.setText(projectName);
- updateBuildConfigCombo(configName);
- }
-
- protected void updateProgramFromConfig(ILaunchConfiguration config) {
- if (fProgText != null)
- {
- String programName = EMPTY_STRING;
- try {
- programName = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_PROGRAM_NAME, EMPTY_STRING);
- } catch (CoreException ce) {
- LaunchUIPlugin.log(ce);
- }
- fProgText.setText(programName);
- }
- }
-
/** @since 6.0 */
protected void updateCoreFromConfig(ILaunchConfiguration config) {
if (fCoreText != null) {
@@ -542,29 +202,13 @@ public class CMainTab extends CLaunchConfigurationTab {
}
}
- /** @since 6.1 */
- protected void updateBuildOptionFromConfig(ILaunchConfiguration config) {
- int buildBeforeLaunchValue = ICDTLaunchConfigurationConstants.BUILD_BEFORE_LAUNCH_USE_WORKSPACE_SETTING;
- try {
- buildBeforeLaunchValue = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_BUILD_BEFORE_LAUNCH, buildBeforeLaunchValue);
- } catch (CoreException e) {
- LaunchUIPlugin.log(e);
- }
-
- if (fDisableBuildButton != null)
- 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);
- }
-
/*
* (non-Javadoc)
*
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy)
*/
public void performApply(ILaunchConfigurationWorkingCopy config) {
+ super.performApply(config);
ICProject cProject = this.getCProject();
if (cProject != null && cProject.exists())
{
@@ -577,9 +221,6 @@ public class CMainTab extends CLaunchConfigurationTab {
config.setMappedResources(null);
}
config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME, fProjText.getText());
- if (fBuildConfigCombo != null) {
- config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_BUILD_CONFIG_ID, (String)fBuildConfigCombo.getData(Integer.toString(fBuildConfigCombo.getSelectionIndex())));
- }
if (fProgText != null) {
config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_PROGRAM_NAME, fProgText.getText());
}
@@ -590,15 +231,6 @@ public class CMainTab extends CLaunchConfigurationTab {
config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_USE_TERMINAL, fTerminalButton.getSelection());
}
- if (fDisableBuildButton != null) {
- int buildBeforeLaunchValue = ICDTLaunchConfigurationConstants.BUILD_BEFORE_LAUNCH_USE_WORKSPACE_SETTING;
- if (fDisableBuildButton.getSelection()) {
- buildBeforeLaunchValue = ICDTLaunchConfigurationConstants.BUILD_BEFORE_LAUNCH_DISABLED;
- } else if (fEnableBuildButton.getSelection()) {
- buildBeforeLaunchValue = ICDTLaunchConfigurationConstants.BUILD_BEFORE_LAUNCH_ENABLED;
- }
- config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_BUILD_BEFORE_LAUNCH, buildBeforeLaunchValue);
- }
}
/**
@@ -674,6 +306,95 @@ public class CMainTab extends CLaunchConfigurationTab {
}
+ /**
+ * @since 6.0
+ */
+ protected void createProjectGroup(Composite parent, int colSpan) {
+ Composite projComp = new Composite(parent, SWT.NONE);
+ GridLayout projLayout = new GridLayout();
+ projLayout.numColumns = 2;
+ projLayout.marginHeight = 0;
+ projLayout.marginWidth = 0;
+ projComp.setLayout(projLayout);
+ GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan = colSpan;
+ projComp.setLayoutData(gd);
+
+ fProjLabel = new Label(projComp, SWT.NONE);
+ fProjLabel.setText(LaunchMessages.getString("CMainTab.&ProjectColon")); //$NON-NLS-1$
+ 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);
+ fProjText.addModifyListener(new ModifyListener() {
+
+ public void modifyText(ModifyEvent evt) {
+ // if project changes, invalidate program name cache
+ fPreviouslyCheckedProgram = null;
+
+ updateBuildConfigCombo(""); //$NON-NLS-1$
+ updateLaunchConfigurationDialog();
+ }
+ });
+
+ fProjButton = createPushButton(projComp, LaunchMessages.getString("Launch.common.Browse_1"), null); //$NON-NLS-1$
+ fProjButton.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent evt) {
+ handleProjectButtonSelected();
+ updateLaunchConfigurationDialog();
+ }
+ });
+ }
+
+ protected void createExeFileGroup(Composite parent, int colSpan) {
+ Composite mainComp = new Composite(parent, SWT.NONE);
+ GridLayout mainLayout = new GridLayout();
+ mainLayout.numColumns = 3;
+ mainLayout.marginHeight = 0;
+ mainLayout.marginWidth = 0;
+ mainComp.setLayout(mainLayout);
+ GridData gd = new GridData(GridData.FILL_HORIZONTAL);
+ gd.horizontalSpan = colSpan;
+ mainComp.setLayoutData(gd);
+ fProgLabel = new Label(mainComp, SWT.NONE);
+ fProgLabel.setText(LaunchMessages.getString("CMainTab.C/C++_Application")); //$NON-NLS-1$
+ gd = new GridData();
+ gd.horizontalSpan = 3;
+ fProgLabel.setLayoutData(gd);
+ fProgText = new Text(mainComp, SWT.SINGLE | SWT.BORDER);
+ gd = new GridData(GridData.FILL_HORIZONTAL);
+ fProgText.setLayoutData(gd);
+ fProgText.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent evt) {
+ updateLaunchConfigurationDialog();
+ }
+ });
+
+ fSearchButton = createPushButton(mainComp, LaunchMessages.getString("CMainTab.Search..."), null); //$NON-NLS-1$
+ fSearchButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent evt) {
+ handleSearchButtonSelected();
+ updateLaunchConfigurationDialog();
+ }
+ });
+
+ Button fBrowseForBinaryButton;
+ fBrowseForBinaryButton = createPushButton(mainComp, LaunchMessages.getString("Launch.common.Browse_2"), null); //$NON-NLS-1$
+ fBrowseForBinaryButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent evt) {
+ handleBinaryBrowseButtonSelected();
+ updateLaunchConfigurationDialog();
+ }
+ });
+ }
+
/**
* 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
@@ -694,137 +415,6 @@ public class CMainTab extends CLaunchConfigurationTab {
}
}
- /**
- * Show a dialog that lets the user select a file.
- *
- * @since 6.0
- */
- protected String handleBrowseButtonSelected() {
- FileDialog fileDialog = new FileDialog(getShell(), SWT.NONE);
- fileDialog.setFileName(fProgText.getText());
- return fileDialog.open();
- }
-
- /**
- * Iterate through and suck up all of the executable files that we can find.
- */
- protected IBinary[] getBinaryFiles(final ICProject cproject) {
- final Display display;
- if (cproject == null || !cproject.exists()) {
- return null;
- }
- if (getShell() == null) {
- display = LaunchUIPlugin.getShell().getDisplay();
- } else {
- display = getShell().getDisplay();
- }
- final Object[] ret = new Object[1];
- BusyIndicator.showWhile(display, new Runnable() {
-
- public void run() {
- try {
- ret[0] = cproject.getBinaryContainer().getBinaries();
- } catch (CModelException e) {
- LaunchUIPlugin.errorDialog("Launch UI internal error", e); //$NON-NLS-1$
- }
- }
- });
-
- return (IBinary[])ret[0];
- }
-
- /**
- * 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();
- ICProject project = chooseCProject();
- 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) {
- fProgText.setText(bins[0].getResource().getProjectRelativePath().toOSString());
- }
-
- }
- }
-
- /**
- * 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.getString("CMainTab.Project_Selection")); //$NON-NLS-1$
- dialog.setMessage(LaunchMessages.getString("CMainTab.Choose_project_to_constrain_search_for_program")); //$NON-NLS-1$
- dialog.setElements(projects);
-
- ICProject cProject = getCProject();
- if (cProject != null) {
- dialog.setInitialSelections(new Object[]{cProject});
- }
- if (dialog.open() == Window.OK) {
- return (ICProject)dialog.getFirstResult();
- }
- } catch (CModelException e) {
- LaunchUIPlugin.errorDialog("Launch UI internal error", e); //$NON-NLS-1$
- }
- return null;
- }
-
- /**
- * Return an array a ICProject whose platform match that of the runtime env.
- */
- protected ICProject[] getCProjects() throws CModelException {
- ICProject cproject[] = CoreModel.getDefault().getCModel().getCProjects();
- List list = new ArrayList(cproject.length);
-
- for (int i = 0; i < cproject.length; i++) {
- ICDescriptor cdesciptor = null;
- try {
- cdesciptor = CCorePlugin.getDefault().getCProjectDescription((IProject)cproject[i].getResource(), false);
- if (cdesciptor != null) {
- String projectPlatform = cdesciptor.getPlatform();
- if (filterPlatform.equals("*") //$NON-NLS-1$
- || projectPlatform.equals("*") //$NON-NLS-1$
- || filterPlatform.equalsIgnoreCase(projectPlatform) == true) {
- list.add(cproject[i]);
- }
- } else {
- list.add(cproject[i]);
- }
- } catch (CoreException e) {
- list.add(cproject[i]);
- }
- }
- return list.toArray(new ICProject[list.size()]);
- }
-
- /**
- * 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();
- if (projectName.length() < 1) {
- return null;
- }
- return CoreModel.getDefault().getCModel().getCProject(projectName);
- }
-
/*
* (non-Javadoc)
*
@@ -937,26 +527,6 @@ public class CMainTab extends CLaunchConfigurationTab {
return true;
}
- /**
- * @param project
- * @param exePath
- * @return
- * @throws CoreException
- */
- protected boolean isBinary(IProject project, IPath exePath) throws CoreException {
- try {
- Boolean binValue = fBinaryExeCache.get(exePath);
- if (binValue == null)
- {
- IBinaryObject exe = LaunchUtils.getBinary(project, exePath);
- binValue = exe != null;
- fBinaryExeCache.put(exePath, binValue);
- }
- return binValue;
- } catch (ClassCastException e) {
- }
- return false;
- }
/*
* (non-Javadoc)
*
@@ -1073,7 +643,6 @@ public class CMainTab extends CLaunchConfigurationTab {
return TAB_ID;
}
-
/*
* (non-Javadoc)
*
@@ -1093,13 +662,4 @@ public class CMainTab extends CLaunchConfigurationTab {
return LaunchImages.get(LaunchImages.IMG_VIEW_MAIN_TAB);
}
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#updateLaunchConfigurationDialog()
- */
- @Override
- protected void updateLaunchConfigurationDialog() {
- super.updateLaunchConfigurationDialog();
- }
}