diff --git a/app/src/cc/arduino/view/SplashScreenHelper.java b/app/src/cc/arduino/view/SplashScreenHelper.java
index d9f5fedb632..7d5948fec8b 100644
--- a/app/src/cc/arduino/view/SplashScreenHelper.java
+++ b/app/src/cc/arduino/view/SplashScreenHelper.java
@@ -89,7 +89,7 @@ public void close() {
splash.close();
}
- public void printText(String str) {
+ private void printText(String str) {
System.out.println(str);
}
diff --git a/app/src/cc/arduino/view/StubMenuListener.java b/app/src/cc/arduino/view/StubMenuListener.java
index 7d2cfe591dd..dd9654b8295 100644
--- a/app/src/cc/arduino/view/StubMenuListener.java
+++ b/app/src/cc/arduino/view/StubMenuListener.java
@@ -1,3 +1,32 @@
+/*
+ * This file is part of Arduino.
+ *
+ * Copyright 2015 Arduino LLC (http://www.arduino.cc/)
+ *
+ * Arduino is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * As a special exception, you may use this file as part of a free software
+ * library without restriction. Specifically, if other files instantiate
+ * templates or use macros or inline functions from this file, or you compile
+ * this file and link it with other files to produce an executable, this
+ * file does not by itself cause the resulting executable to be covered by
+ * the GNU General Public License. This exception does not however
+ * invalidate any other reasons why the executable file might be covered by
+ * the GNU General Public License.
+ */
+
package cc.arduino.view;
import javax.swing.event.MenuEvent;
diff --git a/app/src/cc/arduino/view/preferences/AdditionalBoardsManagerURLTextArea.java b/app/src/cc/arduino/view/preferences/AdditionalBoardsManagerURLTextArea.java
index e09574e9bef..a75e1c8b43a 100644
--- a/app/src/cc/arduino/view/preferences/AdditionalBoardsManagerURLTextArea.java
+++ b/app/src/cc/arduino/view/preferences/AdditionalBoardsManagerURLTextArea.java
@@ -35,6 +35,7 @@
import com.google.common.collect.FluentIterable;
import processing.app.Base;
+import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
@@ -47,7 +48,7 @@ public class AdditionalBoardsManagerURLTextArea extends javax.swing.JDialog {
private ActionListener onOkListener;
- public AdditionalBoardsManagerURLTextArea(java.awt.Frame parent) {
+ public AdditionalBoardsManagerURLTextArea(Window parent) {
super(parent);
initComponents();
setLocationRelativeTo(parent);
diff --git a/app/src/cc/arduino/view/preferences/Preferences.form b/app/src/cc/arduino/view/preferences/Preferences.form
new file mode 100644
index 00000000000..8286450180d
--- /dev/null
+++ b/app/src/cc/arduino/view/preferences/Preferences.form
@@ -0,0 +1,634 @@
+
+
+
diff --git a/app/src/cc/arduino/view/preferences/Preferences.java b/app/src/cc/arduino/view/preferences/Preferences.java
new file mode 100644
index 00000000000..2d026297013
--- /dev/null
+++ b/app/src/cc/arduino/view/preferences/Preferences.java
@@ -0,0 +1,770 @@
+/*
+ * This file is part of Arduino.
+ *
+ * Copyright 2015 Arduino LLC (http://www.arduino.cc/)
+ *
+ * Arduino is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * As a special exception, you may use this file as part of a free software
+ * library without restriction. Specifically, if other files instantiate
+ * templates or use macros or inline functions from this file, or you compile
+ * this file and link it with other files to produce an executable, this
+ * file does not by itself cause the resulting executable to be covered by
+ * the GNU General Public License. This exception does not however
+ * invalidate any other reasons why the executable file might be covered by
+ * the GNU General Public License.
+ */
+
+package cc.arduino.view.preferences;
+
+import processing.app.Base;
+import processing.app.Editor;
+import processing.app.I18n;
+import processing.app.PreferencesData;
+import processing.app.helpers.FileUtils;
+import processing.app.helpers.OSUtils;
+import processing.app.legacy.PApplet;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowEvent;
+import java.io.File;
+
+import static processing.app.I18n._;
+
+public class Preferences extends javax.swing.JDialog {
+
+ private final Language[] languages;
+ private final Language[] missingLanguages;
+ private final WarningItem[] warningItems;
+ private final Base base;
+
+ public static class Language {
+
+ private final String name;
+ private final String originalName;
+ private final String isoCode;
+
+ public Language(String name, String originalName, String isoCode) {
+ this.name = name;
+ this.originalName = originalName;
+ this.isoCode = isoCode;
+ }
+
+ public String toString() {
+ if (originalName.length() == 0) {
+ return name;
+ }
+ return originalName + " (" + name + ")";
+ }
+
+ public String getIsoCode() {
+ return isoCode;
+ }
+ }
+
+ private static class WarningItem {
+ private final String value;
+ private final String translation;
+
+ public WarningItem(String value, String translation) {
+ this.value = value;
+ this.translation = translation;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ @Override
+ public String toString() {
+ return translation;
+ }
+ }
+
+ public Preferences(Window parent, Base base) {
+ super(parent);
+ this.base = base;
+
+ this.languages = new Language[]{
+ new Language(_("System Default"), "", ""),
+ new Language(_("Albanian"), "shqip", "sq"),
+ new Language(_("Arabic"), "العربية", "ar"),
+ new Language(_("Aragonese"), "Aragonés", "an"),
+ new Language(_("Belarusian"), "Беларуская мова", "be"),
+ new Language(_("Bulgarian"), "български", "bg"),
+ new Language(_("Catalan"), "Català", "ca"),
+ new Language(_("Chinese Simplified"), "简体中文", "zh_CN"),
+ new Language(_("Chinese Traditional"), "繁體中文", "zh_TW"),
+ new Language(_("Croatian"), "Hrvatski", "hr_HR"),
+ new Language(_("Czech (Czech Republic)"), "český (Czech Republic)", "cs_CZ"),
+ new Language(_("Danish (Denmark)"), "Dansk (Denmark)", "da_DK"),
+ new Language(_("Dutch"), "Nederlands", "nl"),
+ new Language(_("English"), "English", "en"),
+ new Language(_("English (United Kingdom)"), "English (United Kingdom)", "en_GB"),
+ new Language(_("Estonian"), "Eesti", "et"),
+ new Language(_("Estonian (Estonia)"), "Eesti keel", "et_EE"),
+ new Language(_("Filipino"), "Pilipino", "fil"),
+ new Language(_("Finnish"), "Suomi", "fi"),
+ new Language(_("French"), "Français", "fr"),
+ new Language(_("Canadian French"), "Canadienne-français", "fr_CA"),
+ new Language(_("Galician"), "Galego", "gl"),
+ new Language(_("Georgian"), "საქართველოს", "ka_GE"),
+ new Language(_("German"), "Deutsch", "de_DE"),
+ new Language(_("Greek"), "ελληνικά", "el_GR"),
+ new Language(_("Hebrew"), "עברית", "he"),
+ new Language(_("Hindi"), "हिंदी", "hi"),
+ new Language(_("Hungarian"), "Magyar", "hu"),
+ new Language(_("Indonesian"), "Bahasa Indonesia", "id"),
+ new Language(_("Italian"), "Italiano", "it_IT"),
+ new Language(_("Japanese"), "日本語", "ja_JP"),
+ new Language(_("Korean"), "한국어", "ko_KR"),
+ new Language(_("Latvian"), "Latviešu", "lv_LV"),
+ new Language(_("Lithuaninan"), "Lietuvių Kalba", "lt_LT"),
+ new Language(_("Norwegian Bokmål"), "Norsk bokmål", "nb_NO"),
+ new Language(_("Persian"), "فارسی", "fa"),
+ new Language(_("Polish"), "Język Polski", "pl"),
+ new Language(_("Portuguese (Brazil)"), "Português (Brazil)", "pt_BR"),
+ new Language(_("Portuguese (Portugal)"), "Português (Portugal)", "pt_PT"),
+ new Language(_("Romanian"), "Română", "ro"),
+ new Language(_("Russian"), "Русский", "ru"),
+ new Language(_("Slovenian"), "Slovenščina", "sl_SI"),
+ new Language(_("Spanish"), "Español", "es"),
+ new Language(_("Swedish"), "Svenska", "sv"),
+ new Language(_("Tamil"), "தமிழ்", "ta"),
+ new Language(_("Turkish"), "Türk", "tr"),
+ new Language(_("Ukrainian"), "Український", "uk"),
+ new Language(_("Vietnamese"), "Tiếng Việt", "vi"),
+ };
+
+ this.missingLanguages = new Language[]{
+ new Language(_("Afrikaans"), "Afrikaans", "af"),
+ new Language(_("Armenian"), "Հայերեն", "hy"),
+ new Language(_("Asturian"), "Asturianu", "ast"),
+ new Language(_("Basque"), "Euskara", "eu"),
+ new Language(_("Bengali (India)"), "বাংলা (India)", "bn_IN"),
+ new Language(_("Bosnian"), "Bosanski", "bs"),
+ new Language(_("Burmese (Myanmar)"), "ဗမာစကား", "my_MM"),
+ new Language(_("Chinese (China)"), "", "zh_CN"),
+ new Language(_("Chinese (Hong Kong)"), "", "zh_HK"),
+ new Language(_("Chinese (Taiwan)"), "", "zh_TW"),
+ new Language(_("Chinese (Taiwan) (Big5)"), "", "zh_TW.Big5"),
+ new Language(_("Czech"), "český", "cs"),
+ new Language(_("Danish"), "Dansk", "da"),
+ new Language(_("Dutch (Netherlands)"), "Nederlands", "nl_NL"),
+ new Language(_("Galician (Spain)"), "Galego (Spain)", "gl_ES"),
+ new Language(_("Nepali"), "नेपाली", "ne"),
+ new Language(_("N'Ko"), "ߒߞߏ", "nqo"),
+ new Language(_("Marathi"), "मराठी", "mr"),
+ new Language(_("Malay (Malaysia)"), "بهاس ملايو (Malaysia)", "ms_MY"),
+ new Language(_("Norwegian"), "Norsk", "no"),
+ new Language(_("Norwegian Nynorsk"), "Norsk Nynorsk", "nn"),
+ new Language(_("Portugese"), "Português", "pt"),
+ new Language(_("Persian (Iran)"), "فارسی (Iran)", "fa_IR"),
+ new Language(_("Slovak"), "Slovenčina", "sk"),
+ new Language(_("Swahili"), "كِسوَهِل", "sw"),
+ new Language(_("Talossan"), "Talossan", "tzl"),
+ new Language(_("Urdu (Pakistan)"), "اردو (Pakistan)", "ur_PK"),
+ new Language(_("Western Frisian"), "Western Frisian", "fy"),
+ };
+
+ this.warningItems = new WarningItem[]{
+ new WarningItem("none", _("None")),
+ new WarningItem("default", _("Default")),
+ new WarningItem("more", _("More")),
+ new WarningItem("all", _("All"))
+ };
+
+ initComponents();
+
+ Base.registerWindowCloseKeys(getRootPane(), new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ cancelButtonActionPerformed(e);
+ }
+ });
+
+ if (!OSUtils.isWindows() || base.getPortableFolder() != null) {
+ autoAssociateBox.setEnabled(false);
+ autoAssociateBox.getParent().remove(autoAssociateBox);
+ }
+
+ showPrerefencesData();
+ }
+
+ /**
+ * This method is called from within the constructor to initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is always
+ * regenerated by the Form Editor.
+ */
+ @SuppressWarnings("unchecked")
+ // //GEN-BEGIN:initComponents
+ private void initComponents() {
+
+ javax.swing.JLabel sketchbookLocationLabel = new javax.swing.JLabel();
+ sketchbookLocationField = new javax.swing.JTextField();
+ javax.swing.JButton browseButton = new javax.swing.JButton();
+ javax.swing.JLabel comboLanguageLabel = new javax.swing.JLabel();
+ comboLanguage = new JComboBox(languages);
+ javax.swing.JLabel requiresRestartLabel = new javax.swing.JLabel();
+ javax.swing.JLabel fontSizeLabel = new javax.swing.JLabel();
+ fontSizeField = new javax.swing.JTextField();
+ javax.swing.JLabel showVerboseLabel = new javax.swing.JLabel();
+ verboseCompilationBox = new javax.swing.JCheckBox();
+ verboseUploadBox = new javax.swing.JCheckBox();
+ javax.swing.JLabel comboWarningsLabel = new javax.swing.JLabel();
+ comboWarnings = new JComboBox(warningItems);
+ javax.swing.JPanel proxySettingsPanel = new javax.swing.JPanel();
+ javax.swing.JLabel proxyHTTPServerLabel = new javax.swing.JLabel();
+ proxyHTTPServer = new javax.swing.JTextField();
+ javax.swing.JLabel proxyHTTPPortLabel = new javax.swing.JLabel();
+ proxyHTTPPort = new javax.swing.JTextField();
+ javax.swing.JLabel proxyHTTPSServerLabel = new javax.swing.JLabel();
+ proxyHTTPSServer = new javax.swing.JTextField();
+ javax.swing.JLabel proxyHTTPSPortLabel = new javax.swing.JLabel();
+ proxyHTTPSPort = new javax.swing.JTextField();
+ javax.swing.JLabel proxyUserLabel = new javax.swing.JLabel();
+ proxyUser = new javax.swing.JTextField();
+ javax.swing.JLabel proxyPasswordLabel = new javax.swing.JLabel();
+ proxyPassword = new javax.swing.JPasswordField();
+ javax.swing.JLabel additionalBoardsManagerLabel = new javax.swing.JLabel();
+ additionalBoardsManagerField = new javax.swing.JTextField();
+ javax.swing.JButton extendedAdditionalUrlFieldWindow = new javax.swing.JButton();
+ javax.swing.JLabel morePreferencesLabel = new javax.swing.JLabel();
+ preferencesFileLabel = new javax.swing.JLabel();
+ javax.swing.JLabel arduinoNotRunningLabel = new javax.swing.JLabel();
+ javax.swing.JButton okButton = new javax.swing.JButton();
+ javax.swing.JButton cancelButton = new javax.swing.JButton();
+ javax.swing.JPanel checkboxesContainer = new javax.swing.JPanel();
+ displayLineNumbersBox = new javax.swing.JCheckBox();
+ enableCodeFoldingBox = new javax.swing.JCheckBox();
+ verifyUploadBox = new javax.swing.JCheckBox();
+ externalEditorBox = new javax.swing.JCheckBox();
+ checkUpdatesBox = new javax.swing.JCheckBox();
+ updateExtensionBox = new javax.swing.JCheckBox();
+ autoAssociateBox = new javax.swing.JCheckBox();
+ saveVerifyUploadBox = new javax.swing.JCheckBox();
+
+ setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
+ setTitle(_("Preferences"));
+ setModal(true);
+ setResizable(false);
+
+ sketchbookLocationLabel.setText(_("Sketchbook location:"));
+
+ sketchbookLocationField.setColumns(40);
+
+ browseButton.setText(I18n.PROMPT_BROWSE);
+ browseButton.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ browseButtonActionPerformed(evt);
+ }
+ });
+
+ comboLanguageLabel.setText(_("Editor language: "));
+
+ requiresRestartLabel.setText(_(" (requires restart of Arduino)"));
+
+ fontSizeLabel.setText(_("Editor font size: "));
+
+ fontSizeField.setColumns(4);
+
+ showVerboseLabel.setText(_("Show verbose output during: "));
+
+ verboseCompilationBox.setText(_("compilation "));
+
+ verboseUploadBox.setText(_("upload"));
+
+ comboWarningsLabel.setText(_("Compiler warnings: "));
+
+ proxySettingsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(_("Proxy Settings")));
+
+ proxyHTTPServerLabel.setText(_("Server (HTTP):"));
+
+ proxyHTTPServer.setColumns(10);
+
+ proxyHTTPPortLabel.setText(_("Port (HTTP):"));
+
+ proxyHTTPPort.setColumns(10);
+
+ proxyHTTPSServerLabel.setText(_("Server (HTTPS):"));
+
+ proxyHTTPSServer.setColumns(10);
+
+ proxyHTTPSPortLabel.setText(_("Port (HTTPS):"));
+
+ proxyHTTPSPort.setColumns(10);
+
+ proxyUserLabel.setText(_("Username:"));
+
+ proxyUser.setColumns(10);
+
+ proxyPasswordLabel.setText(_("Password:"));
+
+ proxyPassword.setColumns(10);
+
+ javax.swing.GroupLayout proxySettingsPanelLayout = new javax.swing.GroupLayout(proxySettingsPanel);
+ proxySettingsPanel.setLayout(proxySettingsPanelLayout);
+ proxySettingsPanelLayout.setHorizontalGroup(
+ proxySettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(proxySettingsPanelLayout.createSequentialGroup()
+ .addContainerGap()
+ .addGroup(proxySettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+ .addGroup(proxySettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(proxyHTTPSServerLabel)
+ .addGroup(proxySettingsPanelLayout.createSequentialGroup()
+ .addGap(8, 8, 8)
+ .addComponent(proxyHTTPServerLabel)))
+ .addComponent(proxyUserLabel))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(proxySettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(proxyHTTPServer)
+ .addComponent(proxyHTTPSServer)
+ .addComponent(proxyUser, javax.swing.GroupLayout.Alignment.TRAILING))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+ .addGroup(proxySettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(proxyHTTPSPortLabel)
+ .addComponent(proxyPasswordLabel, javax.swing.GroupLayout.Alignment.TRAILING)
+ .addComponent(proxyHTTPPortLabel, javax.swing.GroupLayout.Alignment.TRAILING))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(proxySettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+ .addComponent(proxyHTTPSPort, javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(proxyHTTPPort, javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(proxyPassword, javax.swing.GroupLayout.Alignment.LEADING))
+ .addContainerGap())
+ );
+ proxySettingsPanelLayout.setVerticalGroup(
+ proxySettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(proxySettingsPanelLayout.createSequentialGroup()
+ .addGroup(proxySettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(proxySettingsPanelLayout.createSequentialGroup()
+ .addGroup(proxySettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(proxyHTTPServerLabel)
+ .addComponent(proxyHTTPServer, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(proxySettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(proxyHTTPSServerLabel)
+ .addComponent(proxyHTTPSServer, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(proxySettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(proxyUser, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(proxyUserLabel)))
+ .addGroup(proxySettingsPanelLayout.createSequentialGroup()
+ .addGroup(proxySettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(proxyHTTPPortLabel)
+ .addComponent(proxyHTTPPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(proxySettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(proxyHTTPSPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(proxyHTTPSPortLabel))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(proxySettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(proxyPasswordLabel)
+ .addComponent(proxyPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
+ .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ );
+
+ additionalBoardsManagerLabel.setText(_("Additional Boards Manager URLs: "));
+
+ extendedAdditionalUrlFieldWindow.setIcon(new ImageIcon(Base.getThemeImage("newwindow.gif", this)));
+ extendedAdditionalUrlFieldWindow.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ extendedAdditionalUrlFieldWindowActionPerformed(evt);
+ }
+ });
+
+ morePreferencesLabel.setForeground(Color.GRAY);
+ morePreferencesLabel.setText(_("More preferences can be edited directly in the file"));
+
+ preferencesFileLabel.setText(PreferencesData.getPreferencesFile().getAbsolutePath());
+ preferencesFileLabel.addMouseListener(new java.awt.event.MouseAdapter() {
+ public void mousePressed(java.awt.event.MouseEvent evt) {
+ preferencesFileLabelMousePressed(evt);
+ }
+
+ public void mouseExited(java.awt.event.MouseEvent evt) {
+ preferencesFileLabelMouseExited(evt);
+ }
+
+ public void mouseEntered(java.awt.event.MouseEvent evt) {
+ preferencesFileLabelMouseEntered(evt);
+ }
+ });
+
+ arduinoNotRunningLabel.setForeground(Color.GRAY);
+ arduinoNotRunningLabel.setText(_("(edit only when Arduino is not running)"));
+
+ okButton.setText(I18n.PROMPT_OK);
+ okButton.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ okButtonActionPerformed(evt);
+ }
+ });
+
+ cancelButton.setText(I18n.PROMPT_CANCEL);
+ cancelButton.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ cancelButtonActionPerformed(evt);
+ }
+ });
+
+ checkboxesContainer.setLayout(new javax.swing.BoxLayout(checkboxesContainer, javax.swing.BoxLayout.Y_AXIS));
+
+ displayLineNumbersBox.setText(_("Display line numbers"));
+ checkboxesContainer.add(displayLineNumbersBox);
+
+ enableCodeFoldingBox.setText(_("Enable Code Folding"));
+ checkboxesContainer.add(enableCodeFoldingBox);
+
+ verifyUploadBox.setText(_("Verify code after upload"));
+ checkboxesContainer.add(verifyUploadBox);
+
+ externalEditorBox.setText(_("Use external editor"));
+ checkboxesContainer.add(externalEditorBox);
+
+ checkUpdatesBox.setText(_("Check for updates on startup"));
+ checkboxesContainer.add(checkUpdatesBox);
+
+ updateExtensionBox.setText(_("Update sketch files to new extension on save (.pde -> .ino)"));
+ checkboxesContainer.add(updateExtensionBox);
+
+ autoAssociateBox.setText(_("Automatically associate .ino files with Arduino"));
+ checkboxesContainer.add(autoAssociateBox);
+
+ saveVerifyUploadBox.setText(_("Save when verifying or uploading"));
+ checkboxesContainer.add(saveVerifyUploadBox);
+
+ javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+ getContentPane().setLayout(layout);
+ layout.setHorizontalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createSequentialGroup()
+ .addContainerGap()
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(proxySettingsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addGroup(layout.createSequentialGroup()
+ .addComponent(sketchbookLocationField)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(browseButton))
+ .addComponent(checkboxesContainer, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addGroup(layout.createSequentialGroup()
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(arduinoNotRunningLabel)
+ .addComponent(sketchbookLocationLabel)
+ .addGroup(layout.createSequentialGroup()
+ .addComponent(comboWarningsLabel)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(comboWarnings, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addComponent(morePreferencesLabel)
+ .addGroup(layout.createSequentialGroup()
+ .addComponent(showVerboseLabel)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(verboseCompilationBox)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(verboseUploadBox))
+ .addGroup(layout.createSequentialGroup()
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(comboLanguageLabel)
+ .addComponent(fontSizeLabel))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(fontSizeField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addGroup(layout.createSequentialGroup()
+ .addComponent(comboLanguage, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(requiresRestartLabel))))
+ .addComponent(preferencesFileLabel))
+ .addGap(0, 0, Short.MAX_VALUE))
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+ .addGap(0, 0, Short.MAX_VALUE)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+ .addComponent(additionalBoardsManagerLabel)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(additionalBoardsManagerField, javax.swing.GroupLayout.PREFERRED_SIZE, 494, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(extendedAdditionalUrlFieldWindow, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+ .addComponent(okButton)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(cancelButton)))))
+ .addContainerGap())
+ );
+ layout.setVerticalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+ .addContainerGap()
+ .addComponent(sketchbookLocationLabel)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(sketchbookLocationField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(browseButton))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(comboLanguageLabel)
+ .addComponent(comboLanguage, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(requiresRestartLabel))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(fontSizeLabel)
+ .addComponent(fontSizeField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(showVerboseLabel)
+ .addComponent(verboseCompilationBox)
+ .addComponent(verboseUploadBox))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(comboWarningsLabel)
+ .addComponent(comboWarnings, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(checkboxesContainer, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(proxySettingsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(additionalBoardsManagerLabel)
+ .addComponent(additionalBoardsManagerField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addComponent(extendedAdditionalUrlFieldWindow, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(morePreferencesLabel)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(preferencesFileLabel)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(arduinoNotRunningLabel)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(cancelButton)
+ .addComponent(okButton))
+ .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ );
+
+ pack();
+ }// //GEN-END:initComponents
+
+ private void browseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseButtonActionPerformed
+ File dflt = new File(sketchbookLocationField.getText());
+ File file = Base.selectFolder(_("Select new sketchbook location"), dflt, this);
+ if (file != null) {
+ String path = file.getAbsolutePath();
+ if (Base.getPortableFolder() != null) {
+ path = FileUtils.relativePath(Base.getPortableFolder().toString(), path);
+ if (path == null) {
+ path = Base.getPortableSketchbookFolder();
+ }
+ }
+ sketchbookLocationField.setText(path);
+ }
+ }//GEN-LAST:event_browseButtonActionPerformed
+
+ private void extendedAdditionalUrlFieldWindowActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_extendedAdditionalUrlFieldWindowActionPerformed
+ final AdditionalBoardsManagerURLTextArea additionalBoardsManagerURLTextArea = new AdditionalBoardsManagerURLTextArea(this);
+ additionalBoardsManagerURLTextArea.setText(additionalBoardsManagerField.getText());
+ additionalBoardsManagerURLTextArea.onOk(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ additionalBoardsManagerField.setText(additionalBoardsManagerURLTextArea.getText());
+ }
+ });
+ additionalBoardsManagerURLTextArea.setVisible(true);
+ }//GEN-LAST:event_extendedAdditionalUrlFieldWindowActionPerformed
+
+ private void preferencesFileLabelMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_preferencesFileLabelMouseEntered
+ preferencesFileLabel.setForeground(new Color(0, 0, 140));
+ }//GEN-LAST:event_preferencesFileLabelMouseEntered
+
+ private void preferencesFileLabelMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_preferencesFileLabelMousePressed
+ Base.openFolder(PreferencesData.getPreferencesFile().getParentFile());
+ }//GEN-LAST:event_preferencesFileLabelMousePressed
+
+ private void preferencesFileLabelMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_preferencesFileLabelMouseExited
+ preferencesFileLabel.setForeground(Color.BLACK);
+ }//GEN-LAST:event_preferencesFileLabelMouseExited
+
+ private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
+ dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
+ }//GEN-LAST:event_cancelButtonActionPerformed
+
+ private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed
+ savePreferencesData();
+ for (Editor editor : base.getEditors()) {
+ editor.applyPreferences();
+ }
+ cancelButtonActionPerformed(evt);
+ }//GEN-LAST:event_okButtonActionPerformed
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JTextField additionalBoardsManagerField;
+ private javax.swing.JCheckBox autoAssociateBox;
+ private javax.swing.JCheckBox checkUpdatesBox;
+ private javax.swing.JComboBox comboLanguage;
+ private javax.swing.JComboBox comboWarnings;
+ private javax.swing.JCheckBox displayLineNumbersBox;
+ private javax.swing.JCheckBox enableCodeFoldingBox;
+ private javax.swing.JCheckBox externalEditorBox;
+ private javax.swing.JTextField fontSizeField;
+ private javax.swing.JLabel preferencesFileLabel;
+ private javax.swing.JTextField proxyHTTPPort;
+ private javax.swing.JTextField proxyHTTPSPort;
+ private javax.swing.JTextField proxyHTTPSServer;
+ private javax.swing.JTextField proxyHTTPServer;
+ private javax.swing.JPasswordField proxyPassword;
+ private javax.swing.JTextField proxyUser;
+ private javax.swing.JCheckBox saveVerifyUploadBox;
+ private javax.swing.JTextField sketchbookLocationField;
+ private javax.swing.JCheckBox updateExtensionBox;
+ private javax.swing.JCheckBox verboseCompilationBox;
+ private javax.swing.JCheckBox verboseUploadBox;
+ private javax.swing.JCheckBox verifyUploadBox;
+ // End of variables declaration//GEN-END:variables
+
+ private void savePreferencesData() {
+ String oldPath = PreferencesData.get("sketchbook.path");
+ String newPath = sketchbookLocationField.getText();
+ if (newPath.isEmpty()) {
+ if (base.getPortableFolder() == null) {
+ newPath = base.getDefaultSketchbookFolderOrPromptForIt().toString();
+ } else {
+ newPath = base.getPortableSketchbookFolder();
+ }
+ }
+ if (!newPath.equals(oldPath)) {
+ base.rebuildSketchbookMenus();
+ PreferencesData.set("sketchbook.path", newPath);
+ }
+
+ Language newLanguage = (Language) comboLanguage.getSelectedItem();
+ PreferencesData.set("editor.languages.current", newLanguage.getIsoCode());
+
+ String newSizeText = fontSizeField.getText();
+ try {
+ int newSize = Integer.parseInt(newSizeText.trim());
+ String pieces[] = PApplet.split(PreferencesData.get("editor.font"), ',');
+ pieces[2] = String.valueOf(newSize);
+ PreferencesData.set("editor.font", PApplet.join(pieces, ','));
+
+ } catch (Exception e) {
+ System.err.println(I18n.format(_("ignoring invalid font size {0}"), newSizeText));
+ }
+
+ // put each of the settings into the table
+ PreferencesData.setBoolean("build.verbose", verboseCompilationBox.isSelected());
+ PreferencesData.setBoolean("upload.verbose", verboseUploadBox.isSelected());
+
+ WarningItem warningItem = (WarningItem) comboWarnings.getSelectedItem();
+ PreferencesData.set("compiler.warning_level", warningItem.getValue());
+
+ PreferencesData.setBoolean("editor.linenumbers", displayLineNumbersBox.isSelected());
+
+ PreferencesData.setBoolean("editor.code_folding", enableCodeFoldingBox.isSelected());
+
+ PreferencesData.setBoolean("upload.verify", verifyUploadBox.isSelected());
+
+ PreferencesData.setBoolean("editor.save_on_verify", saveVerifyUploadBox.isSelected());
+
+ PreferencesData.setBoolean("editor.external", externalEditorBox.isSelected());
+
+ PreferencesData.setBoolean("update.check", checkUpdatesBox.isSelected());
+
+ PreferencesData.setBoolean("editor.update_extension", updateExtensionBox.isSelected());
+
+ if (autoAssociateBox != null) {
+ PreferencesData.setBoolean("platform.auto_file_type_associations", autoAssociateBox.isSelected());
+ }
+
+ PreferencesData.setBoolean("editor.save_on_verify", saveVerifyUploadBox.isSelected());
+
+ PreferencesData.set("proxy.http.server", proxyHTTPServer.getText());
+ try {
+ PreferencesData.set("proxy.http.port", Integer.valueOf(proxyHTTPPort.getText()).toString());
+ } catch (NumberFormatException e) {
+ PreferencesData.remove("proxy.http.port");
+ }
+ PreferencesData.set("proxy.https.server", proxyHTTPSServer.getText());
+ try {
+ PreferencesData.set("proxy.https.port", Integer.valueOf(proxyHTTPSPort.getText()).toString());
+ } catch (NumberFormatException e) {
+ PreferencesData.remove("proxy.https.port");
+ }
+ PreferencesData.set("proxy.user", proxyUser.getText());
+ PreferencesData.set("proxy.password", new String(proxyPassword.getPassword()));
+
+ PreferencesData.set("boardsmanager.additional.urls", additionalBoardsManagerField.getText().replace("\r\n", "\n").replace("\r", "\n").replace("\n", ","));
+
+ //editor.applyPreferences();
+ }
+
+ private void showPrerefencesData() {
+ sketchbookLocationField.setText(PreferencesData.get("sketchbook.path"));
+
+ String currentLanguageISOCode = PreferencesData.get("editor.languages.current");
+ for (Language language : languages) {
+ if (language.getIsoCode().equals(currentLanguageISOCode)) {
+ comboLanguage.setSelectedItem(language);
+ }
+ }
+
+ Font editorFont = PreferencesData.getFont("editor.font");
+ fontSizeField.setText(String.valueOf(editorFont.getSize()));
+
+ verboseCompilationBox.setSelected(PreferencesData.getBoolean("build.verbose"));
+ verboseUploadBox.setSelected(PreferencesData.getBoolean("upload.verbose"));
+
+ String currentWarningLevel = PreferencesData.get("compiler.warning_level", "none");
+ for (WarningItem item : warningItems) {
+ if (currentWarningLevel.equals(item.getValue())) {
+ comboWarnings.setSelectedItem(item);
+ }
+ }
+
+ displayLineNumbersBox.setSelected(PreferencesData.getBoolean("editor.linenumbers"));
+
+ enableCodeFoldingBox.setSelected(PreferencesData.getBoolean("editor.code_folding"));
+
+ verifyUploadBox.setSelected(PreferencesData.getBoolean("upload.verify"));
+
+ externalEditorBox.setSelected(PreferencesData.getBoolean("editor.external"));
+
+ checkUpdatesBox.setSelected(PreferencesData.getBoolean("update.check"));
+
+ updateExtensionBox.setSelected(PreferencesData.get("editor.update_extension") == null || PreferencesData.getBoolean("editor.update_extension"));
+
+ if (autoAssociateBox != null) {
+ autoAssociateBox.setSelected(PreferencesData.getBoolean("platform.auto_file_type_associations"));
+ }
+
+ saveVerifyUploadBox.setSelected(PreferencesData.getBoolean("editor.save_on_verify"));
+
+ proxyHTTPServer.setText(PreferencesData.get("proxy.http.server"));
+ try {
+ proxyHTTPPort.setText(Integer.toString(PreferencesData.getInteger("proxy.http.port", 8080)));
+ } catch (NumberFormatException e) {
+ proxyHTTPPort.setText("");
+ }
+ proxyHTTPSServer.setText(PreferencesData.get("proxy.https.server"));
+ try {
+ proxyHTTPSPort.setText(Integer.toString(PreferencesData.getInteger("proxy.https.port", 8443)));
+ } catch (NumberFormatException e) {
+ proxyHTTPSPort.setText("");
+ }
+ proxyUser.setText(PreferencesData.get("proxy.user"));
+ proxyPassword.setText(PreferencesData.get("proxy.password"));
+
+ additionalBoardsManagerField.setText(PreferencesData.get("boardsmanager.additional.urls"));
+ }
+}
diff --git a/app/src/processing/app/Base.java b/app/src/processing/app/Base.java
index ea5c67466b9..41e53169dea 100644
--- a/app/src/processing/app/Base.java
+++ b/app/src/processing/app/Base.java
@@ -92,9 +92,6 @@ public boolean apply(UserLibrary library) {
public static SplashScreenHelper splashScreenHelper = new SplashScreenHelper(SplashScreen.getSplashScreen());
- // A single instance of the preferences window
- Preferences preferencesFrame;
-
// set to true after the first time the menu is built.
// so that the errors while building don't show up again.
boolean builtOnce;
@@ -1123,7 +1120,7 @@ protected boolean handleQuitEach() {
* Asynchronous version of menu rebuild to be used on save and rename
* to prevent the interface from locking up until the menus are done.
*/
- protected void rebuildSketchbookMenus() {
+ public void rebuildSketchbookMenus() {
//System.out.println("async enter");
//new Exception().printStackTrace();
SwingUtilities.invokeLater(new Runnable() {
@@ -1815,8 +1812,13 @@ public void mousePressed(MouseEvent e) {
* Show the Preferences window.
*/
public void handlePrefs() {
- if (preferencesFrame == null) preferencesFrame = new Preferences();
- preferencesFrame.showFrame(activeEditor);
+ cc.arduino.view.preferences.Preferences dialog = new cc.arduino.view.preferences.Preferences(activeEditor, this);
+ if (activeEditor != null) {
+ dialog.setLocationRelativeTo(activeEditor);
+ }
+ dialog.pack();
+ dialog.setMinimumSize(dialog.getSize());
+ dialog.setVisible(true);
}
@@ -2025,7 +2027,7 @@ static public File getSketchbookHardwareFolder() {
}
- protected File getDefaultSketchbookFolderOrPromptForIt() {
+ public File getDefaultSketchbookFolderOrPromptForIt() {
File sketchbookFolder = BaseNoGui.getDefaultSketchbookFolder();
@@ -2119,7 +2121,7 @@ static public void openFolder(File file) {
// .................................................................
- static public File selectFolder(String prompt, File folder, Frame frame) {
+ static public File selectFolder(String prompt, File folder, Component parent) {
JFileChooser fc = new JFileChooser();
fc.setDialogTitle(prompt);
if (folder != null) {
@@ -2127,7 +2129,7 @@ static public File selectFolder(String prompt, File folder, Frame frame) {
}
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
- int returned = fc.showOpenDialog(new JDialog());
+ int returned = fc.showOpenDialog(parent);
if (returned == JFileChooser.APPROVE_OPTION) {
return fc.getSelectedFile();
}
diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java
index ef87a62191e..37d258ed102 100644
--- a/app/src/processing/app/Editor.java
+++ b/app/src/processing/app/Editor.java
@@ -258,7 +258,7 @@ public void windowDeactivated(WindowEvent e) {
scrollPane = new RTextScrollPane(textarea, true);
scrollPane.setBorder(new MatteBorder(0, 6, 0, 0, Theme.getColor("editor.bgcolor")));
scrollPane.setViewportBorder(BorderFactory.createEmptyBorder());
- scrollPane.setLineNumbersEnabled(Preferences.getBoolean("editor.linenumbers"));
+ scrollPane.setLineNumbersEnabled(PreferencesData.getBoolean("editor.linenumbers"));
scrollPane.setIconRowHeaderEnabled(false);
Gutter gutter = scrollPane.getGutter();
@@ -443,7 +443,7 @@ protected int[] getPlacement() {
* the app is just starting up, or the user just finished messing
* with things in the Preferences window.
*/
- protected void applyPreferences() {
+ public void applyPreferences() {
// apply the setting for 'use external editor'
boolean external = PreferencesData.getBoolean("editor.external");
@@ -1794,7 +1794,7 @@ protected void setCode(final SketchCodeDocument codeDoc) {
if (document == null) { // this document not yet inited
document = new RSyntaxDocument(new ArduinoTokenMakerFactory(base.getPdeKeywords()), RSyntaxDocument.SYNTAX_STYLE_CPLUSPLUS);
- document.putProperty(PlainDocument.tabSizeAttribute, Preferences.getInteger("editor.tabs.size"));
+ document.putProperty(PlainDocument.tabSizeAttribute, PreferencesData.getInteger("editor.tabs.size"));
// insert the program text into the document object
try {
diff --git a/app/src/processing/app/Preferences.java b/app/src/processing/app/Preferences.java
index f55b976af1f..6f76d6e4f29 100644
--- a/app/src/processing/app/Preferences.java
+++ b/app/src/processing/app/Preferences.java
@@ -21,44 +21,30 @@
package processing.app;
-import cc.arduino.view.preferences.AdditionalBoardsManagerURLTextArea;
-import com.google.common.base.Function;
-import com.google.common.base.Functions;
-import com.google.common.base.Joiner;
-import com.google.common.collect.Collections2;
-import processing.app.helpers.FileUtils;
-import processing.app.helpers.OSUtils;
import processing.app.helpers.PreferencesHelper;
import processing.app.helpers.PreferencesMap;
-import processing.app.legacy.PApplet;
-import javax.swing.*;
import java.awt.*;
-import java.awt.event.*;
import java.io.File;
-import java.util.*;
-import java.util.List;
-
-import static processing.app.I18n._;
/**
* Storage class for user preferences and environment settings.
- *
+ *
* This class no longer uses the Properties class, since
* properties files are iso8859-1, which is highly likely to
* be a problem when trying to save sketch folders and locations.
- *
+ *
* The GUI portion in here is really ugly, as it uses exact layout. This was
* done in frustration one evening (and pre-Swing), but that's long since past,
* and it should all be moved to a proper swing layout like BoxLayout.
- *
+ *
* This is very poorly put together, that the preferences panel and the actual
* preferences i/o is part of the same code. But there hasn't yet been a
* compelling reason to bother with the separation aside from concern about
* being lectured by strangers who feel that it doesn't look like what they
* learned in CS class.
- *
+ *
* Would also be possible to change this to use the Java Preferences API.
* Some useful articles
* here and
@@ -71,131 +57,12 @@
*/
public class Preferences {
- class Language {
- Language(String _name, String _originalName, String _isoCode) {
- name = _name;
- originalName = _originalName;
- isoCode = _isoCode;
- }
-
- public String toString() {
- if (originalName.length() == 0)
- return name;
- return originalName + " (" + name + ")";
- };
-
- String name;
- String originalName;
- String isoCode;
- }
-
- Language languages[] = {
- new Language(_("System Default"), "", ""),
- new Language(_("Albanian"), "shqip", "sq"),
- new Language(_("Arabic"), "العربية", "ar"),
- new Language(_("Aragonese"), "Aragonés", "an"),
- new Language(_("Belarusian"), "Беларуская мова", "be"),
- new Language(_("Bulgarian"), "български", "bg"),
- new Language(_("Catalan"), "Català", "ca"),
- new Language(_("Chinese Simplified"), "简体中文", "zh_CN"),
- new Language(_("Chinese Traditional"), "繁體中文", "zh_TW"),
- new Language(_("Croatian"), "Hrvatski", "hr_HR"),
- new Language(_("Czech (Czech Republic)"), "český (Czech Republic)", "cs_CZ"),
- new Language(_("Danish (Denmark)"), "Dansk (Denmark)", "da_DK"),
- new Language(_("Dutch"), "Nederlands", "nl"),
- new Language(_("English"), "English", "en"),
- new Language(_("English (United Kingdom)"), "English (United Kingdom)", "en_GB"),
- new Language(_("Estonian"), "Eesti", "et"),
- new Language(_("Estonian (Estonia)"), "Eesti keel", "et_EE"),
- new Language(_("Filipino"), "Pilipino", "fil"),
- new Language(_("Finnish"), "Suomi", "fi"),
- new Language(_("French"), "Français", "fr"),
- new Language(_("Canadian French"), "Canadienne-français", "fr_CA"),
- new Language(_("Galician"), "Galego", "gl"),
- new Language(_("Georgian"), "საქართველოს", "ka_GE"),
- new Language(_("German"), "Deutsch", "de_DE"),
- new Language(_("Greek"), "ελληνικά", "el_GR"),
- new Language(_("Hebrew"), "עברית", "he"),
- new Language(_("Hindi"), "हिंदी", "hi"),
- new Language(_("Hungarian"), "Magyar", "hu"),
- new Language(_("Indonesian"), "Bahasa Indonesia", "id"),
- new Language(_("Italian"), "Italiano", "it_IT"),
- new Language(_("Japanese"), "日本語", "ja_JP"),
- new Language(_("Korean"), "한국어", "ko_KR"),
- new Language(_("Latvian"), "Latviešu", "lv_LV"),
- new Language(_("Lithuaninan"), "Lietuvių Kalba", "lt_LT"),
- new Language(_("Norwegian Bokmål"), "Norsk bokmål", "nb_NO"),
- new Language(_("Persian"), "فارسی", "fa"),
- new Language(_("Polish"), "Język Polski", "pl"),
- new Language(_("Portuguese (Brazil)"), "Português (Brazil)", "pt_BR"),
- new Language(_("Portuguese (Portugal)"), "Português (Portugal)", "pt_PT"),
- new Language(_("Romanian"), "Română", "ro"),
- new Language(_("Russian"), "Русский", "ru"),
- new Language(_("Slovenian"), "Slovenščina", "sl_SI"),
- new Language(_("Spanish"), "Español", "es"),
- new Language(_("Swedish"), "Svenska", "sv"),
- new Language(_("Tamil"), "தமிழ்", "ta"),
- new Language(_("Turkish"), "Türk", "tr"),
- new Language(_("Ukrainian"), "Український", "uk"),
- new Language(_("Vietnamese"), "Tiếng Việt", "vi"),
- };
-
- // Incomplete languages
- Language missingLanguages[] = {
- new Language(_("Afrikaans"), "Afrikaans", "af"),
- new Language(_("Armenian"), "Հայերեն", "hy"),
- new Language(_("Asturian"), "Asturianu", "ast"),
- new Language(_("Basque"), "Euskara", "eu"),
- new Language(_("Bengali (India)"), "বাংলা (India)", "bn_IN"),
- new Language(_("Bosnian"), "Bosanski", "bs"),
- new Language(_("Burmese (Myanmar)"), "ဗမာစကား", "my_MM"),
- new Language(_("Chinese (China)"), "", "zh_CN"),
- new Language(_("Chinese (Hong Kong)"), "", "zh_HK"),
- new Language(_("Chinese (Taiwan)"), "", "zh_TW"),
- new Language(_("Chinese (Taiwan) (Big5)"), "", "zh_TW.Big5"),
- new Language(_("Czech"), "český", "cs"),
- new Language(_("Danish"), "Dansk", "da"),
- new Language(_("Dutch (Netherlands)"), "Nederlands", "nl_NL"),
- new Language(_("Galician (Spain)"), "Galego (Spain)", "gl_ES"),
- new Language(_("Nepali"), "नेपाली", "ne"),
- new Language(_("N'Ko"), "ߒߞߏ", "nqo"),
- new Language(_("Marathi"), "मराठी", "mr"),
- new Language(_("Malay (Malaysia)"), "بهاس ملايو (Malaysia)", "ms_MY"),
- new Language(_("Norwegian"), "Norsk", "no"),
- new Language(_("Norwegian Nynorsk"), "Norsk Nynorsk", "nn"),
- new Language(_("Portugese"), "Português", "pt"),
- new Language(_("Persian (Iran)"), "فارسی (Iran)", "fa_IR"),
- new Language(_("Slovak"), "Slovenčina", "sk"),
- new Language(_("Swahili"), "كِسوَهِل", "sw"),
- new Language(_("Talossan"), "Talossan", "tzl"),
- new Language(_("Urdu (Pakistan)"), "اردو (Pakistan)", "ur_PK"),
- new Language(_("Western Frisian"), "Western Frisian", "fy"),
- };
-
- private static class WarningItem {
- private final String value;
- private final String translation;
-
- public WarningItem(String value, String translation) {
- this.value = value;
- this.translation = translation;
- }
-
- public String getValue() {
- return value;
- }
-
- @Override
- public String toString() {
- return translation;
- }
- }
/**
* Standardized width for buttons. Mac OS X 10.3 wants 70 as its default,
* Windows XP needs 66, and my Ubuntu machine needs 80+, so 80 seems proper.
*/
- static public int BUTTON_WIDTH = 80;
+ static public int BUTTON_WIDTH = 80;
/**
* Standardized button height. Mac OS X 10.3 (Java 1.4) wants 29,
@@ -208,687 +75,22 @@ public String toString() {
// value for the size bars, buttons, etc
- static final int GRID_SIZE = 33;
+ static final int GRID_SIZE = 33;
// indents and spacing standards. these probably need to be modified
// per platform as well, since macosx is so huge, windows is smaller,
// and linux is all over the map
- static final int GUI_BIG = 13;
- static final int GUI_BETWEEN = 5;
- static final int GUI_SMALL = 6;
-
- // gui elements
-
- JFrame dialog;
- int wide, high;
-
- JTextField sketchbookLocationField;
- JCheckBox exportSeparateBox;
- JCheckBox verboseCompilationBox;
- JCheckBox verboseUploadBox;
- JCheckBox displayLineNumbersBox;
- JCheckBox enableCodeFoldingBox;
- JCheckBox verifyUploadBox;
- JCheckBox externalEditorBox;
- JCheckBox checkUpdatesBox;
- JTextField fontSizeField;
- JCheckBox updateExtensionBox;
- JCheckBox autoAssociateBox;
- JComboBox comboLanguage;
- JComboBox comboWarnings;
- JCheckBox saveVerifyUploadBox;
- JTextField proxyHTTPServer;
- JTextField proxyHTTPPort;
- JTextField proxyHTTPSServer;
- JTextField proxyHTTPSPort;
- JTextField proxyUser;
- JPasswordField proxyPassword;
- private final JTextField additionalBoardsManagerField;
-
- // the calling editor, so updates can be applied
-
- Editor editor;
-
+ static final int GUI_SMALL = 6;
static protected void init(File file) {
-
- PreferencesData.init(file);
+ PreferencesData.init(file);
// other things that have to be set explicitly for the defaults
PreferencesHelper.putColor(PreferencesData.prefs, "run.window.bgcolor", SystemColor.control);
}
-
- public Preferences() {
-
- // setup dialog for the prefs
-
- //dialog = new JDialog(editor, "Preferences", true);
- dialog = new JFrame(_("Preferences"));
- dialog.setResizable(false);
-
- Container pane = dialog.getContentPane();
- pane.setLayout(null);
-
- int top = GUI_BIG;
- int left = GUI_BIG;
- int right = 0;
-
- JLabel label;
- JButton button; //, button2;
- //JComboBox combo;
- Dimension d, d2; //, d3;
- int h, vmax;
-
-
- // Sketchbook location:
- // [...............................] [ Browse ]
-
- label = new JLabel(_("Sketchbook location:"));
- pane.add(label);
- d = label.getPreferredSize();
- label.setBounds(left, top, d.width, d.height);
- top += d.height; // + GUI_SMALL;
-
- sketchbookLocationField = new JTextField(40);
- pane.add(sketchbookLocationField);
- d = sketchbookLocationField.getPreferredSize();
-
- button = new JButton(I18n.PROMPT_BROWSE);
- button.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- File dflt = new File(sketchbookLocationField.getText());
- File file =
- Base.selectFolder(_("Select new sketchbook location"), dflt, dialog);
- if (file != null) {
- String path = file.getAbsolutePath();
- if (Base.getPortableFolder() != null) {
- path = FileUtils.relativePath(Base.getPortableFolder().toString(), path);
- if (path == null) {
- path = Base.getPortableSketchbookFolder();
- }
- }
- sketchbookLocationField.setText(path);
- }
- }
- });
- pane.add(button);
- d2 = button.getPreferredSize();
-
- // take max height of all components to vertically align em
- vmax = Math.max(d.height, d2.height);
- sketchbookLocationField.setBounds(left, top + (vmax-d.height)/2,
- d.width, d.height);
- h = left + d.width + GUI_SMALL;
- button.setBounds(h, top + (vmax-d2.height)/2,
- d2.width, d2.height);
-
- right = Math.max(right, h + d2.width + GUI_BIG);
- top += vmax + GUI_BETWEEN;
-
-
- // Preferred language: [ ] (requires restart of Arduino)
- Container box = Box.createHorizontalBox();
- label = new JLabel(_("Editor language: "));
- box.add(label);
- comboLanguage = new JComboBox(languages);
- String currentLanguage = PreferencesData.get("editor.languages.current");
- for (Language language : languages) {
- if (language.isoCode.equals(currentLanguage))
- comboLanguage.setSelectedItem(language);
- }
- box.add(comboLanguage);
- label = new JLabel(_(" (requires restart of Arduino)"));
- box.add(label);
- pane.add(box);
- d = box.getPreferredSize();
- box.setForeground(Color.gray);
- box.setBounds(left, top, d.width, d.height);
- right = Math.max(right, left + d.width);
- top += d.height + GUI_BETWEEN;
-
- // Editor font size [ ]
-
- box = Box.createHorizontalBox();
- label = new JLabel(_("Editor font size: "));
- box.add(label);
- fontSizeField = new JTextField(4);
- box.add(fontSizeField);
- label = new JLabel(_(" (requires restart of Arduino)"));
- box.add(label);
- pane.add(box);
- d = box.getPreferredSize();
- box.setBounds(left, top, d.width, d.height);
- Font editorFont = PreferencesData.getFont("editor.font");
- fontSizeField.setText(String.valueOf(editorFont.getSize()));
- top += d.height + GUI_BETWEEN;
-
- // Show verbose output during: [ ] compilation [ ] upload
-
- box = Box.createHorizontalBox();
- label = new JLabel(_("Show verbose output during: "));
- box.add(label);
- verboseCompilationBox = new JCheckBox(_("compilation "));
- box.add(verboseCompilationBox);
- verboseUploadBox = new JCheckBox(_("upload"));
- box.add(verboseUploadBox);
- pane.add(box);
- d = box.getPreferredSize();
- box.setBounds(left, top, d.width, d.height);
- top += d.height + GUI_BETWEEN;
-
- // [ ] Enable all compiler warnings
-
- box = Box.createHorizontalBox();
- label = new JLabel(_("Compiler warnings: "));
- box.add(label);
- WarningItem[] warningItems = new WarningItem[]{new WarningItem("none", _("None")), new WarningItem("default", _("Default")), new WarningItem("more", _("More")), new WarningItem("all", _("All")), };
- comboWarnings = new JComboBox(warningItems);
- String currentWarningLevel = PreferencesData.get("compiler.warning_level", "none");
- for (WarningItem item : warningItems) {
- if (currentWarningLevel.equals(item.getValue())) {
- comboWarnings.setSelectedItem(item);
- }
- }
- box.add(comboWarnings);
- pane.add(box);
- d = box.getPreferredSize();
- box.setForeground(Color.gray);
- box.setBounds(left, top, d.width, d.height);
- right = Math.max(right, left + d.width);
- top += d.height + GUI_BETWEEN;
-
- // [ ] Display line numbers
-
- displayLineNumbersBox = new JCheckBox(_("Display line numbers"));
- pane.add(displayLineNumbersBox);
- d = displayLineNumbersBox.getPreferredSize();
- displayLineNumbersBox.setBounds(left, top, d.width + 10, d.height);
- right = Math.max(right, left + d.width);
- top += d.height + GUI_BETWEEN;
-
- // [ ] Enable Code Folding
-
- enableCodeFoldingBox = new JCheckBox(_("Enable Code Folding"));
- pane.add(enableCodeFoldingBox);
- d = enableCodeFoldingBox.getPreferredSize();
- enableCodeFoldingBox.setBounds(left, top, d.width + 10, d.height);
- right = Math.max(right, left + d.width);
- top += d.height + GUI_BETWEEN;
-
- // [ ] Verify code after upload
-
- verifyUploadBox = new JCheckBox(_("Verify code after upload"));
- pane.add(verifyUploadBox);
- d = verifyUploadBox.getPreferredSize();
- verifyUploadBox.setBounds(left, top, d.width + 10, d.height);
- right = Math.max(right, left + d.width);
- top += d.height + GUI_BETWEEN;
-
- // [ ] Use external editor
-
- externalEditorBox = new JCheckBox(_("Use external editor"));
- pane.add(externalEditorBox);
- d = externalEditorBox.getPreferredSize();
- externalEditorBox.setBounds(left, top, d.width + 10, d.height);
- right = Math.max(right, left + d.width);
- top += d.height + GUI_BETWEEN;
-
-
- // [ ] Check for updates on startup
-
- checkUpdatesBox = new JCheckBox(_("Check for updates on startup"));
- pane.add(checkUpdatesBox);
- d = checkUpdatesBox.getPreferredSize();
- checkUpdatesBox.setBounds(left, top, d.width + 10, d.height);
- right = Math.max(right, left + d.width);
- top += d.height + GUI_BETWEEN;
-
- // [ ] Update sketch files to new extension on save (.pde -> .ino)
-
- updateExtensionBox = new JCheckBox(_("Update sketch files to new extension on save (.pde -> .ino)"));
- pane.add(updateExtensionBox);
- d = updateExtensionBox.getPreferredSize();
- updateExtensionBox.setBounds(left, top, d.width + 10, d.height);
- right = Math.max(right, left + d.width);
- top += d.height + GUI_BETWEEN;
-
- // [ ] Automatically associate .pde files with Processing
-
- if (OSUtils.isWindows()) {
- autoAssociateBox =
- new JCheckBox(_("Automatically associate .ino files with Arduino"));
- pane.add(autoAssociateBox);
- d = autoAssociateBox.getPreferredSize();
- autoAssociateBox.setBounds(left, top, d.width + 10, d.height);
- right = Math.max(right, left + d.width);
- top += d.height + GUI_BETWEEN;
-
- // If using portable mode, it's bad manner to change PC setting.
- if (Base.getPortableFolder() != null)
- autoAssociateBox.setEnabled(false);
- }
-
- // [ ] save when verifying or uploading
-
- saveVerifyUploadBox = new JCheckBox(_("Save when verifying or uploading"));
- pane.add(saveVerifyUploadBox);
- d = saveVerifyUploadBox.getPreferredSize();
- saveVerifyUploadBox.setBounds(left, top, d.width + 10, d.height);
- right = Math.max(right, left + d.width);
- top += d.height + GUI_BETWEEN;
-
- // proxy settings
-
- JPanel proxySettingsContainer = new JPanel();
- pane.add(proxySettingsContainer);
- setupProxySettingsFieldSet(proxySettingsContainer);
- d = proxySettingsContainer.getMinimumSize();
- proxySettingsContainer.setBounds(left, top, d.width + 10, d.height);
- right = Math.max(right, left + d.width);
- top += d.height + GUI_BETWEEN;
-
- // boards manager additional urls
- box = Box.createHorizontalBox();
- label = new JLabel(_("Additional Boards Manager URLs: "));
- box.add(label);
- additionalBoardsManagerField = new JTextField(30);
- box.add(additionalBoardsManagerField);
- JButton extendedAdditionalUrlFieldWindow = new JButton(new ImageIcon(Base.getThemeImage("newwindow.gif", dialog)));
- extendedAdditionalUrlFieldWindow.addActionListener(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- final AdditionalBoardsManagerURLTextArea additionalBoardsManagerURLTextArea = new AdditionalBoardsManagerURLTextArea(dialog);
- additionalBoardsManagerURLTextArea.setText(additionalBoardsManagerField.getText());
- additionalBoardsManagerURLTextArea.onOk(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- additionalBoardsManagerField.setText(additionalBoardsManagerURLTextArea.getText());
- }
- });
- additionalBoardsManagerURLTextArea.setVisible(true);
- }
- });
- box.add(extendedAdditionalUrlFieldWindow);
- pane.add(box);
- d = box.getPreferredSize();
- box.setBounds(left, top, d.width, d.height);
- top += d.height + GUI_BETWEEN;
-
- // More preferences are in the ...
-
- label = new JLabel(_("More preferences can be edited directly in the file"));
- pane.add(label);
- d = label.getPreferredSize();
- label.setForeground(Color.gray);
- label.setBounds(left, top, d.width, d.height);
- right = Math.max(right, left + d.width);
- top += d.height; // + GUI_SMALL;
-
- label = new JLabel(PreferencesData.preferencesFile.getAbsolutePath());
- final JLabel clickable = label;
- label.addMouseListener(new MouseAdapter() {
- public void mousePressed(MouseEvent e) {
- Base.openFolder(PreferencesData.preferencesFile.getParentFile());
- }
-
- public void mouseEntered(MouseEvent e) {
- clickable.setForeground(new Color(0, 0, 140));
- }
-
- public void mouseExited(MouseEvent e) {
- clickable.setForeground(Color.BLACK);
- }
- });
- pane.add(label);
- d = label.getPreferredSize();
- label.setBounds(left, top, d.width, d.height);
- right = Math.max(right, left + d.width);
- top += d.height;
-
- label = new JLabel(_("(edit only when Arduino is not running)"));
- pane.add(label);
- d = label.getPreferredSize();
- label.setForeground(Color.gray);
- label.setBounds(left, top, d.width, d.height);
- right = Math.max(right, left + d.width);
- top += d.height; // + GUI_SMALL;
-
-
- // [ OK ] [ Cancel ] maybe these should be next to the message?
-
- button = new JButton(I18n.PROMPT_OK);
- button.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- applyFrame();
- disposeFrame();
- }
- });
- pane.add(button);
- d2 = button.getPreferredSize();
- BUTTON_HEIGHT = d2.height;
-
- h = right - (BUTTON_WIDTH + GUI_SMALL + BUTTON_WIDTH);
- button.setBounds(h, top, BUTTON_WIDTH, BUTTON_HEIGHT);
- h += BUTTON_WIDTH + GUI_SMALL;
-
- button = new JButton(I18n.PROMPT_CANCEL);
- button.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- disposeFrame();
- }
- });
- pane.add(button);
- button.setBounds(h, top, BUTTON_WIDTH, BUTTON_HEIGHT);
-
- top += BUTTON_HEIGHT + GUI_BETWEEN;
-
-
- // finish up
-
- wide = right + GUI_BIG;
- high = top + GUI_SMALL;
-
-
- // closing the window is same as hitting cancel button
-
- dialog.addWindowListener(new WindowAdapter() {
- public void windowClosing(WindowEvent e) {
- disposeFrame();
- }
- });
-
- ActionListener disposer = new ActionListener() {
- public void actionPerformed(ActionEvent actionEvent) {
- disposeFrame();
- }
- };
- Base.registerWindowCloseKeys(dialog.getRootPane(), disposer);
- Base.setIcon(dialog);
-
- Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
- dialog.setLocation((screen.width - wide) / 2,
- (screen.height - high) / 2);
-
- dialog.pack(); // get insets
- Insets insets = dialog.getInsets();
- dialog.setSize(wide + insets.left + insets.right,
- high + insets.top + insets.bottom);
-
-
- // handle window closing commands for ctrl/cmd-W or hitting ESC.
-
- pane.addKeyListener(new KeyAdapter() {
- public void keyPressed(KeyEvent e) {
- //System.out.println(e);
- KeyStroke wc = Editor.WINDOW_CLOSE_KEYSTROKE;
- if ((e.getKeyCode() == KeyEvent.VK_ESCAPE) ||
- (KeyStroke.getKeyStrokeForEvent(e).equals(wc))) {
- disposeFrame();
- }
- }
- });
- }
-
- @SuppressWarnings("unchecked")
- // //GEN-BEGIN:initComponents
- private void setupProxySettingsFieldSet(Container pane) {
-
- JPanel proxySettingsPanel = new JPanel();
-
- JLabel proxyHTTPServerLabel = new JLabel();
- proxyHTTPServer = new JTextField();
- JLabel proxyHTTPPortLabel = new JLabel();
- proxyHTTPPort = new JTextField();
- JLabel proxyHTTPSServerLabel = new JLabel();
- proxyHTTPSServer = new JTextField();
- JLabel proxyHTTPSPortLabel = new JLabel();
- proxyHTTPSPort = new JTextField();
- JLabel proxyUserLabel = new JLabel();
- proxyUser = new JTextField();
- JLabel proxyPasswordLabel = new JLabel();
- proxyPassword = new JPasswordField();
-
- proxySettingsPanel.setBorder(BorderFactory.createTitledBorder(_("Proxy Settings")));
-
- proxyHTTPServerLabel.setText(_("Server (HTTP):"));
-
- proxyHTTPServer.setColumns(10);
-
- proxyHTTPPortLabel.setText(_("Port (HTTP):"));
-
- proxyHTTPPort.setColumns(10);
-
- proxyHTTPSServerLabel.setText(_("Server: (HTTPS)"));
-
- proxyHTTPSServer.setColumns(10);
-
- proxyHTTPSPortLabel.setText(_("Port (HTTPS):"));
-
- proxyHTTPSPort.setColumns(10);
-
- proxyUserLabel.setText(_("Username:"));
-
- proxyPasswordLabel.setText(_("Password:"));
-
- GroupLayout proxySettingsPanelLayout = new GroupLayout(proxySettingsPanel);
- proxySettingsPanel.setLayout(proxySettingsPanelLayout);
- proxySettingsPanelLayout.setHorizontalGroup(
- proxySettingsPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addGroup(proxySettingsPanelLayout.createSequentialGroup()
- .addContainerGap()
- .addGroup(proxySettingsPanelLayout.createParallelGroup(GroupLayout.Alignment.TRAILING)
- .addComponent(proxyUserLabel)
- .addComponent(proxyHTTPSServerLabel)
- .addComponent(proxyHTTPServerLabel))
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addGroup(proxySettingsPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING, false)
- .addComponent(proxyHTTPServer)
- .addComponent(proxyHTTPSServer)
- .addComponent(proxyUser))
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addGroup(proxySettingsPanelLayout.createParallelGroup(GroupLayout.Alignment.TRAILING)
- .addComponent(proxyPasswordLabel)
- .addComponent(proxyHTTPSPortLabel)
- .addComponent(proxyHTTPPortLabel))
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addGroup(proxySettingsPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING, false)
- .addComponent(proxyPassword)
- .addComponent(proxyHTTPSPort)
- .addComponent(proxyHTTPPort))
- .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- );
- proxySettingsPanelLayout.setVerticalGroup(
- proxySettingsPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addGroup(proxySettingsPanelLayout.createSequentialGroup()
- .addGroup(proxySettingsPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(proxyHTTPServerLabel)
- .addComponent(proxyHTTPServer, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- .addComponent(proxyHTTPPortLabel)
- .addComponent(proxyHTTPPort, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addGroup(proxySettingsPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(proxyHTTPSServerLabel)
- .addComponent(proxyHTTPSServer, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- .addComponent(proxyHTTPSPortLabel)
- .addComponent(proxyHTTPSPort, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addGroup(proxySettingsPanelLayout.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(proxyUserLabel)
- .addComponent(proxyUser, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- .addComponent(proxyPasswordLabel)
- .addComponent(proxyPassword, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)))
- );
-
- GroupLayout layout = new GroupLayout(pane);
- pane.setLayout(layout);
- layout.setHorizontalGroup(
- layout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addGroup(layout.createSequentialGroup()
- .addComponent(proxySettingsPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- );
- layout.setVerticalGroup(
- layout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addGroup(layout.createSequentialGroup()
- .addComponent(proxySettingsPanel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
- );
-
- }// //GEN-END:initComponents
- // .................................................................
-
-
- /**
- * Close the window after an OK or Cancel.
- */
- protected void disposeFrame() {
- dialog.dispose();
- }
-
-
- /**
- * Change internal settings based on what was chosen in the prefs,
- * then send a message to the editor saying that it's time to do the same.
- */
- protected void applyFrame() {
- // put each of the settings into the table
- PreferencesData.setBoolean("build.verbose", verboseCompilationBox.isSelected());
- PreferencesData.setBoolean("upload.verbose", verboseUploadBox.isSelected());
- PreferencesData.setBoolean("editor.linenumbers", displayLineNumbersBox.isSelected());
- PreferencesData.setBoolean("editor.code_folding", enableCodeFoldingBox.isSelected());
- PreferencesData.setBoolean("upload.verify", verifyUploadBox.isSelected());
- PreferencesData.setBoolean("editor.save_on_verify", saveVerifyUploadBox.isSelected());
-
-// setBoolean("sketchbook.closing_last_window_quits",
-// closingLastQuitsBox.isSelected());
- //setBoolean("sketchbook.prompt", sketchPromptBox.isSelected());
- //setBoolean("sketchbook.auto_clean", sketchCleanBox.isSelected());
-
- // if the sketchbook path has changed, rebuild the menus
- String oldPath = PreferencesData.get("sketchbook.path");
- String newPath = sketchbookLocationField.getText();
- if (newPath.isEmpty()) {
- if (Base.getPortableFolder() == null)
- newPath = editor.base.getDefaultSketchbookFolderOrPromptForIt().toString();
- else
- newPath = Base.getPortableSketchbookFolder();
- }
- if (!newPath.equals(oldPath)) {
- editor.base.rebuildSketchbookMenus();
- PreferencesData.set("sketchbook.path", newPath);
- }
-
- PreferencesData.setBoolean("editor.external", externalEditorBox.isSelected());
- PreferencesData.setBoolean("update.check", checkUpdatesBox.isSelected());
- PreferencesData.setBoolean("editor.save_on_verify", saveVerifyUploadBox.isSelected());
-
- /*
- // was gonna use this to check memory settings,
- // but it quickly gets much too messy
- if (getBoolean("run.options.memory")) {
- Process process = Runtime.getRuntime().exec(new String[] {
- "java", "-Xms" + memoryMin + "m", "-Xmx" + memoryMax + "m"
- });
- processInput = new SystemOutSiphon(process.getInputStream());
- processError = new MessageSiphon(process.getErrorStream(), this);
- }
- */
-
- String newSizeText = fontSizeField.getText();
- try {
- int newSize = Integer.parseInt(newSizeText.trim());
- String pieces[] = PApplet.split(PreferencesData.get("editor.font"), ',');
- pieces[2] = String.valueOf(newSize);
- PreferencesData.set("editor.font", PApplet.join(pieces, ','));
-
- } catch (Exception e) {
- System.err.println(I18n.format(_("ignoring invalid font size {0}"), newSizeText));
- }
-
- if (autoAssociateBox != null) {
- PreferencesData.setBoolean("platform.auto_file_type_associations", autoAssociateBox.isSelected());
- }
-
- PreferencesData.setBoolean("editor.update_extension", updateExtensionBox.isSelected());
-
- // adds the selected language to the preferences file
- Language newLanguage = (Language) comboLanguage.getSelectedItem();
- PreferencesData.set("editor.languages.current", newLanguage.isoCode);
-
- WarningItem warningItem = (WarningItem) comboWarnings.getSelectedItem();
- PreferencesData.set("compiler.warning_level", warningItem.getValue());
-
- PreferencesData.set("proxy.http.server", proxyHTTPServer.getText());
- try {
- PreferencesData.set("proxy.http.port", Integer.valueOf(proxyHTTPPort.getText()).toString());
- } catch (NumberFormatException e) {
- PreferencesData.remove("proxy.http.port");
- }
- PreferencesData.set("proxy.https.server", proxyHTTPSServer.getText());
- try {
- PreferencesData.set("proxy.https.port", Integer.valueOf(proxyHTTPSPort.getText()).toString());
- } catch (NumberFormatException e) {
- PreferencesData.remove("proxy.https.port");
- }
- PreferencesData.set("proxy.user", proxyUser.getText());
- PreferencesData.set("proxy.password", new String(proxyPassword.getPassword()));
-
- PreferencesData.set("boardsmanager.additional.urls", additionalBoardsManagerField.getText().replace("\r\n", "\n").replace("\r", "\n").replace("\n", ","));
-
- editor.applyPreferences();
- }
-
-
- protected void showFrame(Editor editor) {
- this.editor = editor;
-
- // set all settings entry boxes to their actual status
- verboseCompilationBox.setSelected(PreferencesData.getBoolean("build.verbose"));
- verboseUploadBox.setSelected(PreferencesData.getBoolean("upload.verbose"));
- displayLineNumbersBox.setSelected(PreferencesData.getBoolean("editor.linenumbers"));
- enableCodeFoldingBox.setSelected(PreferencesData.getBoolean("editor.code_folding"));
- verifyUploadBox.setSelected(PreferencesData.getBoolean("upload.verify"));
-
- //closingLastQuitsBox.
- // setSelected(getBoolean("sketchbook.closing_last_window_quits"));
- //sketchPromptBox.
- // setSelected(getBoolean("sketchbook.prompt"));
- //sketchCleanBox.
- // setSelected(getBoolean("sketchbook.auto_clean"));
-
- sketchbookLocationField.setText(PreferencesData.get("sketchbook.path"));
- externalEditorBox.setSelected(PreferencesData.getBoolean("editor.external"));
- checkUpdatesBox.setSelected(PreferencesData.getBoolean("update.check"));
- saveVerifyUploadBox.setSelected(PreferencesData.getBoolean("editor.save_on_verify"));
-
- if (autoAssociateBox != null) {
- autoAssociateBox.setSelected(PreferencesData.getBoolean("platform.auto_file_type_associations"));
- }
-
- updateExtensionBox.setSelected(PreferencesData.get("editor.update_extension") == null || PreferencesData.getBoolean("editor.update_extension"));
-
- proxyHTTPServer.setText(PreferencesData.get("proxy.http.server"));
- try {
- proxyHTTPPort.setText(Integer.toString(PreferencesData.getInteger("proxy.http.port", 8080)));
- } catch (NumberFormatException e) {
- proxyHTTPPort.setText("");
- }
- proxyHTTPSServer.setText(PreferencesData.get("proxy.https.server"));
- try {
- proxyHTTPSPort.setText(Integer.toString(PreferencesData.getInteger("proxy.https.port", 8443)));
- } catch (NumberFormatException e) {
- proxyHTTPSPort.setText("");
- }
- proxyUser.setText(PreferencesData.get("proxy.user"));
- proxyPassword.setText(PreferencesData.get("proxy.password"));
-
- additionalBoardsManagerField.setText(PreferencesData.get("boardsmanager.additional.urls"));
-
- dialog.setLocationRelativeTo(editor);
- dialog.setVisible(true);
- }
-
@Deprecated
protected static void save() {
PreferencesData.save();
diff --git a/app/src/processing/app/syntax/SketchTextAreaDefaultInputMap.java b/app/src/processing/app/syntax/SketchTextAreaDefaultInputMap.java
index bf134b60846..5d806f4c9f9 100644
--- a/app/src/processing/app/syntax/SketchTextAreaDefaultInputMap.java
+++ b/app/src/processing/app/syntax/SketchTextAreaDefaultInputMap.java
@@ -33,8 +33,11 @@ public SketchTextAreaDefaultInputMap() {
if (isOSX) {
put(KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, defaultModifier), SketchTextAreaEditorKit.rtaDeleteLineToCursorAction);
+
put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, defaultModifier), DefaultEditorKit.beginAction);
put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, defaultModifier), DefaultEditorKit.endAction);
+
+ remove(KeyStroke.getKeyStroke(KeyEvent.VK_J, defaultModifier));
}
}
}
diff --git a/arduino-core/src/processing/app/I18n.java b/arduino-core/src/processing/app/I18n.java
index d6480d99ef7..ef71ce3652a 100644
--- a/arduino-core/src/processing/app/I18n.java
+++ b/arduino-core/src/processing/app/I18n.java
@@ -24,11 +24,11 @@ public class I18n {
// prompt text stuff
- static String PROMPT_YES;
- static String PROMPT_NO;
- static String PROMPT_CANCEL;
- static String PROMPT_OK;
- static String PROMPT_BROWSE;
+ public static String PROMPT_YES;
+ public static String PROMPT_NO;
+ public static String PROMPT_CANCEL;
+ public static String PROMPT_OK;
+ public static String PROMPT_BROWSE;
static protected void init(String language) throws MissingResourceException {
String[] languageParts = language.split("_");
diff --git a/arduino-core/src/processing/app/PreferencesData.java b/arduino-core/src/processing/app/PreferencesData.java
index 6ee44fb344e..7733b08e4e5 100644
--- a/arduino-core/src/processing/app/PreferencesData.java
+++ b/arduino-core/src/processing/app/PreferencesData.java
@@ -88,6 +88,10 @@ static public void init(File file) {
fixPreferences();
}
+ public static File getPreferencesFile() {
+ return preferencesFile;
+ }
+
private static void fixPreferences() {
String baud = get("serial.debug_rate");
if ("14400".equals(baud) || "28800".equals(baud)) {
diff --git a/libraries/Ethernet/src/EthernetClient.cpp b/libraries/Ethernet/src/EthernetClient.cpp
index a592bfdc956..1feed4c424a 100644
--- a/libraries/Ethernet/src/EthernetClient.cpp
+++ b/libraries/Ethernet/src/EthernetClient.cpp
@@ -131,12 +131,17 @@ void EthernetClient::stop() {
disconnect(_sock);
unsigned long start = millis();
- // wait a second for the connection to close
- while (status() != SnSR::CLOSED && millis() - start < 1000)
+ // wait up to a second for the connection to close
+ uint8_t s;
+ do {
+ s = status();
+ if (s == SnSR::CLOSED)
+ break; // exit the loop
delay(1);
+ } while (millis() - start < 1000);
// if it hasn't closed, close it forcefully
- if (status() != SnSR::CLOSED)
+ if (s != SnSR::CLOSED)
close(_sock);
EthernetClass::_server_port[_sock] = 0;
diff --git a/libraries/Ethernet/src/EthernetServer.cpp b/libraries/Ethernet/src/EthernetServer.cpp
index 6d6ce8c8027..cfa813eb7be 100644
--- a/libraries/Ethernet/src/EthernetServer.cpp
+++ b/libraries/Ethernet/src/EthernetServer.cpp
@@ -54,12 +54,13 @@ EthernetClient EthernetServer::available()
for (int sock = 0; sock < MAX_SOCK_NUM; sock++) {
EthernetClient client(sock);
- if (EthernetClass::_server_port[sock] == _port &&
- (client.status() == SnSR::ESTABLISHED ||
- client.status() == SnSR::CLOSE_WAIT)) {
- if (client.available()) {
- // XXX: don't always pick the lowest numbered socket.
- return client;
+ if (EthernetClass::_server_port[sock] == _port) {
+ uint8_t s = client.status();
+ if (s == SnSR::ESTABLISHED || s == SnSR::CLOSE_WAIT) {
+ if (client.available()) {
+ // XXX: don't always pick the lowest numbered socket.
+ return client;
+ }
}
}
}
diff --git a/libraries/LiquidCrystal/examples/setCursor/setCursor.ino b/libraries/LiquidCrystal/examples/setCursor/setCursor.ino
index 4790b68b804..df75f7fe98c 100644
--- a/libraries/LiquidCrystal/examples/setCursor/setCursor.ino
+++ b/libraries/LiquidCrystal/examples/setCursor/setCursor.ino
@@ -7,7 +7,7 @@
can usually tell them by the 16-pin interface.
This sketch prints to all the positions of the LCD using the
- setCursor(0 method:
+ setCursor() method:
The circuit:
* LCD RS pin to digital pin 12
@@ -56,9 +56,9 @@ void loop() {
// loop from ASCII 'a' to ASCII 'z':
for (int thisLetter = 'a'; thisLetter <= 'z'; thisLetter++) {
// loop over the columns:
- for (int thisCol = 0; thisCol < numRows; thisCol++) {
+ for (int thisRow = 0; thisRow < numRows; thisRow++) {
// loop over the rows:
- for (int thisRow = 0; thisRow < numCols; thisRow++) {
+ for (int thisCol = 0; thisCol < numCols; thisCol++) {
// set the cursor position:
lcd.setCursor(thisCol, thisRow);
// print the letter: