Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/terminal/ArduinoTerminalSettingsPage.java')
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/terminal/ArduinoTerminalSettingsPage.java288
1 files changed, 288 insertions, 0 deletions
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;
+ }
+
+}

Back to the top