1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-24 01:15:29 +02:00

[273833] Add a text box to specify the core file to the CDI Postmortem launch. This aligns both DSF-GDB and CDI-GDB Portmortem launches.

This commit is contained in:
Marc Khouzam 2009-04-29 20:14:41 +00:00
parent ec8730ff11
commit da50919f62
6 changed files with 131 additions and 7 deletions

View file

@ -89,7 +89,7 @@ CMainTab.Core_does_not_exist=Core file does not exist
CMainTab.Main=Main
CMainTab.&ProjectColon=&Project:
CMainTab.C/C++_Application=C/C++ Application:
CMainTab.CoreFile_path=Core file (leave blank to trigger prompt:)
CMainTab.CoreFile_path=Core file (leave blank to trigger prompt):
CMainTab.Search...=Searc&h Project...
CMainTab.Choose_program_to_run=Choose a &program to run:
CMainTab.Choose_program_to_run_from_NAME=Choose a program to run from {0}:

View file

@ -159,7 +159,7 @@
id="org.eclipse.cdt.cdi.launch.postmortemLaunch.mainTab"
group="org.eclipse.cdt.launch.postmortemLaunchTabGroup"
name="%MainLaunchTab.name"
class="org.eclipse.cdt.launch.ui.CMainAttachTab">
class="org.eclipse.cdt.launch.ui.CMainCoreTab">
<associatedDelegate delegate="org.eclipse.cdt.cdi.launch.coreFileCLaunch"/>
</tab>
<tab

View file

@ -272,7 +272,7 @@ public class LocalCDILaunchDelegate extends AbstractCLaunchDelegate {
ILaunchConfigurationWorkingCopy wc = null;
ICDebugConfiguration debugConfig = getDebugConfig( config );
String path = config.getAttribute( ICDTLaunchConfigurationConstants.ATTR_COREFILE_PATH, (String)null );
if ( path == null ) {
if ( path == null || path.length() == 0) {
ICProject project = verifyCProject( config );
IPath corefile = promptForCoreFilePath( (IProject)project.getResource(), debugConfig );
if ( corefile == null ) {
@ -323,8 +323,6 @@ public class LocalCDILaunchDelegate extends AbstractCLaunchDelegate {
throw e;
}
finally {
if ( wc != null )
wc.setAttribute( ICDTLaunchConfigurationConstants.ATTR_COREFILE_PATH, (String)null );
monitor.done();
}
}

View file

@ -71,9 +71,11 @@ CMainTab.Project_not_specified=Project not specified
CMainTab.Program_not_specified=Program not specified
CMainTab.Project_must_be_opened=Project must be opened
CMainTab.Program_does_not_exist=Program does not exist
CMainTab.Core_does_not_exist=Core file does not exist
CMainTab.Main=Main
CMainTab.&ProjectColon=&Project:
CMainTab.C/C++_Application=C/C++ Application:
CMainTab.CoreFile_path=Core file (leave blank to trigger prompt):
CMainTab.Search...=Searc&h Project...
CMainTab.Choose_program_to_run=Choose a &program to run:
CMainTab.Choose_program_to_run_from_NAME=Choose a program to run from {0}:

View file

@ -0,0 +1,21 @@
/*******************************************************************************
* Copyright (c) 2009 Ericsson and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Ericsson - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.launch.ui;
/**
* @since 6.0
*/
public class CMainCoreTab extends CMainTab {
public CMainCoreTab() {
super(CMainTab.SPECIFY_CORE_FILE);
}
}

View file

@ -99,6 +99,15 @@ public class CMainTab extends CLaunchConfigurationTab {
protected Label fProgLabel;
protected Text fProgText;
protected Button fSearchButton;
// Core file UI widgets
/** @since 6.0 */
protected Label fCoreLabel;
/** @since 6.0 */
protected Text fCoreText;
/** @since 6.0 */
protected Button fCoreButton;
/**
* @since 6.0
*/
@ -108,6 +117,7 @@ public class CMainTab extends CLaunchConfigurationTab {
protected Button fTerminalButton;
private final boolean dontCheckProgram;
private final boolean fSpecifyCoreFile;
protected static final String EMPTY_STRING = ""; //$NON-NLS-1$
@ -115,6 +125,9 @@ public class CMainTab extends CLaunchConfigurationTab {
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;
public CMainTab() {
this(WANTS_TERMINAL);
@ -127,6 +140,7 @@ public class CMainTab extends CLaunchConfigurationTab {
public CMainTab(int flags) {
fWantsTerminalOption = (flags & WANTS_TERMINAL) != 0;
dontCheckProgram = (flags & DONT_CHECK_PROGRAM) != 0;
fSpecifyCoreFile = (flags & SPECIFY_CORE_FILE) != 0;
}
/*
@ -148,6 +162,9 @@ public class CMainTab extends CLaunchConfigurationTab {
createBuildConfigCombo(comp, 1);
createExeFileGroup(comp, 1);
createVerticalSpacer(comp, 1);
if (fSpecifyCoreFile) {
createCoreFileGroup(comp, 1);
}
if (wantsTerminalOption() /* && ProcessFactory.supportesTerminal() */) {
createTerminalOption(comp, 1);
}
@ -296,6 +313,45 @@ public class CMainTab extends CLaunchConfigurationTab {
});
}
/** @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;
}
@ -331,6 +387,7 @@ public class CMainTab extends CLaunchConfigurationTab {
filterPlatform = getPlatform(config);
updateProjectFromConfig(config);
updateProgramFromConfig(config);
updateCoreFromConfig(config);
updateTerminalFromConfig(config);
}
@ -369,6 +426,19 @@ public class CMainTab extends CLaunchConfigurationTab {
fProgText.setText(programName);
}
/** @since 6.0 */
protected void updateCoreFromConfig(ILaunchConfiguration config) {
if (fCoreText != null) {
String coreName = EMPTY_STRING;
try {
coreName = config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_COREFILE_PATH, EMPTY_STRING);
} catch (CoreException ce) {
LaunchUIPlugin.log(ce);
}
fCoreText.setText(coreName);
}
}
/*
* (non-Javadoc)
*
@ -389,6 +459,9 @@ public class CMainTab extends CLaunchConfigurationTab {
config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME, fProjText.getText());
config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_BUILD_CONFIG_ID, (String)fBuildConfigCombo.getData(Integer.toString(fBuildConfigCombo.getSelectionIndex())));
config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_PROGRAM_NAME, fProgText.getText());
if (fCoreText != null) {
config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_COREFILE_PATH, fCoreText.getText());
}
if (fTerminalButton != null) {
config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_USE_TERMINAL, fTerminalButton.getSelection());
}
@ -487,6 +560,17 @@ 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.
*/
@ -608,8 +692,7 @@ public class CMainTab extends CLaunchConfigurationTab {
setErrorMessage(null);
setMessage(null);
if (dontCheckProgram)
return true;
if (!dontCheckProgram) {
String name = fProjText.getText().trim();
if (name.length() == 0) {
@ -674,7 +757,25 @@ public class CMainTab extends CLaunchConfigurationTab {
setErrorMessage(e.getLocalizedMessage());
return false;
}
}
if (fCoreText != null) {
String coreName = fCoreText.getText().trim();
// We accept an empty string. This should trigger a prompt to the user
// This allows to re-use the launch, with a different core file.
if (!coreName.equals(EMPTY_STRING)) {
if (coreName.equals(".") || coreName.equals("..")) { //$NON-NLS-1$ //$NON-NLS-2$
setErrorMessage(LaunchMessages.getString("CMainTab.Core_does_not_exist")); //$NON-NLS-1$
return false;
}
IPath corePath = new Path(coreName);
if (!corePath.toFile().exists()) {
setErrorMessage(LaunchMessages.getString("CMainTab.Core_does_not_exist")); //$NON-NLS-1$
return false;
}
}
}
return true;
}
@ -726,6 +827,8 @@ public class CMainTab extends CLaunchConfigurationTab {
// 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;
cElement = getContext(config, getPlatform(config));
if (cElement != null) {