/*******************************************************************************
* Copyright (c) 2006, 2015 PalmSource, Inc. 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:
* Ewa Matejska (PalmSource)
*
* Referenced GDBDebuggerPage code to write this.
* Anna Dushistova (Mentor Graphics) - moved to org.eclipse.cdt.launch.remote.tabs
* Synopsys, Inc. - ARC GNU Toolchain support
*******************************************************************************/
package com.arc.embeddedcdt.gui;
import java.util.Observable;
import java.util.Observer;
import org.eclipse.cdt.dsf.gdb.internal.ui.launching.GdbDebuggerPage;
import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
import org.eclipse.cdt.internal.launch.remote.Messages;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.ui.ILaunchConfigurationDialog;
import org.eclipse.swt.widgets.TabFolder;
import com.arc.embeddedcdt.common.LaunchFileFormatVersionChecker;
import com.arc.embeddedcdt.dsf.utils.ConfigurationReader;
import com.arc.embeddedcdt.dsf.utils.ConfigurationWriter;
/**
* The dynamic debugger tab for remote launches using gdb server. The gdbserver settings are used to
* start a gdbserver session on the remote and then to connect to it from the host. The DSDP-TM
* project is used to accomplish this.
*/
@SuppressWarnings("restriction")
public class RemoteGdbDebuggerPage extends GdbDebuggerPage {
private DebuggerGroupContainer debuggerGroupContainer = new DebuggerGroupContainer();
public RemoteGdbDebuggerPage() {
debuggerGroupContainer.addObserver(new Observer() {
@Override
public void update(Observable o, Object arg) {
if (arg == null)
updateLaunchConfigurationDialog();
else
setErrorMessage((String) arg);
}
});
}
@Override
public String getName() {
return Messages.Remote_GDB_Debugger_Options;
}
@Override
public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
super.setDefaults(configuration);
debuggerGroupContainer.setDefaults(configuration);
}
@Override
public void initializeFrom(ILaunchConfiguration configuration) {
LaunchFileFormatVersionChecker.getInstance().check(configuration);
super.initializeFrom(configuration);
debuggerGroupContainer.initializeFrom(configuration);
fGDBCommandText.setText(debuggerGroupContainer.getGdbPath());
}
@Override
public void performApply(ILaunchConfigurationWorkingCopy configuration) {
super.performApply(configuration);
ConfigurationReader configurationReader = new ConfigurationReader(configuration);
final String programName = configurationReader.getProgramName();
configuration.setAttribute(ICDTLaunchConfigurationConstants.ATTR_PROGRAM_NAME,
programName.replace('\\', '/'));
ConfigurationWriter configurationWriter = new ConfigurationWriter(configuration);
debuggerGroupContainer.setGdbPath(fGDBCommandText.getText());
debuggerGroupContainer.performApply(configurationWriter, configuration);
}
@Override
public boolean isValid(ILaunchConfiguration configuration) {
setErrorMessage(null);
setMessage(null);
return debuggerGroupContainer.isValid(configuration);
}
@Override
public void createTabs(TabFolder tabFolder) {
super.createTabs(tabFolder);
debuggerGroupContainer.createGdbServerSettingsTab(tabFolder);
}
@Override
public void setLaunchConfigurationDialog(ILaunchConfigurationDialog dialog) {
super.setLaunchConfigurationDialog(dialog);
debuggerGroupContainer.getWorkingDirectoryBlockNsim().setLaunchConfigurationDialog(dialog);
}
@Override
public String getErrorMessage() {
return debuggerGroupContainer.getErrorMessage(super.getErrorMessage());
}
}