/******************************************************************************* * 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 * * Contributors: * QNX Software Systems - Initial API and implementation *******************************************************************************/ package org.eclipse.cdt.arduino.ui.internal.preferences; import java.nio.file.Paths; import org.eclipse.cdt.arduino.core.internal.ArduinoPreferences; import org.eclipse.cdt.arduino.ui.internal.Messages; import org.eclipse.jface.preference.PreferencePage; 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.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.DirectoryDialog; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; public class ArduinoPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { private Text urlsText; private Text homeText; @Override public void init(IWorkbench workbench) { } @Override protected Control createContents(Composite parent) { Composite control = new Composite(parent, SWT.NONE); control.setLayout(new GridLayout()); Composite homeComp = new Composite(control, SWT.NONE); homeComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); homeComp.setLayout(new GridLayout(3, false)); Label label = new Label(homeComp, SWT.NONE); label.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false)); label.setText("Arduino home:"); homeText = new Text(homeComp, SWT.BORDER); homeText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); homeText.setText(ArduinoPreferences.getArduinoHome().toString()); Button browse = new Button(homeComp, SWT.NONE); browse.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false)); browse.setText("Browse..."); browse.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { DirectoryDialog dialog = new DirectoryDialog(getShell()); dialog.setMessage("Select directory for the Arduino SDKs and toolchains."); String dir = dialog.open(); if (dir != null) { homeText.setText(dir); } } }); Text desc = new Text(control, SWT.READ_ONLY | SWT.WRAP); GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, false); layoutData.widthHint = 500; desc.setLayoutData(layoutData); desc.setBackground(parent.getBackground()); desc.setText(Messages.ArduinoPreferencePage_desc); urlsText = new Text(control, SWT.BORDER | SWT.MULTI); urlsText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); urlsText.setText(ArduinoPreferences.getBoardUrls()); return control; } @Override public boolean performOk() { ArduinoPreferences.setBoardUrls(urlsText.getText()); ArduinoPreferences.setArduinoHome(Paths.get(homeText.getText())); return true; } @Override protected void performDefaults() { String defaultHome = ArduinoPreferences.getDefaultArduinoHome(); homeText.setText(defaultHome); ArduinoPreferences.setArduinoHome(Paths.get(defaultHome)); String defaultBoardUrl = ArduinoPreferences.getDefaultBoardUrls(); urlsText.setText(defaultBoardUrl); ArduinoPreferences.setBoardUrls(defaultBoardUrl); super.performDefaults(); } }