blob: 068feea9c71de14132d9d35c8a6ef457c830d326 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2018 PalmSource, Inc. and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Ewa Matejska (PalmSource)
*
* Referenced GDBDebuggerPage code to write this.
* Anna Dushistova (Mentor Graphics) - adapted from RemoteGDBDebuggerPage
* Anna Dushistova (Mentor Graphics) - moved to org.eclipse.cdt.launch.remote.tabs
*******************************************************************************/
package org.eclipse.cdt.launch.remote.tabs;
import org.eclipse.cdt.dsf.gdb.IGDBLaunchConfigurationConstants;
import org.eclipse.cdt.dsf.gdb.internal.ui.launching.GdbDebuggerPage;
import org.eclipse.cdt.dsf.gdb.launching.LaunchUtils;
import org.eclipse.cdt.internal.launch.remote.Messages;
import org.eclipse.cdt.launch.remote.IRemoteConnectionConfigurationConstants;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
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.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.Label;
import org.eclipse.swt.widgets.Text;
public class RemoteDSFGDBDebuggerPage extends GdbDebuggerPage {
protected Text fGDBServerCommandText;
protected Text fGDBServerPortNumberText;
protected Text fGDBServerOptionsText;
protected Button fRemoteTimeoutEnabledCheckbox;
protected Text fRemoteTimeoutValueText;
private boolean fIsInitializing = false;
public RemoteDSFGDBDebuggerPage() {
super();
}
@Override
public String getName() {
return Messages.Remote_GDB_Debugger_Options;
}
@Override
public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
super.setDefaults(configuration);
configuration.setAttribute(IRemoteConnectionConfigurationConstants.ATTR_GDBSERVER_COMMAND,
IRemoteConnectionConfigurationConstants.ATTR_GDBSERVER_COMMAND_DEFAULT);
configuration.setAttribute(IRemoteConnectionConfigurationConstants.ATTR_GDBSERVER_PORT,
IRemoteConnectionConfigurationConstants.ATTR_GDBSERVER_PORT_DEFAULT);
configuration.setAttribute(IRemoteConnectionConfigurationConstants.ATTR_GDBSERVER_OPTIONS,
IRemoteConnectionConfigurationConstants.ATTR_GDBSERVER_OPTIONS_DEFAULT);
configuration.setAttribute(IGDBLaunchConfigurationConstants.ATTR_DEBUGGER_REMOTE_TIMEOUT_ENABLED,
LaunchUtils.getRemoteTimeoutEnabledDefault());
configuration.setAttribute(IGDBLaunchConfigurationConstants.ATTR_DEBUGGER_REMOTE_TIMEOUT_VALUE,
LaunchUtils.getRemoteTimeoutValueDefault());
}
@Override
public void initializeFrom(ILaunchConfiguration configuration) {
setInitializing(true);
super.initializeFrom(configuration);
String gdbserverCommand = null;
String gdbserverPortNumber = null;
String gdbserverOptions = null;
boolean remoteTimeoutEnabled = false;
String remoteTimeoutValue = null;
try {
gdbserverCommand = configuration.getAttribute(
IRemoteConnectionConfigurationConstants.ATTR_GDBSERVER_COMMAND,
IRemoteConnectionConfigurationConstants.ATTR_GDBSERVER_COMMAND_DEFAULT);
} catch (CoreException e) {
}
try {
gdbserverPortNumber = configuration.getAttribute(
IRemoteConnectionConfigurationConstants.ATTR_GDBSERVER_PORT,
IRemoteConnectionConfigurationConstants.ATTR_GDBSERVER_PORT_DEFAULT);
} catch (CoreException e) {
}
try {
gdbserverOptions = configuration.getAttribute(
IRemoteConnectionConfigurationConstants.ATTR_GDBSERVER_OPTIONS,
IRemoteConnectionConfigurationConstants.ATTR_GDBSERVER_OPTIONS_DEFAULT);
} catch (CoreException e) {
}
try {
remoteTimeoutEnabled = configuration.getAttribute(
IGDBLaunchConfigurationConstants.ATTR_DEBUGGER_REMOTE_TIMEOUT_ENABLED,
LaunchUtils.getRemoteTimeoutEnabledDefault());
} catch (CoreException e) {
}
try {
remoteTimeoutValue = configuration.getAttribute(
IGDBLaunchConfigurationConstants.ATTR_DEBUGGER_REMOTE_TIMEOUT_VALUE,
LaunchUtils.getRemoteTimeoutValueDefault());
} catch (CoreException e) {
}
fGDBServerCommandText.setText(gdbserverCommand);
fGDBServerPortNumberText.setText(gdbserverPortNumber);
fGDBServerOptionsText.setText(gdbserverOptions);
fRemoteTimeoutEnabledCheckbox.setSelection(remoteTimeoutEnabled);
fRemoteTimeoutValueText.setText(remoteTimeoutValue);
remoteTimeoutEnabledChanged();
setInitializing(false);
}
@Override
public void performApply(ILaunchConfigurationWorkingCopy configuration) {
super.performApply(configuration);
String str = fGDBServerCommandText.getText();
str.trim();
configuration.setAttribute(IRemoteConnectionConfigurationConstants.ATTR_GDBSERVER_COMMAND, str);
str = fGDBServerPortNumberText.getText();
str.trim();
configuration.setAttribute(IRemoteConnectionConfigurationConstants.ATTR_GDBSERVER_PORT, str);
str = fGDBServerOptionsText.getText();
str.trim();
configuration.setAttribute(IRemoteConnectionConfigurationConstants.ATTR_GDBSERVER_OPTIONS, str);
boolean b = fRemoteTimeoutEnabledCheckbox.getSelection();
configuration.setAttribute(IGDBLaunchConfigurationConstants.ATTR_DEBUGGER_REMOTE_TIMEOUT_ENABLED, b);
str = fRemoteTimeoutValueText.getText();
str.trim();
configuration.setAttribute(IGDBLaunchConfigurationConstants.ATTR_DEBUGGER_REMOTE_TIMEOUT_VALUE, str);
}
protected void createGdbserverSettingsTab(CTabFolder tabFolder) {
CTabItem tabItem = new CTabItem(tabFolder, SWT.NONE);
tabItem.setText(Messages.Gdbserver_Settings_Tab_Name);
Composite comp = new Composite(tabFolder, SWT.NULL);
comp.setLayout(new GridLayout(1, true));
comp.setLayoutData(new GridData(GridData.FILL_BOTH));
((GridLayout) comp.getLayout()).makeColumnsEqualWidth = false;
comp.setFont(tabFolder.getFont());
tabItem.setControl(comp);
Composite subComp = new Composite(comp, SWT.NULL);
subComp.setLayout(new GridLayout(2, true));
subComp.setLayoutData(new GridData(GridData.FILL_BOTH));
((GridLayout) subComp.getLayout()).makeColumnsEqualWidth = false;
subComp.setFont(tabFolder.getFont());
Label label = new Label(subComp, SWT.LEFT);
label.setText(Messages.Gdbserver_name_textfield_label);
GridData gd = new GridData();
label.setLayoutData(gd);
fGDBServerCommandText = new Text(subComp, SWT.SINGLE | SWT.BORDER);
GridData data = new GridData(SWT.FILL, SWT.TOP, true, false);
fGDBServerCommandText.setLayoutData(data);
fGDBServerCommandText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent evt) {
updateLaunchConfigurationDialog();
}
});
label = new Label(subComp, SWT.LEFT);
label.setText(Messages.Port_number_textfield_label);
gd = new GridData();
label.setLayoutData(gd);
fGDBServerPortNumberText = new Text(subComp, SWT.SINGLE | SWT.BORDER);
data = new GridData(SWT.FILL, SWT.TOP, true, false);
fGDBServerPortNumberText.setLayoutData(data);
fGDBServerPortNumberText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent evt) {
updateLaunchConfigurationDialog();
}
});
label = new Label(subComp, SWT.LEFT);
label.setText(Messages.Gdbserver_options_textfield_label);
gd = new GridData();
label.setLayoutData(gd);
fGDBServerOptionsText = new Text(subComp, SWT.SINGLE | SWT.BORDER);
data = new GridData(SWT.FILL, SWT.TOP, true, false);
fGDBServerOptionsText.setLayoutData(data);
fGDBServerOptionsText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent evt) {
updateLaunchConfigurationDialog();
}
});
fRemoteTimeoutEnabledCheckbox = new Button(subComp, SWT.CHECK);
fRemoteTimeoutEnabledCheckbox.setText(Messages.Remotetimeout_label);
fRemoteTimeoutEnabledCheckbox.setToolTipText(Messages.Remotetimeout_tooltip);
gd = new GridData();
fRemoteTimeoutEnabledCheckbox.setLayoutData(gd);
fRemoteTimeoutEnabledCheckbox.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
remoteTimeoutEnabledChanged();
updateLaunchConfigurationDialog();
}
});
fRemoteTimeoutValueText = new Text(subComp, SWT.SINGLE | SWT.BORDER);
data = new GridData(SWT.FILL, SWT.TOP, true, false);
fRemoteTimeoutValueText.setLayoutData(data);
fRemoteTimeoutValueText.setToolTipText(Messages.Remotetimeout_tooltip);
fRemoteTimeoutValueText.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent evt) {
updateLaunchConfigurationDialog();
}
});
remoteTimeoutEnabledChanged();
}
private void remoteTimeoutEnabledChanged() {
fRemoteTimeoutValueText.setEnabled(fRemoteTimeoutEnabledCheckbox.getSelection());
}
@Override
public void createTabs(CTabFolder tabFolder) {
super.createTabs(tabFolder);
createGdbserverSettingsTab(tabFolder);
}
@Override
protected boolean isInitializing() {
return fIsInitializing;
}
private void setInitializing(boolean isInitializing) {
fIsInitializing = isInitializing;
}
}