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

Final touches on launch configuration tabs.

This commit is contained in:
Doug Schaefer 2007-04-17 15:57:57 +00:00
parent 45be116add
commit f3a9d178e5
2 changed files with 195 additions and 55 deletions

View file

@ -11,6 +11,8 @@
package org.eclipse.cdt.debug.gdbjtag.ui;
import java.io.File;
import org.eclipse.cdt.debug.gdbjtag.core.GDBJtagConstants;
import org.eclipse.cdt.debug.mi.core.IMILaunchConfigurationConstants;
import org.eclipse.cdt.debug.mi.core.MIPlugin;
@ -20,8 +22,11 @@ import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
import org.eclipse.debug.ui.StringVariableSelectionDialog;
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.VerifyEvent;
@ -32,6 +37,7 @@ 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.FileDialog;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
@ -49,9 +55,7 @@ public class GDBJtagDebuggerTab extends AbstractLaunchConfigurationTab {
private Combo commandFactory;
private Combo miProtocol;
private Button verboseMode;
private Button useRemote;
private Composite remoteTarget;
private Text ipAddress;
private Text portNumber;
@ -83,14 +87,32 @@ public class GDBJtagDebuggerTab extends AbstractLaunchConfigurationTab {
createCommandControl(group);
createInitFileControl(group);
createCommandSetControl(group);
createCommandFactoryControl(group);
createProtocolControl(group);
createVerboseModeControl(group);
createRemoteControl(comp);
}
public void createCommandControl(Composite parent) {
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 variablesButtonSelected(Text text) {
StringVariableSelectionDialog dialog = new StringVariableSelectionDialog(getShell());
dialog.open();
text.append(dialog.getVariableExpression());
}
private void createCommandControl(Composite parent) {
Composite comp = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.numColumns = 3;
@ -108,14 +130,30 @@ public class GDBJtagDebuggerTab extends AbstractLaunchConfigurationTab {
gdbCommand = new Text(comp, SWT.SINGLE | SWT.BORDER);
gd = new GridData(GridData.FILL_HORIZONTAL);
gdbCommand.setLayoutData(gd);
gdbCommand.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
updateLaunchConfigurationDialog();
}
});
Button button = new Button(comp, SWT.NONE);
button.setText("Browse...");
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
browseButtonSelected("Select gdb", gdbCommand);
}
});
button = new Button(comp, SWT.NONE);
button.setText("Variables...");
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
variablesButtonSelected(gdbCommand);
}
});
}
public void createInitFileControl(Composite parent) {
private void createInitFileControl(Composite parent) {
Composite comp = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.numColumns = 3;
@ -133,14 +171,30 @@ public class GDBJtagDebuggerTab extends AbstractLaunchConfigurationTab {
gdbinitFile = new Text(comp, SWT.SINGLE | SWT.BORDER);
gd = new GridData(GridData.FILL_HORIZONTAL);
gdbinitFile.setLayoutData(gd);
gdbinitFile.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
updateLaunchConfigurationDialog();
}
});
Button button = new Button(comp, SWT.NONE);
button.setText("Browse...");
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
browseButtonSelected("Select .gdbinit file", gdbinitFile);
}
});
button = new Button(comp, SWT.NONE);
button.setText("Workspace...");
button.setText("Variables...");
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
variablesButtonSelected(gdbinitFile);
}
});
}
public void createCommandSetControl(Composite parent) {
private void createCommandFactoryControl(Composite parent) {
Composite comp = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout(2, false);
comp.setLayout(layout);
@ -155,9 +209,16 @@ public class GDBJtagDebuggerTab extends AbstractLaunchConfigurationTab {
for (int i = 0; i < cfDescs.length; ++i) {
commandFactory.add(cfDescs[i].getName());
}
commandFactory.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
commandFactoryChanged();
updateLaunchConfigurationDialog();
}
});
}
public void createProtocolControl(Composite parent) {
private void createProtocolControl(Composite parent) {
Composite comp = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout(2, false);
comp.setLayout(layout);
@ -165,26 +226,40 @@ public class GDBJtagDebuggerTab extends AbstractLaunchConfigurationTab {
label.setText("Protocol Version:");
miProtocol = new Combo(comp, SWT.READ_ONLY | SWT.DROP_DOWN);
miProtocol.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
updateLaunchConfigurationDialog();
}
});
}
private void commandSetChanged() {
private void commandFactoryChanged() {
int currsel = miProtocol.getSelectionIndex();
String currProt = miProtocol.getItem(currsel);
String currProt = null;
if (currsel >= 0)
currProt = miProtocol.getItem(currsel);
miProtocol.removeAll();
int cfsel = commandFactory.getSelectionIndex();
if (cfsel >= 0) {
String[] protocols = cfDescs[cfsel].getMIVersions();
for (int i = 0; i < protocols.length; ++i) {
miProtocol.add(protocols[i]);
if (protocols[i].equals(currProt))
if (currProt != null && protocols[i].equals(currProt))
miProtocol.select(i);
}
}
if (miProtocol.getSelectionIndex() < 0 && miProtocol.getItemCount() > 0)
miProtocol.select(0);
}
public void createVerboseModeControl(Composite parent) {
private void createVerboseModeControl(Composite parent) {
verboseMode = new Button(parent, SWT.CHECK);
verboseMode.setText("Verbose console mode");
verboseMode.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
updateLaunchConfigurationDialog();
}
});
}
private void createRemoteControl(Composite parent) {
@ -200,32 +275,43 @@ public class GDBJtagDebuggerTab extends AbstractLaunchConfigurationTab {
useRemote.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
useRemoteChanged();
updateLaunchConfigurationDialog();
}
});
remoteTarget = new Composite(group, SWT.NONE);
Composite comp = new Composite(group, SWT.NONE);
layout = new GridLayout();
layout.numColumns = 2;
remoteTarget.setLayout(layout);
comp.setLayout(layout);
Label label = new Label(remoteTarget, SWT.NONE);
Label label = new Label(comp, SWT.NONE);
label.setText("Host name or IP address:");
ipAddress = new Text(remoteTarget, SWT.BORDER);
ipAddress = new Text(comp, SWT.BORDER);
gd = new GridData();
gd.widthHint = 100;
ipAddress.setLayoutData(gd);
ipAddress.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
updateLaunchConfigurationDialog();
}
});
label = new Label(remoteTarget, SWT.NONE);
label = new Label(comp, SWT.NONE);
label.setText("Port number:");
portNumber = new Text(remoteTarget, SWT.BORDER);
portNumber = new Text(comp, SWT.BORDER);
gd = new GridData();
gd.widthHint = 100;
portNumber.setLayoutData(gd);
portNumber.addVerifyListener(new VerifyListener() {
public void verifyText(VerifyEvent e) {
e.doit = Character.isDigit(e.character) || Character.isISOControl(e.character);
}
});
gd = new GridData();
gd.widthHint = 100;
portNumber.setLayoutData(gd);
portNumber.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
updateLaunchConfigurationDialog();
}
});
}
private void useRemoteChanged() {
@ -236,41 +322,63 @@ public class GDBJtagDebuggerTab extends AbstractLaunchConfigurationTab {
public void initializeFrom(ILaunchConfiguration configuration) {
try {
gdbCommand.setText(configuration.getAttribute(IMILaunchConfigurationConstants.ATTR_DEBUG_NAME, IMILaunchConfigurationConstants.DEBUGGER_DEBUG_NAME_DEFAULT));
gdbinitFile.setText(configuration.getAttribute(IMILaunchConfigurationConstants.ATTR_GDB_INIT, IMILaunchConfigurationConstants.DEBUGGER_GDB_INIT_DEFAULT));
String gdbCommandAttr = configuration.getAttribute(IMILaunchConfigurationConstants.ATTR_DEBUG_NAME, IMILaunchConfigurationConstants.DEBUGGER_DEBUG_NAME_DEFAULT);
gdbCommand.setText(gdbCommandAttr);
String gdbinitFileAttr = configuration.getAttribute(IMILaunchConfigurationConstants.ATTR_GDB_INIT, IMILaunchConfigurationConstants.DEBUGGER_GDB_INIT_DEFAULT);
gdbinitFile.setText(gdbinitFileAttr);
CommandFactoryManager cfManager = MIPlugin.getDefault().getCommandFactoryManager();
CommandFactoryDescriptor defDesc = cfManager.getDefaultDescriptor(GDBJtagConstants.DEBUGGER_ID);
String cfname = configuration.getAttribute(IMILaunchConfigurationConstants.ATTR_DEBUGGER_COMMAND_FACTORY, defDesc.getName());
String commandFactoryAttr = configuration.getAttribute(IMILaunchConfigurationConstants.ATTR_DEBUGGER_COMMAND_FACTORY, defDesc.getName());
int cfid = 0;
for (int i = 0; i < cfDescs.length; ++i)
if (cfDescs[i].getName().equals(cfname)) {
if (cfDescs[i].getName().equals(commandFactoryAttr)) {
cfid = i;
break;
}
commandFactory.select(cfid);
commandFactory.select(cfid); // populates protocol list too
String protname = configuration.getAttribute(IMILaunchConfigurationConstants.ATTR_DEBUGGER_PROTOCOL, defDesc.getMIVersions()[0]);
miProtocol.removeAll();
String[] protocols = cfDescs[cfid].getMIVersions();
for (int i = 0; i < protocols.length; ++i) {
miProtocol.add(protocols[i]);
if (protocols[i].equals(protname))
String miProtocolAttr = configuration.getAttribute(IMILaunchConfigurationConstants.ATTR_DEBUGGER_PROTOCOL, defDesc.getMIVersions()[0]);
int n = miProtocol.getItemCount();
for (int i = 0; i < n; ++i) {
if (miProtocol.getItem(i).equals(miProtocolAttr))
miProtocol.select(i);
}
verboseMode.setSelection(configuration.getAttribute(IMILaunchConfigurationConstants.ATTR_DEBUGGER_VERBOSE_MODE, IMILaunchConfigurationConstants.DEBUGGER_VERBOSE_MODE_DEFAULT));
boolean verboseModeAttr = configuration.getAttribute(IMILaunchConfigurationConstants.ATTR_DEBUGGER_VERBOSE_MODE, IMILaunchConfigurationConstants.DEBUGGER_VERBOSE_MODE_DEFAULT);
verboseMode.setSelection(verboseModeAttr);
useRemote.setSelection(configuration.getAttribute(GDBJtagConstants.ATTR_USE_REMOTE_TARGET, GDBJtagConstants.DEFAULT_USE_REMOTE_TARGET));
ipAddress.setText(configuration.getAttribute(GDBJtagConstants.ATTR_IP_ADDRESS, GDBJtagConstants.DEFAULT_IP_ADDRESS));
portNumber.setText(String.valueOf(configuration.getAttribute(GDBJtagConstants.ATTR_PORT_NUMBER, GDBJtagConstants.DEFAULT_PORT_NUMBER)));
boolean useRemoteAttr = configuration.getAttribute(GDBJtagConstants.ATTR_USE_REMOTE_TARGET, GDBJtagConstants.DEFAULT_USE_REMOTE_TARGET);
useRemote.setSelection(useRemoteAttr);
useRemoteChanged();
String ipAddressAttr = configuration.getAttribute(GDBJtagConstants.ATTR_IP_ADDRESS, GDBJtagConstants.DEFAULT_IP_ADDRESS);
ipAddress.setText(ipAddressAttr);
int portNumberAttr = configuration.getAttribute(GDBJtagConstants.ATTR_PORT_NUMBER, GDBJtagConstants.DEFAULT_PORT_NUMBER);
portNumber.setText(String.valueOf(portNumberAttr));
} catch (CoreException e) {
Activator.getDefault().getLog().log(e.getStatus());
}
}
public void performApply(ILaunchConfigurationWorkingCopy configuration) {
configuration.setAttribute(IMILaunchConfigurationConstants.ATTR_DEBUG_NAME, gdbCommand.getText().trim());
configuration.setAttribute(IMILaunchConfigurationConstants.ATTR_GDB_INIT, gdbinitFile.getText().trim());
configuration.setAttribute(IMILaunchConfigurationConstants.ATTR_DEBUGGER_COMMAND_FACTORY, commandFactory.getText());
configuration.setAttribute(IMILaunchConfigurationConstants.ATTR_DEBUGGER_PROTOCOL, miProtocol.getText());
configuration.setAttribute(IMILaunchConfigurationConstants.ATTR_DEBUGGER_VERBOSE_MODE, verboseMode.getSelection());
configuration.setAttribute(GDBJtagConstants.ATTR_USE_REMOTE_TARGET, useRemote.getSelection());
configuration.setAttribute(GDBJtagConstants.ATTR_IP_ADDRESS, ipAddress.getText().trim());
try {
configuration.setAttribute(GDBJtagConstants.ATTR_PORT_NUMBER, Integer.parseInt(portNumber.getText().trim()));
} catch (NumberFormatException e) {
configuration.setAttribute(GDBJtagConstants.ATTR_PORT_NUMBER, 0);
}
}
public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {

View file

@ -11,6 +11,8 @@
package org.eclipse.cdt.debug.gdbjtag.ui;
import java.io.File;
import org.eclipse.cdt.debug.gdbjtag.core.GDBJtagConstants;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfiguration;
@ -28,6 +30,7 @@ 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;
@ -42,10 +45,10 @@ public class GDBJtagStartupTab extends AbstractLaunchConfigurationTab {
Button loadImage;
Text imageFileName;
Button imageFileBrowse;
Button imageFileWorkspace;
Button imageFileVariables;
Button defaultRun;
Text runCommands;
Button runVarsButton;
Button runCommandVariables;
public String getName() {
return "Startup";
@ -73,6 +76,24 @@ public class GDBJtagStartupTab extends AbstractLaunchConfigurationTab {
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 variablesButtonSelected(Text text) {
StringVariableSelectionDialog dialog = new StringVariableSelectionDialog(getShell());
dialog.open();
text.append(dialog.getVariableExpression());
}
public void createInitGroup(Composite parent) {
Group group = new Group(parent, SWT.NONE);
GridLayout layout = new GridLayout();
@ -97,7 +118,7 @@ public class GDBJtagStartupTab extends AbstractLaunchConfigurationTab {
varsButton.setText("Variables...");
varsButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
varsButtonSelected(initCommands);
variablesButtonSelected(initCommands);
}
});
}
@ -120,6 +141,7 @@ public class GDBJtagStartupTab extends AbstractLaunchConfigurationTab {
loadImage.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
loadImageChanged();
updateLaunchConfigurationDialog();
}
});
@ -132,19 +154,34 @@ public class GDBJtagStartupTab extends AbstractLaunchConfigurationTab {
imageFileName = new Text(group, SWT.BORDER);
gd = new GridData(GridData.FILL_HORIZONTAL);
imageFileName.setLayoutData(gd);
imageFileName.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
updateLaunchConfigurationDialog();
}
});
imageFileBrowse = new Button(group, SWT.NONE);
imageFileBrowse.setText("Browse...");
imageFileBrowse.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
browseButtonSelected("Select image file", imageFileName);
}
});
imageFileWorkspace = new Button(group, SWT.NONE);
imageFileWorkspace.setText("Workspace...");
imageFileVariables = new Button(group, SWT.NONE);
imageFileVariables.setText("Variables...");
imageFileVariables.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
variablesButtonSelected(imageFileName);
}
});
}
private void loadImageChanged() {
boolean enabled = loadImage.getSelection();
imageFileName.setEnabled(enabled);
imageFileBrowse.setEnabled(enabled);
imageFileWorkspace.setEnabled(enabled);
imageFileVariables.setEnabled(enabled);
}
public void createRunGroup(Composite parent) {
@ -160,6 +197,7 @@ public class GDBJtagStartupTab extends AbstractLaunchConfigurationTab {
defaultRun.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
defaultRunChanged();
updateLaunchConfigurationDialog();
}
});
@ -173,13 +211,13 @@ public class GDBJtagStartupTab extends AbstractLaunchConfigurationTab {
}
});
runVarsButton = new Button(group, SWT.NONE);
runCommandVariables = new Button(group, SWT.NONE);
gd = new GridData(GridData.HORIZONTAL_ALIGN_END);
runVarsButton.setLayoutData(gd);
runVarsButton.setText("Variables...");
runVarsButton.addSelectionListener(new SelectionAdapter() {
runCommandVariables.setLayoutData(gd);
runCommandVariables.setText("Variables...");
runCommandVariables.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
varsButtonSelected(runCommands);
variablesButtonSelected(runCommands);
}
});
}
@ -187,13 +225,7 @@ public class GDBJtagStartupTab extends AbstractLaunchConfigurationTab {
private void defaultRunChanged() {
boolean enabled = !defaultRun.getSelection();
runCommands.setEnabled(enabled);
runVarsButton.setEnabled(enabled);
}
private void varsButtonSelected(Text text) {
StringVariableSelectionDialog dialog = new StringVariableSelectionDialog(getShell());
dialog.open();
text.append(dialog.getVariableExpression());
runCommandVariables.setEnabled(enabled);
}
public void initializeFrom(ILaunchConfiguration configuration) {
@ -213,7 +245,7 @@ public class GDBJtagStartupTab extends AbstractLaunchConfigurationTab {
public void performApply(ILaunchConfigurationWorkingCopy configuration) {
configuration.setAttribute(GDBJtagConstants.ATTR_INIT_COMMANDS, initCommands.getText());
configuration.setAttribute(GDBJtagConstants.ATTR_LOAD_IMAGE, loadImage.getSelection());
configuration.setAttribute(GDBJtagConstants.ATTR_IMAGE_FILE_NAME, imageFileName.getText());
configuration.setAttribute(GDBJtagConstants.ATTR_IMAGE_FILE_NAME, imageFileName.getText().trim());
configuration.setAttribute(GDBJtagConstants.ATTR_USE_DEFAULT_RUN, defaultRun.getSelection());
configuration.setAttribute(GDBJtagConstants.ATTR_RUN_COMMANDS, runCommands.getText());
}