diff options
author | Doug Schaefer | 2017-05-17 17:57:01 +0000 |
---|---|---|
committer | Doug Schaefer | 2017-05-23 20:41:00 +0000 |
commit | 0880413e98069b52e3cb1f3e00da7336a8b82a64 (patch) | |
tree | dc6313ef8c154ac7a55bfaf347d081b847a4d253 /toolchains | |
parent | e74222b86c8ad35cc1534f370ca11587d8365efb (diff) | |
download | org.eclipse.cdt-0880413e98069b52e3cb1f3e00da7336a8b82a64.tar.gz org.eclipse.cdt-0880413e98069b52e3cb1f3e00da7336a8b82a64.tar.xz org.eclipse.cdt-0880413e98069b52e3cb1f3e00da7336a8b82a64.zip |
Bug 516836 Terminal support for Arduino.
Add Arduino Serial Monitor as a Terminal Connector type. It uses the
Terminal's new cdtserial connector for communication and adds a
config panel that lets you pick the Arduino remote connection to
auto select the serial port. Also switched the Arduino launch
to fetch the serial port out of the global registry to pause and
resume the port while launching. The Terminal does not use the
remote connection to get the serial port.
Note: also adding the terminal as a dependency for builds. Yes,
further adds to our build cycle, but we're dealing with it so far
with o.e.remote.
Change-Id: I5a7cc9ffbf8ae60cd86e0e5440547d12202acbac
Diffstat (limited to 'toolchains')
11 files changed, 499 insertions, 6 deletions
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/META-INF/MANIFEST.MF b/toolchains/arduino/org.eclipse.cdt.arduino.core/META-INF/MANIFEST.MF index 2f617f1dded..24300bcbdb5 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/META-INF/MANIFEST.MF +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.cdt.arduino.core;singleton:=true -Bundle-Version: 2.0.0.qualifier +Bundle-Version: 2.1.0.qualifier Bundle-Activator: org.eclipse.cdt.arduino.core.internal.Activator Bundle-Vendor: %providerName Require-Bundle: org.eclipse.core.runtime, diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/launch/ArduinoLaunch.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/launch/ArduinoLaunch.java index 51d64d38b0b..7efb7c06bf5 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/launch/ArduinoLaunch.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/launch/ArduinoLaunch.java @@ -7,7 +7,11 @@ *******************************************************************************/ package org.eclipse.cdt.arduino.core.internal.launch; +import java.io.IOException; + +import org.eclipse.cdt.arduino.core.internal.Activator; import org.eclipse.cdt.arduino.core.internal.remote.ArduinoRemoteConnection; +import org.eclipse.cdt.serial.SerialPort; import org.eclipse.debug.core.DebugEvent; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.ILaunchConfiguration; @@ -33,7 +37,14 @@ public class ArduinoLaunch extends TargetedLaunch { public void start() { this.wasOpen = remote.getRemoteConnection().isOpen(); if (wasOpen) { - remote.pause(); + SerialPort port = SerialPort.get(remote.getPortName()); + if (port != null) { + try { + port.pause(); + } catch (IOException e) { + Activator.log(e); + } + } } } @@ -41,7 +52,14 @@ public class ArduinoLaunch extends TargetedLaunch { public void handleDebugEvents(DebugEvent[] events) { super.handleDebugEvents(events); if (isTerminated() && wasOpen) { - remote.resume(); + SerialPort port = SerialPort.get(remote.getPortName()); + if (port != null) { + try { + port.resume(); + } catch (IOException e) { + Activator.log(e); + } + } wasOpen = false; } } diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/META-INF/MANIFEST.MF b/toolchains/arduino/org.eclipse.cdt.arduino.ui/META-INF/MANIFEST.MF index 329d73319a3..36c0e079c58 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/META-INF/MANIFEST.MF +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.cdt.arduino.ui;singleton:=true -Bundle-Version: 2.0.0.qualifier +Bundle-Version: 2.1.0.qualifier Bundle-Activator: org.eclipse.cdt.arduino.ui.internal.Activator Require-Bundle: org.eclipse.core.runtime, org.eclipse.core.expressions, @@ -17,7 +17,11 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.remote.ui;bundle-version="2.0.0", org.eclipse.cdt.native.serial;bundle-version="1.0.0", org.eclipse.tools.templates.ui;bundle-version="1.0.0", - org.eclipse.launchbar.remote.ui;bundle-version="1.0.0" + org.eclipse.launchbar.remote.ui;bundle-version="1.0.0", + org.eclipse.tm.terminal.connector.cdtserial;bundle-version="4.3.0", + org.eclipse.tm.terminal.view.ui;bundle-version="4.2.100", + org.eclipse.tm.terminal.view.core;bundle-version="4.2.0", + org.eclipse.tm.terminal.control;bundle-version="4.2.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ActivationPolicy: lazy Bundle-Vendor: %providerName diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/plugin.properties b/toolchains/arduino/org.eclipse.cdt.arduino.ui/plugin.properties index 6bc840fb93f..d4bb6971b90 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/plugin.properties +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/plugin.properties @@ -12,4 +12,6 @@ pluginName=Arduino C++ UI providerName=Eclipse CDT preferencePage.name=Arduino -arduinoDownloadsManager=Arduino Downloads Manager
\ No newline at end of file +arduinoDownloadsManager=Arduino Downloads Manager +arduinoTerminalConnector=Arduino Serial Monitor +arduinoTerminalLauncher=Arduino Serial Monitor diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/plugin.xml b/toolchains/arduino/org.eclipse.cdt.arduino.ui/plugin.xml index b42d003a32f..3386862fc9a 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/plugin.xml +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/plugin.xml @@ -174,4 +174,11 @@ name="%arduinoDownloadsManager"> </command> </extension> + <extension point="org.eclipse.tm.terminal.view.ui.launcherDelegates"> + <delegate + class="org.eclipse.cdt.arduino.ui.internal.terminal.ArduinoTerminalLauncher" + id="org.eclipse.cdt.arduino.terminalLauncher" + label="%arduinoTerminalLauncher"> + </delegate> + </extension> </plugin> diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/Messages.java b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/Messages.java index cbf5f0e2d42..f73a8ed7e09 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/Messages.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/Messages.java @@ -30,6 +30,13 @@ public class Messages extends NLS { public static String ArduinoPreferencePage_desc; public static String PlatformDetailsDialog_0; public static String PlatformDetailsDialog_1; + public static String ArduinoTerminalSettingsPage_BoardName; + public static String ArduinoTerminalSettingsPage_SerialPort; + public static String ArduinoTerminalSettingsPage_BaudRate; + public static String ArduinoTerminalSettingsPage_DataSize; + public static String ArduinoTerminalSettingsPage_Parity; + public static String ArduinoTerminalSettingsPage_StopBits; + public static String ArduinoTerminalSettingsPage_UnknownPort; static { // initialize resource bundle diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/messages.properties b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/messages.properties index eb1d9049e7a..f4428e74523 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/messages.properties +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/messages.properties @@ -26,3 +26,10 @@ libraries. For more information, see http://arduino.cc ArduinoPreferencePage_desc=Enter URLs for package_index.json files one per line. PlatformDetailsDialog_0=Platform: PlatformDetailsDialog_1=Supports boards:\n +ArduinoTerminalSettingsPage_BoardName=Board Name: +ArduinoTerminalSettingsPage_SerialPort=Serial Port: +ArduinoTerminalSettingsPage_BaudRate=Baud Rate: +ArduinoTerminalSettingsPage_DataSize=Data Size: +ArduinoTerminalSettingsPage_Parity=Parity: +ArduinoTerminalSettingsPage_StopBits=Stop Bits: +ArduinoTerminalSettingsPage_UnknownPort=Unknown port diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/terminal/ArduinoTerminalConfigPanel.java b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/terminal/ArduinoTerminalConfigPanel.java new file mode 100644 index 00000000000..cf2ef58b7cd --- /dev/null +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/terminal/ArduinoTerminalConfigPanel.java @@ -0,0 +1,104 @@ +/******************************************************************************* + * Copyright (c) 2015 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 + *******************************************************************************/ +package org.eclipse.cdt.arduino.ui.internal.terminal; + +import java.util.Map; + +import org.eclipse.cdt.serial.BaudRate; +import org.eclipse.cdt.serial.ByteSize; +import org.eclipse.cdt.serial.Parity; +import org.eclipse.cdt.serial.StopBits; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.tm.terminal.connector.cdtserial.connector.SerialSettings; +import org.eclipse.tm.terminal.view.core.interfaces.constants.ITerminalsConnectorConstants; +import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer; +import org.eclipse.tm.terminal.view.ui.panels.AbstractExtendedConfigurationPanel; + +public class ArduinoTerminalConfigPanel extends AbstractExtendedConfigurationPanel { + + private ArduinoTerminalSettings settings; + private ArduinoTerminalSettingsPage page; + + public ArduinoTerminalConfigPanel(IConfigurationPanelContainer container) { + super(container); + } + + @Override + public void setupPanel(Composite parent) { + Composite panel = new Composite(parent, SWT.NONE); + panel.setLayout(new GridLayout()); + GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); + panel.setLayoutData(data); + + settings = new ArduinoTerminalSettings(); + page = new ArduinoTerminalSettingsPage(settings, this); + page.createControl(panel); + + createEncodingUI(panel, true); + + setControl(panel); + } + + @Override + public void extractData(Map<String, Object> data) { + if (data == null) { + return; + } + + page.saveSettings(); + data.put(ArduinoTerminalSettings.BOARD_ATTR, settings.getBoardName()); + data.put(SerialSettings.PORT_NAME_ATTR, settings.getPortName()); + data.put(SerialSettings.BAUD_RATE_ATTR, settings.getBaudRate()); + data.put(SerialSettings.BYTE_SIZE_ATTR, settings.getByteSize()); + data.put(SerialSettings.PARITY_ATTR, settings.getParity()); + data.put(SerialSettings.STOP_BITS_ATTR, settings.getStopBits()); + + if (getEncoding() != null) { + data.put(ITerminalsConnectorConstants.PROP_ENCODING, getEncoding()); + } + } + + @Override + public void setupData(Map<String, Object> data) { + if (data == null) { + return; + } + + settings.setBoardName((String) data.get(ArduinoTerminalSettings.BOARD_ATTR)); + settings.setPortName((String) data.get(SerialSettings.PORT_NAME_ATTR)); + settings.setBaudRate((BaudRate) data.get(SerialSettings.BAUD_RATE_ATTR)); + settings.setByteSize((ByteSize) data.get(SerialSettings.BYTE_SIZE_ATTR)); + settings.setParity((Parity) data.get(SerialSettings.PARITY_ATTR)); + settings.setStopBits((StopBits) data.get(SerialSettings.STOP_BITS_ATTR)); + + String encoding = (String) data.get(ITerminalsConnectorConstants.PROP_ENCODING); + if (encoding != null) { + setEncoding(encoding); + } + } + + @Override + protected void saveSettingsForHost(boolean add) { + } + + @Override + protected void fillSettingsForHost(String host) { + } + + @Override + protected String getHostFromSettings() { + if (page != null) { + page.saveSettings(); + return settings.getPortName(); + } + return null; + } +} diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/terminal/ArduinoTerminalLauncher.java b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/terminal/ArduinoTerminalLauncher.java new file mode 100644 index 00000000000..dab8efac810 --- /dev/null +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/terminal/ArduinoTerminalLauncher.java @@ -0,0 +1,22 @@ +/******************************************************************************* + * Copyright (c) 2015 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 + *******************************************************************************/ +package org.eclipse.cdt.arduino.ui.internal.terminal; + +import org.eclipse.tm.terminal.connector.cdtserial.launcher.SerialLauncherDelegate; +import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel; +import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer; +import org.eclipse.tm.terminal.view.ui.interfaces.ILauncherDelegate; + +public class ArduinoTerminalLauncher extends SerialLauncherDelegate implements ILauncherDelegate { + + @Override + public IConfigurationPanel getPanel(IConfigurationPanelContainer container) { + return new ArduinoTerminalConfigPanel(container); + } + +} diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/terminal/ArduinoTerminalSettings.java b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/terminal/ArduinoTerminalSettings.java new file mode 100644 index 00000000000..556016f2d58 --- /dev/null +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/terminal/ArduinoTerminalSettings.java @@ -0,0 +1,34 @@ +package org.eclipse.cdt.arduino.ui.internal.terminal; + +import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore; +import org.eclipse.tm.terminal.connector.cdtserial.connector.SerialSettings; + +public class ArduinoTerminalSettings extends SerialSettings { + + public static final String BOARD_ATTR = "arduino.board"; //$NON-NLS-1$ + + private String boardName; + + @Override + public void load(ISettingsStore store) { + super.load(store); + + boardName = store.get(BOARD_ATTR); + } + + @Override + public void save(ISettingsStore store) { + super.save(store); + + store.put(BOARD_ATTR, boardName); + } + + public String getBoardName() { + return boardName; + } + + public void setBoardName(String boardName) { + this.boardName = boardName; + } + +} diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/terminal/ArduinoTerminalSettingsPage.java b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/terminal/ArduinoTerminalSettingsPage.java new file mode 100644 index 00000000000..7251c25cc34 --- /dev/null +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/terminal/ArduinoTerminalSettingsPage.java @@ -0,0 +1,288 @@ +package org.eclipse.cdt.arduino.ui.internal.terminal; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.eclipse.cdt.arduino.core.internal.remote.ArduinoRemoteConnection; +import org.eclipse.cdt.arduino.ui.internal.Activator; +import org.eclipse.cdt.arduino.ui.internal.Messages; +import org.eclipse.cdt.serial.BaudRate; +import org.eclipse.cdt.serial.ByteSize; +import org.eclipse.cdt.serial.Parity; +import org.eclipse.cdt.serial.StopBits; +import org.eclipse.jface.dialogs.DialogSettings; +import org.eclipse.jface.dialogs.IDialogSettings; +import org.eclipse.remote.core.IRemoteConnection; +import org.eclipse.remote.core.IRemoteConnectionType; +import org.eclipse.remote.core.IRemoteServicesManager; +import org.eclipse.swt.SWT; +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.Combo; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; +import org.eclipse.tm.internal.terminal.provisional.api.AbstractSettingsPage; +import org.eclipse.tm.terminal.connector.cdtserial.connector.SerialSettings; +import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanel; +import org.eclipse.tm.terminal.view.ui.interfaces.IConfigurationPanelContainer; + +public class ArduinoTerminalSettingsPage extends AbstractSettingsPage { + + private final ArduinoTerminalSettings settings; + private final IConfigurationPanel panel; + private final IDialogSettings dialogSettings; + + private Combo boardCombo; + private Label portNameLabel; + private Combo baudRateCombo; + private Combo byteSizeCombo; + private Combo parityCombo; + private Combo stopBitsCombo; + + private String boardName; + private String portName; + private BaudRate baudRate; + private ByteSize byteSize; + private Parity parity; + private StopBits stopBits; + + private IRemoteConnectionType arduinoType; + + public ArduinoTerminalSettingsPage(ArduinoTerminalSettings settings, IConfigurationPanel panel) { + this.settings = settings; + this.panel = panel; + setHasControlDecoration(true); + + dialogSettings = DialogSettings.getOrCreateSection(Activator.getDefault().getDialogSettings(), + this.getClass().getSimpleName()); + + boardName = dialogSettings.get(ArduinoTerminalSettings.BOARD_ATTR); + portName = dialogSettings.get(SerialSettings.PORT_NAME_ATTR); + + String baudRateStr = dialogSettings.get(SerialSettings.BAUD_RATE_ATTR); + if (baudRateStr == null || baudRateStr.isEmpty()) { + baudRate = BaudRate.getDefault(); + } else { + String[] rates = BaudRate.getStrings(); + for (int i = 0; i < rates.length; ++i) { + if (baudRateStr.equals(rates[i])) { + baudRate = BaudRate.fromStringIndex(i); + break; + } + } + } + + String byteSizeStr = dialogSettings.get(SerialSettings.BYTE_SIZE_ATTR); + if (byteSizeStr == null || byteSizeStr.isEmpty()) { + byteSize = ByteSize.getDefault(); + } else { + String[] sizes = ByteSize.getStrings(); + for (int i = 0; i < sizes.length; ++i) { + if (byteSizeStr.equals(sizes[i])) { + byteSize = ByteSize.fromStringIndex(i); + break; + } + } + } + + String parityStr = dialogSettings.get(SerialSettings.PARITY_ATTR); + if (parityStr == null || parityStr.isEmpty()) { + parity = Parity.getDefault(); + } else { + String[] parities = Parity.getStrings(); + for (int i = 0; i < parities.length; ++i) { + if (parityStr.equals(parities[i])) { + parity = Parity.fromStringIndex(i); + break; + } + } + } + + String stopBitsStr = dialogSettings.get(SerialSettings.STOP_BITS_ATTR); + if (stopBitsStr == null || stopBitsStr.isEmpty()) { + stopBits = StopBits.getDefault(); + } else { + String[] bits = StopBits.getStrings(); + for (int i = 0; i < bits.length; ++i) { + if (stopBitsStr.equals(bits[i])) { + stopBits = StopBits.fromStringIndex(i); + break; + } + } + } + + } + + @Override + public void createControl(Composite parent) { + Composite comp = new Composite(parent, SWT.NONE); + GridLayout gridLayout = new GridLayout(2, false); + gridLayout.marginWidth = gridLayout.marginHeight = 0; + GridData gridData = new GridData(GridData.FILL_HORIZONTAL); + comp.setLayout(gridLayout); + comp.setLayoutData(gridData); + + Label boardLabel = new Label(comp, SWT.NONE); + boardLabel.setText(Messages.ArduinoTerminalSettingsPage_BoardName); + + boardCombo = new Combo(comp, SWT.READ_ONLY); + boardCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + IRemoteServicesManager manager = Activator.getService(IRemoteServicesManager.class); + arduinoType = manager.getConnectionType(ArduinoRemoteConnection.TYPE_ID); + List<IRemoteConnection> connections = new ArrayList<>(arduinoType.getConnections()); + Collections.sort(connections, (o1, o2) -> { + return o1.getName().compareToIgnoreCase(o2.getName()); + }); + for (IRemoteConnection connection : connections) { + boardCombo.add(connection.getName()); + } + boardCombo.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + validate(); + updatePortLabel(); + } + }); + + Label portLabel = new Label(comp, SWT.NONE); + portLabel.setText(Messages.ArduinoTerminalSettingsPage_SerialPort); + + portNameLabel = new Label(comp, SWT.NONE); + portNameLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + Label baudRateLabel = new Label(comp, SWT.NONE); + baudRateLabel.setText(Messages.ArduinoTerminalSettingsPage_BaudRate); + + baudRateCombo = new Combo(comp, SWT.READ_ONLY); + baudRateCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + for (String baudRateStr : BaudRate.getStrings()) { + baudRateCombo.add(baudRateStr); + } + + Label byteSizeLabel = new Label(comp, SWT.NONE); + byteSizeLabel.setText(Messages.ArduinoTerminalSettingsPage_DataSize); + + byteSizeCombo = new Combo(comp, SWT.READ_ONLY); + byteSizeCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + for (String byteSizeStr : ByteSize.getStrings()) { + byteSizeCombo.add(byteSizeStr); + } + + Label parityLabel = new Label(comp, SWT.NONE); + parityLabel.setText(Messages.ArduinoTerminalSettingsPage_Parity); + + parityCombo = new Combo(comp, SWT.READ_ONLY); + parityCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + for (String parityStr : Parity.getStrings()) { + parityCombo.add(parityStr); + } + + Label stopBitsLabel = new Label(comp, SWT.NONE); + stopBitsLabel.setText(Messages.ArduinoTerminalSettingsPage_StopBits); + + stopBitsCombo = new Combo(comp, SWT.READ_ONLY); + stopBitsCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + for (String stopBitsStr : StopBits.getStrings()) { + stopBitsCombo.add(stopBitsStr); + } + + loadSettings(); + } + + void validate() { + IConfigurationPanelContainer container = panel.getContainer(); + container.validate(); + } + + void updatePortLabel() { + String boardName = boardCombo.getItem(boardCombo.getSelectionIndex()); + IRemoteConnection connection = arduinoType.getConnection(boardName); + if (connection != null) { + ArduinoRemoteConnection board = connection.getService(ArduinoRemoteConnection.class); + portName = board.getPortName(); + portNameLabel.setText(portName); + } else { + portName = null; + portNameLabel.setText(Messages.ArduinoTerminalSettingsPage_UnknownPort); + } + } + + @Override + public void loadSettings() { + String boardName = settings.getBoardName(); + if (boardName == null || boardName.isEmpty()) { + boardName = this.boardName; + } + if (boardName != null && !boardName.isEmpty()) { + int i = 0; + for (String name : boardCombo.getItems()) { + if (boardName.equals(name)) { + boardCombo.select(i); + break; + } + i++; + } + } else if (boardCombo.getItemCount() > 0) { + boardCombo.select(0); + } + + updatePortLabel(); + + BaudRate baudRate = settings.getBaudRate(); + if (baudRate == null) { + baudRate = this.baudRate; + } + baudRateCombo.select(BaudRate.getStringIndex(baudRate)); + + ByteSize byteSize = settings.getByteSize(); + if (byteSize == null) { + byteSize = this.byteSize; + } + byteSizeCombo.select(ByteSize.getStringIndex(byteSize)); + + Parity parity = settings.getParity(); + if (parity == null) { + parity = this.parity; + } + parityCombo.select(Parity.getStringIndex(parity)); + + StopBits stopBits = settings.getStopBits(); + if (stopBits == null) { + stopBits = this.stopBits; + } + stopBitsCombo.select(StopBits.getStringIndex(stopBits)); + } + + @Override + public void saveSettings() { + settings.setBoardName(boardCombo.getItem(boardCombo.getSelectionIndex())); + settings.setPortName(portNameLabel.getText()); + settings.setBaudRate(BaudRate.fromStringIndex(baudRateCombo.getSelectionIndex())); + settings.setByteSize(ByteSize.fromStringIndex(byteSizeCombo.getSelectionIndex())); + settings.setParity(Parity.fromStringIndex(parityCombo.getSelectionIndex())); + settings.setStopBits(StopBits.fromStringIndex(stopBitsCombo.getSelectionIndex())); + + dialogSettings.put(ArduinoTerminalSettings.BOARD_ATTR, boardCombo.getItem(boardCombo.getSelectionIndex())); + dialogSettings.put(SerialSettings.PORT_NAME_ATTR, portNameLabel.getText()); + dialogSettings.put(SerialSettings.BAUD_RATE_ATTR, + BaudRate.getStrings()[baudRateCombo.getSelectionIndex()]); + dialogSettings.put(SerialSettings.BYTE_SIZE_ATTR, + ByteSize.getStrings()[byteSizeCombo.getSelectionIndex()]); + dialogSettings.put(SerialSettings.PARITY_ATTR, Parity.getStrings()[parityCombo.getSelectionIndex()]); + dialogSettings.put(SerialSettings.STOP_BITS_ATTR, + StopBits.getStrings()[stopBitsCombo.getSelectionIndex()]); + } + + @Override + public boolean validateSettings() { + if (boardCombo.getSelectionIndex() < 0 && boardCombo.getText().isEmpty()) { + return false; + } + return true; + } + +} |