blob: 0be23fdc9aabf010d34becd154c92be5dddf30ed [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007 - 2017 QNX Software Systems 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:
* QNX Software Systems - Initial API and implementation
* Andy Jin - Hardware debugging UI improvements, bug 229946
* Andy Jin - Added DSF debugging, bug 248593
* John Dallaway - Execute run commands before resume, bug 525692
*******************************************************************************/
package org.eclipse.cdt.debug.gdbjtag.ui;
import java.io.File;
import org.eclipse.cdt.debug.core.CDebugUtils;
import org.eclipse.cdt.debug.gdbjtag.core.IGDBJtagConstants;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.variables.VariablesPlugin;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
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.events.VerifyEvent;
import org.eclipse.swt.events.VerifyListener;
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.Composite;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
import org.eclipse.ui.model.WorkbenchContentProvider;
import org.eclipse.ui.model.WorkbenchLabelProvider;
import org.eclipse.ui.views.navigator.ResourceComparator;
public class GDBJtagStartupTab extends AbstractLaunchConfigurationTab {
private static final String TAB_NAME = "Startup";
private static final String TAB_ID = "org.eclipse.cdt.debug.gdbjtag.ui.startuptab";
Text initCommands;
Text delay;
Button doReset;
Button doHalt;
Button loadImage;
Text imageFileName;
Button imageFileBrowseWs;
Button imageFileBrowse;
Text imageOffset;
Button loadSymbols;
Text symbolsFileName;
Button symbolsFileBrowseWs;
Button symbolsFileBrowse;
Text symbolsOffset;
Button setPcRegister;
Text pcRegister;
Button setStopAt;
Text stopAt;
Button setResume;
boolean resume = false;
Text runCommands;
// New GUI added to address bug 310304
private Button useProjectBinaryForImage;
private Button useFileForImage;
private Button useProjectBinaryForSymbols;
private Button useFileForSymbols;
private Label imageOffsetLabel;
private Label symbolsOffsetLabel;
private Label projBinaryLabel1;
private Label projBinaryLabel2;
@Override
public String getName() {
return TAB_NAME;
}
@Override
public Image getImage() {
return GDBJtagImages.getStartupTabImage();
}
@Override
public void createControl(Composite parent) {
ScrolledComposite sc = new ScrolledComposite(parent, SWT.V_SCROLL | SWT.H_SCROLL);
sc.setExpandHorizontal(true);
sc.setExpandVertical(true);
setControl(sc);
Composite comp = new Composite(sc, SWT.NONE);
sc.setContent(comp);
GridLayout layout = new GridLayout();
comp.setLayout(layout);
createInitGroup(comp);
createLoadGroup(comp);
createRunOptionGroup(comp);
createRunGroup(comp);
sc.setMinSize(comp.computeSize(SWT.DEFAULT, SWT.DEFAULT));
}
private void browseButtonSelected(String title, Text text) {
FileDialog dialog = new FileDialog(getShell(), SWT.NONE);
dialog.setText(title);
String str = text.getText().trim();
int lastSeparatorIndex = str.lastIndexOf(File.separator);
if (lastSeparatorIndex != -1)
dialog.setFilterPath(str.substring(0, lastSeparatorIndex));
str = dialog.open();
if (str != null)
text.setText(str);
}
private void browseWsButtonSelected(String title, Text text) {
ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(getShell(), new WorkbenchLabelProvider(), new WorkbenchContentProvider());
dialog.setTitle(title);
dialog.setMessage(Messages.getString("GDBJtagStartupTab.FileBrowseWs_Message"));
dialog.setInput(ResourcesPlugin.getWorkspace().getRoot());
dialog.setComparator(new ResourceComparator(ResourceComparator.NAME));
if (dialog.open() == IDialogConstants.OK_ID) {
IResource resource = (IResource) dialog.getFirstResult();
String arg = resource.getFullPath().toOSString();
String fileLoc = VariablesPlugin.getDefault().getStringVariableManager().generateVariableExpression("workspace_loc", arg); //$NON-NLS-1$
text.setText(fileLoc);
}
}
public void createInitGroup(Composite parent) {
Group group = new Group(parent, SWT.NONE);
GridLayout layout = new GridLayout();
group.setLayout(layout);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
group.setLayoutData(gd);
group.setText(Messages.getString("GDBJtagStartupTab.initGroup_Text"));
Composite comp = new Composite(group, SWT.NONE);
layout = new GridLayout();
layout.numColumns = 2;
layout.marginHeight = 0;
comp.setLayout(layout);
doReset = new Button(comp, SWT.CHECK);
doReset.setText(Messages.getString("GDBJtagStartupTab.doReset_Text"));
doReset.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
doResetChanged();
updateLaunchConfigurationDialog();
}
});
delay = new Text(comp, SWT.BORDER);
gd = new GridData();
gd.horizontalSpan = 1;
gd.widthHint = 60;
delay.setLayoutData(gd);
delay.addVerifyListener(new VerifyListener() {
@Override
public void verifyText(VerifyEvent e) {
e.doit = (Character.isDigit(e.character) || Character.isISOControl(e.character));
}
});
delay.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
scheduleUpdateJob();
}
});
comp = new Composite(group, SWT.NONE);
layout = new GridLayout();
layout.numColumns = 1;
layout.marginHeight = 0;
comp.setLayout(layout);
doHalt = new Button(comp, SWT.CHECK);
doHalt.setText(Messages.getString("GDBJtagStartupTab.doHalt_Text"));
gd = new GridData();
gd.horizontalSpan = 1;
doHalt.setLayoutData(gd);
doHalt.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateLaunchConfigurationDialog();
}
});
initCommands = new Text(group, SWT.MULTI | SWT.WRAP | SWT.BORDER | SWT.V_SCROLL);
gd = new GridData(GridData.FILL_BOTH);
gd.heightHint = 60;
initCommands.setLayoutData(gd);
initCommands.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent evt) {
scheduleUpdateJob();
}
});
}
private void createLoadGroup(Composite parent) {
Group group = new Group(parent, SWT.NONE);
GridLayout layout = new GridLayout();
group.setLayout(layout);
layout.numColumns = 4;
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 1;
group.setLayoutData(gd);
group.setText(Messages.getString("GDBJtagStartupTab.loadGroup_Text"));
loadImage = new Button(group, SWT.CHECK);
loadImage.setText(Messages.getString("GDBJtagStartupTab.loadImage_Text"));
gd = new GridData();
gd.horizontalSpan = 4;
loadImage.setLayoutData(gd);
loadImage.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
loadImageChanged();
updateLaunchConfigurationDialog();
}
});
Composite comp = new Composite(group, SWT.NONE);
layout = new GridLayout();
layout.numColumns = 4;
comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
comp.setLayout(layout);
SelectionListener radioButtonListener = new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
updateLaunchConfigurationDialog();
updateUseFileEnablement();
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
}
};
useProjectBinaryForImage = new Button(comp, SWT.RADIO);
useProjectBinaryForImage.setText(Messages.getString("GDBJtagStartupTab.useProjectBinary_Label"));
useProjectBinaryForImage.setToolTipText(Messages.getString("GDBJtagStartupTab.useProjectBinary_ToolTip"));
gd = new GridData();
gd.horizontalSpan = 1;
useProjectBinaryForImage.setLayoutData(gd);
useProjectBinaryForImage.addSelectionListener(radioButtonListener);
projBinaryLabel1 = new Label(comp, SWT.NONE);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 3;
projBinaryLabel1.setLayoutData(gd);
useFileForImage = new Button(comp, SWT.RADIO);
useFileForImage.setText(Messages.getString("GDBJtagStartupTab.useFile_Label"));
gd = new GridData();
gd.horizontalSpan = 1;
useFileForImage.setLayoutData(gd);
useFileForImage.addSelectionListener(radioButtonListener);
imageFileName = new Text(comp, SWT.BORDER);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 1;
imageFileName.setLayoutData(gd);
imageFileName.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
scheduleUpdateJob();
}
});
imageFileBrowseWs = createPushButton(comp, Messages.getString("GDBJtagStartupTab.FileBrowseWs_Label"), null);
imageFileBrowseWs.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
browseWsButtonSelected(Messages.getString("GDBJtagStartupTab.imageFileBrowseWs_Title"), imageFileName);
}
});
imageFileBrowse = createPushButton(comp, Messages.getString("GDBJtagStartupTab.FileBrowse_Label"), null);
imageFileBrowse.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
browseButtonSelected(Messages.getString("GDBJtagStartupTab.imageFileBrowse_Title"), imageFileName);
}
});
imageOffsetLabel = new Label(comp, SWT.NONE);
imageOffsetLabel.setText(Messages.getString("GDBJtagStartupTab.imageOffsetLabel_Text"));
imageOffset = new Text(comp, SWT.BORDER);
gd = new GridData();
gd.horizontalSpan = 1;
gd.widthHint = 100;
imageOffset.setLayoutData(gd);
imageOffset.addVerifyListener(new VerifyListener() {
@Override
public void verifyText(VerifyEvent e) {
e.doit = (Character.isDigit(e.character) || Character.isISOControl(e.character) || "abcdef".contains(String.valueOf(e.character).toLowerCase()));
}
});
imageOffset.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
scheduleUpdateJob();
}
});
loadSymbols = new Button(group, SWT.CHECK);
loadSymbols.setText(Messages.getString("GDBJtagStartupTab.loadSymbols_Text"));
gd = new GridData();
gd.horizontalSpan = 4;
loadSymbols.setLayoutData(gd);
loadSymbols.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
loadSymbolsChanged();
updateLaunchConfigurationDialog();
}
});
comp = new Composite(group, SWT.NONE);
layout = new GridLayout();
layout.numColumns = 4;
comp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
comp.setLayout(layout);
useProjectBinaryForSymbols = new Button(comp, SWT.RADIO);
useProjectBinaryForSymbols.setText(Messages.getString("GDBJtagStartupTab.useProjectBinary_Label"));
useProjectBinaryForSymbols.setToolTipText(Messages.getString("GDBJtagStartupTab.useProjectBinary_ToolTip"));
gd = new GridData();
gd.horizontalSpan = 1;
useProjectBinaryForSymbols.setLayoutData(gd);
useProjectBinaryForSymbols.addSelectionListener(radioButtonListener);
projBinaryLabel2 = new Label(comp, SWT.NONE);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 3;
projBinaryLabel2.setLayoutData(gd);
useFileForSymbols = new Button(comp, SWT.RADIO);
useFileForSymbols.setText(Messages.getString("GDBJtagStartupTab.useFile_Label"));
gd = new GridData();
gd.horizontalSpan = 1;
useFileForSymbols.setLayoutData(gd);
useFileForSymbols.addSelectionListener(radioButtonListener);
symbolsFileName = new Text(comp, SWT.BORDER);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 1;
symbolsFileName.setLayoutData(gd);
symbolsFileName.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
scheduleUpdateJob();
}
});
symbolsFileBrowseWs = createPushButton(comp, Messages.getString("GDBJtagStartupTab.FileBrowseWs_Label"), null);
symbolsFileBrowseWs.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
browseWsButtonSelected(Messages.getString("GDBJtagStartupTab.symbolsFileBrowseWs_Title"), symbolsFileName);
}
});
symbolsFileBrowse = createPushButton(comp, Messages.getString("GDBJtagStartupTab.FileBrowse_Label"), null);
symbolsFileBrowse.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
browseButtonSelected(Messages.getString("GDBJtagStartupTab.symbolsFileBrowse_Title"), symbolsFileName);
}
});
symbolsOffsetLabel = new Label(comp, SWT.NONE);
symbolsOffsetLabel.setText(Messages.getString("GDBJtagStartupTab.symbolsOffsetLabel_Text"));
symbolsOffset = new Text(comp, SWT.BORDER);
gd = new GridData();
gd.horizontalSpan = 1;
gd.widthHint = 100;
symbolsOffset.setLayoutData(gd);
symbolsOffset.addVerifyListener(new VerifyListener() {
@Override
public void verifyText(VerifyEvent e) {
e.doit = (Character.isDigit(e.character) || Character.isISOControl(e.character) || "abcdef".contains(String.valueOf(e.character).toLowerCase()));
}
});
symbolsOffset.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
scheduleUpdateJob();
}
});
}
private void updateUseFileEnablement() {
boolean enabled = loadImage.getSelection() && useFileForImage.getSelection();
imageFileName.setEnabled(enabled);
imageFileBrowseWs.setEnabled(enabled);
imageFileBrowse.setEnabled(enabled);
enabled = loadSymbols.getSelection() && useFileForSymbols.getSelection();
symbolsFileName.setEnabled(enabled);
symbolsFileBrowseWs.setEnabled(enabled);
symbolsFileBrowse.setEnabled(enabled);
}
/** Implementation migrated to {@link #createRunGroup(Composite)} */
@Deprecated
public void createRunOptionGroup(Composite parent) {
}
public void createRunGroup(Composite parent) {
Group group = new Group(parent, SWT.NONE);
GridLayout layout = new GridLayout();
group.setLayout(layout);
layout.numColumns = 2;
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 1;
group.setLayoutData(gd);
group.setText(Messages.getString("GDBJtagStartupTab.runGroup_Text"));
setPcRegister = new Button(group, SWT.CHECK);
setPcRegister.setText(Messages.getString("GDBJtagStartupTab.setPcRegister_Text"));
gd = new GridData();
gd.horizontalSpan = 1;
setPcRegister.setLayoutData(gd);
setPcRegister.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
pcRegisterChanged();
updateLaunchConfigurationDialog();
}
});
pcRegister = new Text(group, SWT.BORDER);
gd = new GridData();
gd.horizontalSpan = 1;
gd.widthHint = 100;
pcRegister.setLayoutData(gd);
pcRegister.addVerifyListener(new VerifyListener() {
@Override
public void verifyText(VerifyEvent e) {
e.doit = (Character.isDigit(e.character) || Character.isISOControl(e.character) || "abcdef".contains(String.valueOf(e.character).toLowerCase()));
}
});
pcRegister.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
scheduleUpdateJob();
}
});
setStopAt = new Button(group, SWT.CHECK);
setStopAt.setText(Messages.getString("GDBJtagStartupTab.setStopAt_Text"));
gd = new GridData();
gd.horizontalSpan = 1;
setStopAt.setLayoutData(gd);
setStopAt.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
stopAtChanged();
updateLaunchConfigurationDialog();
}
});
stopAt = new Text(group, SWT.BORDER);
gd = new GridData();
gd.horizontalSpan = 1;
gd.widthHint = 100;
stopAt.setLayoutData(gd);
stopAt.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
scheduleUpdateJob();
}
});
runCommands = new Text(group, SWT.MULTI | SWT.WRAP | SWT.BORDER | SWT.V_SCROLL);
gd = new GridData(GridData.FILL_BOTH);
gd.horizontalSpan = 2;
gd.heightHint = 60;
runCommands.setLayoutData(gd);
runCommands.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent evt) {
scheduleUpdateJob();
}
});
setResume = new Button(group, SWT.CHECK);
setResume.setText(Messages.getString("GDBJtagStartupTab.setResume_Text"));
gd = new GridData();
gd.horizontalSpan = 1;
setResume.setLayoutData(gd);
setResume.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
resumeChanged();
updateLaunchConfigurationDialog();
}
});
}
private void doResetChanged() {
delay.setEnabled(doReset.getSelection());
}
private void loadImageChanged() {
boolean enabled = loadImage.getSelection();
useProjectBinaryForImage.setEnabled(enabled);
useFileForImage.setEnabled(enabled);
imageOffset.setEnabled(enabled);
imageOffsetLabel.setEnabled(enabled);
updateUseFileEnablement();
}
private void loadSymbolsChanged() {
boolean enabled = loadSymbols.getSelection();
useProjectBinaryForSymbols.setEnabled(enabled);
useFileForSymbols.setEnabled(enabled);
symbolsOffset.setEnabled(enabled);
symbolsOffsetLabel.setEnabled(enabled);
updateUseFileEnablement();
}
private void pcRegisterChanged() {
pcRegister.setEnabled(setPcRegister.getSelection());
}
private void stopAtChanged() {
stopAt.setEnabled(setStopAt.getSelection());
}
private void resumeChanged() {
resume = setResume.getSelection();
}
/* (non-Javadoc)
* @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#isValid(org.eclipse.debug.core.ILaunchConfiguration)
*/
@Override
public boolean isValid(ILaunchConfiguration launchConfig) {
if (!super.isValid(launchConfig))
return false;
setErrorMessage(null);
setMessage(null);
if (loadImage.getSelection()) {
if (!useProjectBinaryForImage.getSelection()) {
if (imageFileName.getText().trim().length() == 0) {
setErrorMessage(Messages.getString("GDBJtagStartupTab.imageFileName_not_specified"));
return false;
}
try {
String path = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(imageFileName.getText().trim());
IPath filePath = new Path(path);
if (!filePath.toFile().exists()) {
setErrorMessage(Messages.getString("GDBJtagStartupTab.imageFileName_does_not_exist"));
return false;
}
} catch (CoreException e) { // string substitution throws this if expression doesn't resolve
setErrorMessage(Messages.getString("GDBJtagStartupTab.imageFileName_does_not_exist"));
return false;
}
}
} else {
setErrorMessage(null);
}
if (loadSymbols.getSelection()) {
if (!useProjectBinaryForSymbols.getSelection()) {
if (symbolsFileName.getText().trim().length() == 0) {
setErrorMessage(Messages.getString("GDBJtagStartupTab.symbolsFileName_not_specified"));
return false;
}
try {
String path = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(symbolsFileName.getText().trim());
IPath filePath = new Path(path);
if (!filePath.toFile().exists()) {
setErrorMessage(Messages.getString("GDBJtagStartupTab.symbolsFileName_does_not_exist"));
return false;
}
} catch (CoreException e) { // string substitution throws this if expression doesn't resolve
setErrorMessage(Messages.getString("GDBJtagStartupTab.symbolsFileName_does_not_exist"));
return false;
}
}
} else {
setErrorMessage(null);
}
if (setPcRegister.getSelection()) {
if (pcRegister.getText().trim().length() == 0) {
setErrorMessage(Messages.getString("GDBJtagStartupTab.pcRegister_not_specified"));
return false;
}
} else {
setErrorMessage(null);
}
if (setStopAt.getSelection()) {
if (stopAt.getText().trim().length() == 0) {
setErrorMessage(Messages.getString("GDBJtagStartupTab.stopAt_not_specified"));
}
} else {
setErrorMessage(null);
}
return true;
}
/* (non-Javadoc)
* @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#getId()
*/
@Override
public String getId() {
return TAB_ID;
}
/* (non-Javadoc)
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#initializeFrom(org.eclipse.debug.core.ILaunchConfiguration)
*/
@Override
public void initializeFrom(ILaunchConfiguration configuration) {
try {
// Initialization Commands
doReset.setSelection(configuration.getAttribute(IGDBJtagConstants.ATTR_DO_RESET, IGDBJtagConstants.DEFAULT_DO_RESET));
delay.setText(String.valueOf(configuration.getAttribute(IGDBJtagConstants.ATTR_DELAY, IGDBJtagConstants.DEFAULT_DELAY)));
doHalt.setSelection(configuration.getAttribute(IGDBJtagConstants.ATTR_DO_HALT, IGDBJtagConstants.DEFAULT_DO_HALT));
initCommands.setText(configuration.getAttribute(IGDBJtagConstants.ATTR_INIT_COMMANDS, IGDBJtagConstants.DEFAULT_INIT_COMMANDS));
// Load Image...
loadImage.setSelection(configuration.getAttribute(IGDBJtagConstants.ATTR_LOAD_IMAGE, IGDBJtagConstants.DEFAULT_LOAD_IMAGE));
useProjectBinaryForImage.setSelection(configuration.getAttribute(IGDBJtagConstants.ATTR_USE_PROJ_BINARY_FOR_IMAGE, IGDBJtagConstants.DEFAULT_USE_PROJ_BINARY_FOR_IMAGE));
useFileForImage.setSelection(configuration.getAttribute(IGDBJtagConstants.ATTR_USE_FILE_FOR_IMAGE, IGDBJtagConstants.DEFAULT_USE_FILE_FOR_IMAGE));
imageFileName.setText(configuration.getAttribute(IGDBJtagConstants.ATTR_IMAGE_FILE_NAME, IGDBJtagConstants.DEFAULT_IMAGE_FILE_NAME));
imageOffset.setText(configuration.getAttribute(IGDBJtagConstants.ATTR_IMAGE_OFFSET, IGDBJtagConstants.DEFAULT_IMAGE_OFFSET));
//.. and Symbols
loadSymbols.setSelection(configuration.getAttribute(IGDBJtagConstants.ATTR_LOAD_SYMBOLS, IGDBJtagConstants.DEFAULT_LOAD_SYMBOLS));
useProjectBinaryForSymbols.setSelection(configuration.getAttribute(IGDBJtagConstants.ATTR_USE_PROJ_BINARY_FOR_SYMBOLS, IGDBJtagConstants.DEFAULT_USE_PROJ_BINARY_FOR_SYMBOLS));
useFileForSymbols.setSelection(configuration.getAttribute(IGDBJtagConstants.ATTR_USE_FILE_FOR_SYMBOLS, IGDBJtagConstants.DEFAULT_USE_FILE_FOR_SYMBOLS));
symbolsFileName.setText(configuration.getAttribute(IGDBJtagConstants.ATTR_SYMBOLS_FILE_NAME, IGDBJtagConstants.DEFAULT_SYMBOLS_FILE_NAME));
symbolsOffset.setText(configuration.getAttribute(IGDBJtagConstants.ATTR_SYMBOLS_OFFSET, IGDBJtagConstants.DEFAULT_SYMBOLS_OFFSET));
// Runtime Options
setPcRegister.setSelection(configuration.getAttribute(IGDBJtagConstants.ATTR_SET_PC_REGISTER, IGDBJtagConstants.DEFAULT_SET_PC_REGISTER));
pcRegister.setText(configuration.getAttribute(IGDBJtagConstants.ATTR_PC_REGISTER, IGDBJtagConstants.DEFAULT_PC_REGISTER));
setStopAt.setSelection(configuration.getAttribute(IGDBJtagConstants.ATTR_SET_STOP_AT, IGDBJtagConstants.DEFAULT_SET_STOP_AT));
stopAt.setText(configuration.getAttribute(IGDBJtagConstants.ATTR_STOP_AT, IGDBJtagConstants.DEFAULT_STOP_AT));
setResume.setSelection(configuration.getAttribute(IGDBJtagConstants.ATTR_SET_RESUME, IGDBJtagConstants.DEFAULT_SET_RESUME));
// Run Commands
runCommands.setText(configuration.getAttribute(IGDBJtagConstants.ATTR_RUN_COMMANDS, IGDBJtagConstants.DEFAULT_RUN_COMMANDS));
String programName = CDebugUtils.getProgramName(configuration);
if (programName != null) {
int lastSlash = programName.indexOf('\\');
if (lastSlash >= 0) {
programName = programName.substring(lastSlash + 1);
}
lastSlash = programName.indexOf('/');
if (lastSlash >= 0) {
programName = programName.substring(lastSlash + 1);
}
projBinaryLabel1.setText(programName);
projBinaryLabel2.setText(programName);
}
doResetChanged();
loadImageChanged();
loadSymbolsChanged();
pcRegisterChanged();
stopAtChanged();
resumeChanged();
updateUseFileEnablement();
} catch (CoreException e) {
Activator.getDefault().getLog().log(e.getStatus());
}
}
/* (non-Javadoc)
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy)
*/
@Override
public void performApply(ILaunchConfigurationWorkingCopy configuration) {
// Initialization Commands
configuration.setAttribute(IGDBJtagConstants.ATTR_DO_RESET, doReset.getSelection());
try {
configuration.setAttribute(IGDBJtagConstants.ATTR_DELAY, Integer.parseInt(delay.getText()));
} catch(NumberFormatException e) {
Activator.log(e);
}
configuration.setAttribute(IGDBJtagConstants.ATTR_DO_HALT, doHalt.getSelection());
configuration.setAttribute(IGDBJtagConstants.ATTR_INIT_COMMANDS, initCommands.getText());
// Load Image...
configuration.setAttribute(IGDBJtagConstants.ATTR_LOAD_IMAGE, loadImage.getSelection());
configuration.setAttribute(IGDBJtagConstants.ATTR_USE_PROJ_BINARY_FOR_IMAGE, useProjectBinaryForImage.getSelection());
configuration.setAttribute(IGDBJtagConstants.ATTR_USE_FILE_FOR_IMAGE, useFileForImage.getSelection());
configuration.setAttribute(IGDBJtagConstants.ATTR_IMAGE_FILE_NAME, imageFileName.getText().trim());
configuration.setAttribute(IGDBJtagConstants.ATTR_IMAGE_OFFSET, imageOffset.getText());
//.. and Symbols
configuration.setAttribute(IGDBJtagConstants.ATTR_LOAD_SYMBOLS, loadSymbols.getSelection());
configuration.setAttribute(IGDBJtagConstants.ATTR_USE_PROJ_BINARY_FOR_SYMBOLS, useProjectBinaryForSymbols.getSelection());
configuration.setAttribute(IGDBJtagConstants.ATTR_USE_FILE_FOR_SYMBOLS, useFileForSymbols.getSelection());
configuration.setAttribute(IGDBJtagConstants.ATTR_SYMBOLS_FILE_NAME, symbolsFileName.getText().trim());
configuration.setAttribute(IGDBJtagConstants.ATTR_SYMBOLS_OFFSET, symbolsOffset.getText());
// Runtime Options
configuration.setAttribute(IGDBJtagConstants.ATTR_SET_PC_REGISTER, setPcRegister.getSelection());
configuration.setAttribute(IGDBJtagConstants.ATTR_PC_REGISTER, pcRegister.getText());
configuration.setAttribute(IGDBJtagConstants.ATTR_SET_STOP_AT, setStopAt.getSelection());
configuration.setAttribute(IGDBJtagConstants.ATTR_STOP_AT, stopAt.getText());
configuration.setAttribute(IGDBJtagConstants.ATTR_SET_RESUME, setResume.getSelection());
// Run Commands
configuration.setAttribute(IGDBJtagConstants.ATTR_RUN_COMMANDS, runCommands.getText());
}
/* (non-Javadoc)
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#setDefaults(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy)
*/
@Override
public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
// Initialization Commands
configuration.setAttribute(IGDBJtagConstants.ATTR_DO_RESET, IGDBJtagConstants.DEFAULT_DO_RESET);
configuration.setAttribute(IGDBJtagConstants.ATTR_DELAY, IGDBJtagConstants.DEFAULT_DELAY);
configuration.setAttribute(IGDBJtagConstants.ATTR_DO_HALT, IGDBJtagConstants.DEFAULT_DO_HALT);
configuration.setAttribute(IGDBJtagConstants.ATTR_INIT_COMMANDS, IGDBJtagConstants.DEFAULT_INIT_COMMANDS);
// Load Image...
configuration.setAttribute(IGDBJtagConstants.ATTR_LOAD_IMAGE, IGDBJtagConstants.DEFAULT_LOAD_IMAGE);
configuration.setAttribute(IGDBJtagConstants.ATTR_USE_PROJ_BINARY_FOR_IMAGE, IGDBJtagConstants.DEFAULT_USE_PROJ_BINARY_FOR_IMAGE);
configuration.setAttribute(IGDBJtagConstants.ATTR_USE_FILE_FOR_IMAGE, IGDBJtagConstants.DEFAULT_USE_FILE_FOR_IMAGE);
configuration.setAttribute(IGDBJtagConstants.ATTR_IMAGE_FILE_NAME, IGDBJtagConstants.DEFAULT_IMAGE_FILE_NAME);
configuration.setAttribute(IGDBJtagConstants.ATTR_IMAGE_OFFSET, IGDBJtagConstants.DEFAULT_IMAGE_OFFSET);
//.. and Symbols
configuration.setAttribute(IGDBJtagConstants.ATTR_LOAD_SYMBOLS, IGDBJtagConstants.DEFAULT_LOAD_SYMBOLS);
configuration.setAttribute(IGDBJtagConstants.ATTR_USE_PROJ_BINARY_FOR_SYMBOLS, IGDBJtagConstants.DEFAULT_USE_PROJ_BINARY_FOR_SYMBOLS);
configuration.setAttribute(IGDBJtagConstants.ATTR_USE_FILE_FOR_SYMBOLS, IGDBJtagConstants.DEFAULT_USE_FILE_FOR_SYMBOLS);
configuration.setAttribute(IGDBJtagConstants.ATTR_SYMBOLS_FILE_NAME, IGDBJtagConstants.DEFAULT_SYMBOLS_FILE_NAME);
configuration.setAttribute(IGDBJtagConstants.ATTR_SYMBOLS_OFFSET, IGDBJtagConstants.DEFAULT_SYMBOLS_OFFSET);
// Runtime Options
configuration.setAttribute(IGDBJtagConstants.ATTR_SET_PC_REGISTER, IGDBJtagConstants.DEFAULT_SET_PC_REGISTER);
configuration.setAttribute(IGDBJtagConstants.ATTR_PC_REGISTER, IGDBJtagConstants.DEFAULT_PC_REGISTER);
configuration.setAttribute(IGDBJtagConstants.ATTR_SET_STOP_AT, IGDBJtagConstants.DEFAULT_SET_STOP_AT);
configuration.setAttribute(IGDBJtagConstants.ATTR_STOP_AT, IGDBJtagConstants.DEFAULT_STOP_AT);
configuration.setAttribute(IGDBJtagConstants.ATTR_SET_RESUME, IGDBJtagConstants.DEFAULT_SET_RESUME);
// Run Commands
configuration.setAttribute(IGDBJtagConstants.ATTR_RUN_COMMANDS, IGDBJtagConstants.DEFAULT_RUN_COMMANDS);
}
}