1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-06-16 11:21:18 +03:00
Files
esp8266/app/src/processing/app/Preferences.java
2015-04-13 17:18:23 +02:00

922 lines
35 KiB
Java

/*
Part of the Processing project - http://processing.org
Copyright (c) 2004-09 Ben Fry and Casey Reas
Copyright (c) 2001-04 Massachusetts Institute of Technology
This program 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package processing.app;
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 static processing.app.I18n._;
/**
* Storage class for user preferences and environment settings.
* <P>
* 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.
* <p>
* 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.
* <p>
* 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.
* <p>
* Would also be possible to change this to use the Java Preferences API.
* Some useful articles
* <a href="http://www.onjava.com/pub/a/onjava/synd/2001/10/17/j2se.html">here</a> and
* <a href="http://www.particle.kth.se/~lindsey/JavaCourse/Book/Part1/Java/Chapter10/Preferences.html">here</a>.
* However, haven't implemented this yet for lack of time, but more
* importantly, because it would entail writing to the registry (on Windows),
* or an obscure file location (on Mac OS X) and make it far more difficult to
* find the preferences to tweak them by hand (no! stay out of regedit!)
* or to reset the preferences by simply deleting the preferences.txt file.
*/
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;
/**
* Standardized button height. Mac OS X 10.3 (Java 1.4) wants 29,
* presumably because it now includes the blue border, where it didn't
* in Java 1.3. Windows XP only wants 23 (not sure what default Linux
* would be). Because of the disparity, on Mac OS X, it will be set
* inside a static block.
*/
static public int BUTTON_HEIGHT = 24;
// value for the size bars, buttons, etc
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 = 10;
static final int GUI_SMALL = 6;
// gui elements
JFrame dialog;
int wide, high;
JTextField sketchbookLocationField;
JCheckBox exportSeparateBox;
JCheckBox verboseCompilationBox;
JCheckBox verboseUploadBox;
JCheckBox displayLineNumbersBox;
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;
// the calling editor, so updates can be applied
Editor editor;
static protected void init(File 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 = Preferences.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_flags", "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;
// [ ] 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;
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;
// 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")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//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))
);
}// </editor-fold>//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("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_flags", warningItem.getValue());
Preferences.set("proxy.http.server", proxyHTTPServer.getText());
try {
Preferences.set("proxy.http.port", Integer.valueOf(proxyHTTPPort.getText()).toString());
} catch (NumberFormatException e) {
Preferences.remove("proxy.http.port");
}
Preferences.set("proxy.https.server", proxyHTTPSServer.getText());
try {
Preferences.set("proxy.https.port", Integer.valueOf(proxyHTTPSPort.getText()).toString());
} catch (NumberFormatException e) {
Preferences.remove("proxy.https.port");
}
Preferences.set("proxy.user", proxyUser.getText());
Preferences.set("proxy.password", new String(proxyPassword.getPassword()));
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"));
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(Preferences.get("proxy.http.server"));
try {
proxyHTTPPort.setText(Integer.toString(Preferences.getInteger("proxy.http.port", 8080)));
} catch (NumberFormatException e) {
proxyHTTPPort.setText("");
}
proxyHTTPSServer.setText(Preferences.get("proxy.https.server"));
try {
proxyHTTPSPort.setText(Integer.toString(Preferences.getInteger("proxy.https.port", 8443)));
} catch (NumberFormatException e) {
proxyHTTPSPort.setText("");
}
proxyUser.setText(Preferences.get("proxy.user"));
proxyPassword.setText(Preferences.get("proxy.password"));
dialog.setLocationRelativeTo(editor);
dialog.setVisible(true);
}
static protected void save() {
PreferencesData.save();
}
// .................................................................
static public String get(String attribute) {
return PreferencesData.get(attribute);
}
static public String get(String attribute, String defaultValue) {
return PreferencesData.get(attribute, defaultValue);
}
public static boolean has(String key) {
return PreferencesData.has(key);
}
public static void remove(String key) {
PreferencesData.remove(key);
}
static public void set(String attribute, String value) {
PreferencesData.set(attribute, value);
}
static public boolean getBoolean(String attribute) {
return PreferencesData.getBoolean(attribute);
}
static public void setBoolean(String attribute, boolean value) {
PreferencesData.setBoolean(attribute, value);
}
static public int getInteger(String attribute) {
return PreferencesData.getInteger(attribute);
}
static public int getInteger(String attribute, int defaultValue) {
if (PreferencesData.has(attribute)) {
return PreferencesData.getInteger(attribute);
}
return defaultValue;
}
static public void setInteger(String key, int value) {
PreferencesData.setInteger(key, value);
}
static public Font getFont(String attr) {
Font font = PreferencesHelper.getFont(PreferencesData.prefs, attr);
if (font == null) {
String value = PreferencesData.defaults.get(attr);
PreferencesData.prefs.put(attr, value);
font = PreferencesHelper.getFont(PreferencesData.prefs, attr);
}
return font;
}
// get a copy of the Preferences
static public PreferencesMap getMap()
{
return PreferencesData.getMap();
}
// Decide wether changed preferences will be saved. When value is
// false, Preferences.save becomes a no-op.
static public void setDoSave(boolean value)
{
PreferencesData.setDoSave(value);
}
}