1 /* 2 * This file is part of Arduino. 3 * 4 * Copyright 2015 Arduino LLC (http://www.arduino.cc/) 5 * 6 * Arduino is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 19 * 20 * As a special exception, you may use this file as part of a free software 21 * library without restriction. Specifically, if other files instantiate 22 * templates or use macros or inline functions from this file, or you compile 23 * this file and link it with other files to produce an executable, this 24 * file does not by itself cause the resulting executable to be covered by 25 * the GNU General Public License. This exception does not however 26 * invalidate any other reasons why the executable file might be covered by 27 * the GNU General Public License. 28 */ 29 30 package cc.arduino.view.preferences; 31 32 import cc.arduino.Constants; 33 import cc.arduino.i18n.Language; 34 import cc.arduino.i18n.Languages; 35 import processing.app.Base; 36 import processing.app.BaseNoGui; 37 import processing.app.I18n; 38 import processing.app.PreferencesData; 39 import processing.app.Theme; 40 import processing.app.helpers.FileUtils; 41 import processing.app.legacy.PApplet; 42 43 import javax.swing.*; 44 import java.awt.*; 45 import java.awt.event.WindowEvent; 46 import java.io.File; 47 import java.util.LinkedList; 48 49 import static processing.app.I18n.tr; 50 51 public class Preferences extends javax.swing.JDialog { 52 53 private final WarningItem[] warningItems; 54 private final Base base; 55 56 private static class WarningItem { 57 private final String value; 58 private final String translation; 59 WarningItem(String value, String translation)60 public WarningItem(String value, String translation) { 61 this.value = value; 62 this.translation = translation; 63 } 64 getValue()65 public String getValue() { 66 return value; 67 } 68 69 @Override toString()70 public String toString() { 71 return translation; 72 } 73 } 74 Preferences(Window parent, Base base)75 public Preferences(Window parent, Base base) { 76 super(parent); 77 this.base = base; 78 79 this.warningItems = new WarningItem[]{ 80 new WarningItem("none", tr("None")), 81 new WarningItem("default", tr("Default")), 82 new WarningItem("more", tr("More")), 83 new WarningItem("all", tr("All")) 84 }; 85 86 initComponents(); 87 88 Base.registerWindowCloseKeys(getRootPane(), this::cancelButtonActionPerformed); 89 90 showPrerefencesData(); 91 } 92 93 /** 94 * This method is called from within the constructor to initialize the form. 95 * WARNING: Do NOT modify this code. The content of this method is always 96 * regenerated by the Form Editor. 97 */ 98 @SuppressWarnings("unchecked") 99 // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents initComponents()100 private void initComponents() { 101 102 proxyTypeButtonGroup = new javax.swing.ButtonGroup(); 103 manualProxyTypeButtonGroup = new javax.swing.ButtonGroup(); 104 javax.swing.JPanel jPanel2 = new javax.swing.JPanel(); 105 javax.swing.JTabbedPane jTabbedPane1 = new javax.swing.JTabbedPane(); 106 jPanel1 = new javax.swing.JPanel(); 107 sketchbookLocationLabel = new javax.swing.JLabel(); 108 sketchbookLocationField = new javax.swing.JTextField(); 109 browseButton = new javax.swing.JButton(); 110 comboLanguageLabel = new javax.swing.JLabel(); 111 comboLanguage = new JComboBox(Languages.languages); 112 requiresRestartLabel = new javax.swing.JLabel(); 113 fontSizeLabel = new javax.swing.JLabel(); 114 fontSizeField = new javax.swing.JTextField(); 115 showVerboseLabel = new javax.swing.JLabel(); 116 verboseCompilationBox = new javax.swing.JCheckBox(); 117 verboseUploadBox = new javax.swing.JCheckBox(); 118 comboWarningsLabel = new javax.swing.JLabel(); 119 comboWarnings = new JComboBox(warningItems); 120 additionalBoardsManagerLabel = new javax.swing.JLabel(); 121 additionalBoardsManagerField = new javax.swing.JTextField(); 122 extendedAdditionalUrlFieldWindow = new javax.swing.JButton(); 123 morePreferencesLabel = new javax.swing.JLabel(); 124 preferencesFileLabel = new javax.swing.JLabel(); 125 arduinoNotRunningLabel = new javax.swing.JLabel(); 126 checkboxesContainer = new javax.swing.JPanel(); 127 displayLineNumbersBox = new javax.swing.JCheckBox(); 128 enableCodeFoldingBox = new javax.swing.JCheckBox(); 129 verifyUploadBox = new javax.swing.JCheckBox(); 130 externalEditorBox = new javax.swing.JCheckBox(); 131 cacheCompiledCore = new javax.swing.JCheckBox(); 132 checkUpdatesBox = new javax.swing.JCheckBox(); 133 updateExtensionBox = new javax.swing.JCheckBox(); 134 saveVerifyUploadBox = new javax.swing.JCheckBox(); 135 jLabel1 = new javax.swing.JLabel(); 136 jLabel2 = new javax.swing.JLabel(); 137 scaleSpinner = new javax.swing.JSpinner(); 138 autoScaleCheckBox = new javax.swing.JCheckBox(); 139 jLabel3 = new javax.swing.JLabel(); 140 javax.swing.JPanel jPanel4 = new javax.swing.JPanel(); 141 noProxy = new javax.swing.JRadioButton(); 142 autoProxy = new javax.swing.JRadioButton(); 143 manualProxy = new javax.swing.JRadioButton(); 144 autoProxyUsePAC = new javax.swing.JCheckBox(); 145 autoProxyPACURL = new javax.swing.JTextField(); 146 manualProxyHTTP = new javax.swing.JRadioButton(); 147 manualProxySOCKS = new javax.swing.JRadioButton(); 148 manualProxyHostNameLabel = new javax.swing.JLabel(); 149 manualProxyPortLabel = new javax.swing.JLabel(); 150 manualProxyHostName = new javax.swing.JTextField(); 151 manualProxyPort = new javax.swing.JTextField(); 152 manualProxyUsernameLabel = new javax.swing.JLabel(); 153 manualProxyUsername = new javax.swing.JTextField(); 154 manualProxyPasswordLabel = new javax.swing.JLabel(); 155 manualProxyPassword = new javax.swing.JPasswordField(); 156 autoProxyUsernameLabel = new javax.swing.JLabel(); 157 autoProxyUsername = new javax.swing.JTextField(); 158 autoProxyPassword = new javax.swing.JPasswordField(); 159 autoProxyPasswordLabel = new javax.swing.JLabel(); 160 javax.swing.JPanel jPanel3 = new javax.swing.JPanel(); 161 javax.swing.JButton okButton = new javax.swing.JButton(); 162 javax.swing.JButton cancelButton = new javax.swing.JButton(); 163 164 setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); 165 setTitle(tr("Preferences")); 166 setModal(true); 167 setResizable(false); 168 169 jPanel2.setLayout(new javax.swing.BoxLayout(jPanel2, javax.swing.BoxLayout.Y_AXIS)); 170 171 jTabbedPane1.setFocusable(false); 172 jTabbedPane1.setRequestFocusEnabled(false); 173 174 sketchbookLocationLabel.setText(tr("Sketchbook location:")); 175 176 sketchbookLocationField.setColumns(40); 177 178 browseButton.setText(I18n.PROMPT_BROWSE); 179 browseButton.addActionListener(new java.awt.event.ActionListener() { 180 public void actionPerformed(java.awt.event.ActionEvent evt) { 181 browseButtonActionPerformed(evt); 182 } 183 }); 184 185 comboLanguageLabel.setText(tr("Editor language: ")); 186 187 requiresRestartLabel.setText(tr(" (requires restart of Arduino)")); 188 189 fontSizeLabel.setText(tr("Editor font size: ")); 190 191 fontSizeField.setColumns(4); 192 193 showVerboseLabel.setText(tr("Show verbose output during: ")); 194 195 verboseCompilationBox.setText(tr("compilation ")); 196 197 verboseUploadBox.setText(tr("upload")); 198 199 comboWarningsLabel.setText(tr("Compiler warnings: ")); 200 201 additionalBoardsManagerLabel.setText(tr("Additional Boards Manager URLs: ")); 202 additionalBoardsManagerLabel.setToolTipText(tr("Enter a comma separated list of urls")); 203 204 additionalBoardsManagerField.setToolTipText(tr("Enter a comma separated list of urls")); 205 206 extendedAdditionalUrlFieldWindow.setIcon(new ImageIcon(Theme.getThemeImage("newwindow", this, Theme.scale(16), Theme.scale(14)))); 207 extendedAdditionalUrlFieldWindow.setMargin(new java.awt.Insets(1, 1, 1, 1)); 208 extendedAdditionalUrlFieldWindow.addActionListener(new java.awt.event.ActionListener() { 209 public void actionPerformed(java.awt.event.ActionEvent evt) { 210 extendedAdditionalUrlFieldWindowActionPerformed(evt); 211 } 212 }); 213 214 morePreferencesLabel.setForeground(Color.GRAY); 215 morePreferencesLabel.setText(tr("More preferences can be edited directly in the file")); 216 217 preferencesFileLabel.setText(PreferencesData.getPreferencesFile().getAbsolutePath()); 218 preferencesFileLabel.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); 219 preferencesFileLabel.addMouseListener(new java.awt.event.MouseAdapter() { 220 public void mousePressed(java.awt.event.MouseEvent evt) { 221 preferencesFileLabelMousePressed(evt); 222 } 223 public void mouseExited(java.awt.event.MouseEvent evt) { 224 preferencesFileLabelMouseExited(evt); 225 } 226 public void mouseEntered(java.awt.event.MouseEvent evt) { 227 preferencesFileLabelMouseEntered(evt); 228 } 229 }); 230 231 arduinoNotRunningLabel.setForeground(Color.GRAY); 232 arduinoNotRunningLabel.setText(tr("(edit only when Arduino is not running)")); 233 234 checkboxesContainer.setLayout(new javax.swing.BoxLayout(checkboxesContainer, javax.swing.BoxLayout.Y_AXIS)); 235 236 displayLineNumbersBox.setText(tr("Display line numbers")); 237 checkboxesContainer.add(displayLineNumbersBox); 238 239 enableCodeFoldingBox.setText(tr("Enable Code Folding")); 240 checkboxesContainer.add(enableCodeFoldingBox); 241 242 verifyUploadBox.setText(tr("Verify code after upload")); 243 checkboxesContainer.add(verifyUploadBox); 244 245 externalEditorBox.setText(tr("Use external editor")); 246 checkboxesContainer.add(externalEditorBox); 247 248 cacheCompiledCore.setText(tr("Aggressively cache compiled core")); 249 checkboxesContainer.add(cacheCompiledCore); 250 251 checkUpdatesBox.setText(tr("Check for updates on startup")); 252 checkboxesContainer.add(checkUpdatesBox); 253 254 updateExtensionBox.setText(tr("Update sketch files to new extension on save (.pde -> .ino)")); 255 checkboxesContainer.add(updateExtensionBox); 256 257 saveVerifyUploadBox.setText(tr("Save when verifying or uploading")); 258 checkboxesContainer.add(saveVerifyUploadBox); 259 260 jLabel1.setText(tr("Interface scale:")); 261 262 jLabel2.setText(tr(" (requires restart of Arduino)")); 263 264 scaleSpinner.setModel(new javax.swing.SpinnerNumberModel(100, 100, 400, 5)); 265 scaleSpinner.setEnabled(false); 266 267 autoScaleCheckBox.setSelected(true); 268 autoScaleCheckBox.setText(tr("Automatic")); 269 autoScaleCheckBox.addItemListener(new java.awt.event.ItemListener() { 270 public void itemStateChanged(java.awt.event.ItemEvent evt) { 271 autoScaleCheckBoxItemStateChanged(evt); 272 } 273 }); 274 275 jLabel3.setText("%"); 276 277 javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); 278 jPanel1.setLayout(jPanel1Layout); 279 jPanel1Layout.setHorizontalGroup( 280 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 281 .addGroup(jPanel1Layout.createSequentialGroup() 282 .addContainerGap() 283 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 284 .addGroup(jPanel1Layout.createSequentialGroup() 285 .addComponent(sketchbookLocationField, javax.swing.GroupLayout.DEFAULT_SIZE, 553, Short.MAX_VALUE) 286 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 287 .addComponent(browseButton)) 288 .addComponent(checkboxesContainer, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 289 .addGroup(jPanel1Layout.createSequentialGroup() 290 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 291 .addGroup(jPanel1Layout.createSequentialGroup() 292 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 293 .addComponent(jLabel1) 294 .addComponent(comboWarningsLabel)) 295 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 296 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 297 .addComponent(comboWarnings, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 298 .addGroup(jPanel1Layout.createSequentialGroup() 299 .addComponent(autoScaleCheckBox) 300 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 301 .addComponent(scaleSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 302 .addGap(0, 0, 0) 303 .addComponent(jLabel3) 304 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 305 .addComponent(jLabel2)))) 306 .addGroup(jPanel1Layout.createSequentialGroup() 307 .addComponent(showVerboseLabel) 308 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 309 .addComponent(verboseCompilationBox) 310 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 311 .addComponent(verboseUploadBox)) 312 .addGroup(jPanel1Layout.createSequentialGroup() 313 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 314 .addComponent(comboLanguageLabel) 315 .addComponent(fontSizeLabel)) 316 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 317 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 318 .addComponent(fontSizeField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 319 .addGroup(jPanel1Layout.createSequentialGroup() 320 .addComponent(comboLanguage, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 321 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 322 .addComponent(requiresRestartLabel)))) 323 .addComponent(arduinoNotRunningLabel) 324 .addComponent(morePreferencesLabel) 325 .addComponent(preferencesFileLabel) 326 .addComponent(sketchbookLocationLabel) 327 .addGroup(jPanel1Layout.createSequentialGroup() 328 .addComponent(additionalBoardsManagerLabel) 329 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 330 .addComponent(additionalBoardsManagerField, javax.swing.GroupLayout.PREFERRED_SIZE, 500, javax.swing.GroupLayout.PREFERRED_SIZE) 331 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 332 .addComponent(extendedAdditionalUrlFieldWindow))) 333 .addGap(0, 0, Short.MAX_VALUE))) 334 .addContainerGap()) 335 ); 336 337 jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {comboLanguageLabel, comboWarningsLabel, fontSizeLabel, jLabel1, showVerboseLabel}); 338 339 jPanel1Layout.setVerticalGroup( 340 jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 341 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() 342 .addContainerGap() 343 .addComponent(sketchbookLocationLabel) 344 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 345 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 346 .addComponent(sketchbookLocationField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 347 .addComponent(browseButton)) 348 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 349 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 350 .addComponent(comboLanguageLabel) 351 .addComponent(comboLanguage, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 352 .addComponent(requiresRestartLabel)) 353 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 354 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 355 .addComponent(fontSizeLabel) 356 .addComponent(fontSizeField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 357 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 358 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 359 .addComponent(jLabel1) 360 .addComponent(jLabel2) 361 .addComponent(scaleSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 362 .addComponent(autoScaleCheckBox) 363 .addComponent(jLabel3)) 364 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 365 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 366 .addComponent(showVerboseLabel) 367 .addComponent(verboseCompilationBox) 368 .addComponent(verboseUploadBox)) 369 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 370 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 371 .addComponent(comboWarningsLabel) 372 .addComponent(comboWarnings, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 373 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 374 .addComponent(checkboxesContainer, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 375 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 376 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 377 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 378 .addComponent(additionalBoardsManagerLabel) 379 .addComponent(additionalBoardsManagerField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 380 .addComponent(extendedAdditionalUrlFieldWindow)) 381 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 382 .addComponent(morePreferencesLabel) 383 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 384 .addComponent(preferencesFileLabel) 385 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 386 .addComponent(arduinoNotRunningLabel) 387 .addContainerGap()) 388 ); 389 390 jTabbedPane1.addTab(tr("Settings"), jPanel1); 391 392 proxyTypeButtonGroup.add(noProxy); 393 noProxy.setText(tr("No proxy")); 394 noProxy.setActionCommand(Constants.PROXY_TYPE_NONE); 395 396 proxyTypeButtonGroup.add(autoProxy); 397 autoProxy.setText(tr("Auto-detect proxy settings")); 398 autoProxy.setActionCommand(Constants.PROXY_TYPE_AUTO); 399 autoProxy.addItemListener(new java.awt.event.ItemListener() { 400 public void itemStateChanged(java.awt.event.ItemEvent evt) { 401 autoProxyItemStateChanged(evt); 402 } 403 }); 404 405 proxyTypeButtonGroup.add(manualProxy); 406 manualProxy.setText(tr("Manual proxy configuration")); 407 manualProxy.setActionCommand(Constants.PROXY_TYPE_MANUAL); 408 manualProxy.addItemListener(new java.awt.event.ItemListener() { 409 public void itemStateChanged(java.awt.event.ItemEvent evt) { 410 manualProxyItemStateChanged(evt); 411 } 412 }); 413 414 autoProxyUsePAC.setText(tr("Automatic proxy configuration URL:")); 415 autoProxyUsePAC.addItemListener(new java.awt.event.ItemListener() { 416 public void itemStateChanged(java.awt.event.ItemEvent evt) { 417 autoProxyUsePACItemStateChanged(evt); 418 } 419 }); 420 421 manualProxyTypeButtonGroup.add(manualProxyHTTP); 422 manualProxyHTTP.setText("HTTP"); 423 manualProxyHTTP.setActionCommand(Constants.PROXY_MANUAL_TYPE_HTTP); 424 425 manualProxyTypeButtonGroup.add(manualProxySOCKS); 426 manualProxySOCKS.setText("SOCKS"); 427 manualProxySOCKS.setActionCommand(Constants.PROXY_MANUAL_TYPE_SOCKS); 428 429 manualProxyHostNameLabel.setText(tr("Host name:")); 430 431 manualProxyPortLabel.setText(tr("Port number:")); 432 433 manualProxyUsernameLabel.setText(tr("Username:")); 434 435 manualProxyPasswordLabel.setText(tr("Password:")); 436 437 manualProxyPassword.setToolTipText(""); 438 439 autoProxyUsernameLabel.setText(tr("Username:")); 440 441 autoProxyPassword.setToolTipText(""); 442 443 autoProxyPasswordLabel.setText(tr("Password:")); 444 445 javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4); 446 jPanel4.setLayout(jPanel4Layout); 447 jPanel4Layout.setHorizontalGroup( 448 jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 449 .addGroup(jPanel4Layout.createSequentialGroup() 450 .addContainerGap() 451 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 452 .addGroup(jPanel4Layout.createSequentialGroup() 453 .addGap(12, 12, 12) 454 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 455 .addComponent(autoProxyUsePAC) 456 .addGroup(jPanel4Layout.createSequentialGroup() 457 .addGap(12, 12, 12) 458 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 459 .addComponent(autoProxyUsernameLabel) 460 .addComponent(autoProxyPasswordLabel)))) 461 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 462 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 463 .addComponent(autoProxyPACURL) 464 .addGroup(jPanel4Layout.createSequentialGroup() 465 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 466 .addComponent(autoProxyUsername, javax.swing.GroupLayout.PREFERRED_SIZE, 178, javax.swing.GroupLayout.PREFERRED_SIZE) 467 .addComponent(autoProxyPassword, javax.swing.GroupLayout.PREFERRED_SIZE, 180, javax.swing.GroupLayout.PREFERRED_SIZE)) 468 .addGap(0, 0, Short.MAX_VALUE)))) 469 .addGroup(jPanel4Layout.createSequentialGroup() 470 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 471 .addComponent(noProxy) 472 .addComponent(autoProxy) 473 .addComponent(manualProxy) 474 .addGroup(jPanel4Layout.createSequentialGroup() 475 .addGap(12, 12, 12) 476 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 477 .addGroup(jPanel4Layout.createSequentialGroup() 478 .addComponent(manualProxyHTTP) 479 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 480 .addComponent(manualProxySOCKS)) 481 .addGroup(jPanel4Layout.createSequentialGroup() 482 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 483 .addComponent(manualProxyHostNameLabel) 484 .addComponent(manualProxyPortLabel) 485 .addComponent(manualProxyUsernameLabel) 486 .addComponent(manualProxyPasswordLabel)) 487 .addGap(18, 18, 18) 488 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 489 .addComponent(manualProxyHostName, javax.swing.GroupLayout.PREFERRED_SIZE, 541, javax.swing.GroupLayout.PREFERRED_SIZE) 490 .addComponent(manualProxyPort, javax.swing.GroupLayout.PREFERRED_SIZE, 74, javax.swing.GroupLayout.PREFERRED_SIZE) 491 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) 492 .addComponent(manualProxyPassword, javax.swing.GroupLayout.Alignment.LEADING) 493 .addComponent(manualProxyUsername, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 180, javax.swing.GroupLayout.PREFERRED_SIZE))))))) 494 .addGap(0, 0, Short.MAX_VALUE))) 495 .addContainerGap()) 496 ); 497 jPanel4Layout.setVerticalGroup( 498 jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 499 .addGroup(jPanel4Layout.createSequentialGroup() 500 .addContainerGap() 501 .addComponent(noProxy) 502 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 503 .addComponent(autoProxy) 504 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 505 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 506 .addComponent(autoProxyUsePAC) 507 .addComponent(autoProxyPACURL, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 508 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 509 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 510 .addComponent(autoProxyUsername, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 511 .addComponent(autoProxyUsernameLabel)) 512 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 513 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 514 .addComponent(autoProxyPasswordLabel) 515 .addComponent(autoProxyPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 516 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 517 .addComponent(manualProxy) 518 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 519 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 520 .addComponent(manualProxyHTTP) 521 .addComponent(manualProxySOCKS)) 522 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 523 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 524 .addComponent(manualProxyHostNameLabel) 525 .addComponent(manualProxyHostName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 526 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 527 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 528 .addComponent(manualProxyPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 529 .addComponent(manualProxyPortLabel)) 530 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 531 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 532 .addComponent(manualProxyUsername, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 533 .addComponent(manualProxyUsernameLabel)) 534 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 535 .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 536 .addComponent(manualProxyPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 537 .addComponent(manualProxyPasswordLabel)) 538 .addContainerGap(190, Short.MAX_VALUE)) 539 ); 540 541 jTabbedPane1.addTab(tr("Network"), jPanel4); 542 543 jPanel2.add(jTabbedPane1); 544 545 okButton.setText(I18n.PROMPT_OK); 546 okButton.addActionListener(new java.awt.event.ActionListener() { 547 public void actionPerformed(java.awt.event.ActionEvent evt) { 548 okButtonActionPerformed(evt); 549 } 550 }); 551 552 cancelButton.setText(I18n.PROMPT_CANCEL); 553 cancelButton.addActionListener(new java.awt.event.ActionListener() { 554 public void actionPerformed(java.awt.event.ActionEvent evt) { 555 cancelButtonActionPerformed(evt); 556 } 557 }); 558 559 javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); 560 jPanel3.setLayout(jPanel3Layout); 561 jPanel3Layout.setHorizontalGroup( 562 jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 563 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() 564 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 565 .addComponent(okButton) 566 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 567 .addComponent(cancelButton) 568 .addContainerGap()) 569 ); 570 jPanel3Layout.setVerticalGroup( 571 jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 572 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() 573 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 574 .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 575 .addComponent(okButton) 576 .addComponent(cancelButton)) 577 .addContainerGap()) 578 ); 579 580 jPanel2.add(jPanel3); 581 582 javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 583 getContentPane().setLayout(layout); 584 layout.setHorizontalGroup( 585 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 586 .addGap(0, 691, Short.MAX_VALUE) 587 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 588 .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 589 ); 590 layout.setVerticalGroup( 591 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 592 .addGap(0, 637, Short.MAX_VALUE) 593 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 594 .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 595 ); 596 597 pack(); 598 }// </editor-fold>//GEN-END:initComponents 599 cancelButtonActionPerformed(java.awt.event.ActionEvent evt)600 private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed 601 dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING)); 602 }//GEN-LAST:event_cancelButtonActionPerformed 603 okButtonActionPerformed(java.awt.event.ActionEvent evt)604 private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed 605 java.util.List<String> errors = validateData(); 606 if (!errors.isEmpty()) { 607 Base.showWarning(tr("Error"), errors.get(0), null); 608 return; 609 } 610 611 savePreferencesData(); 612 base.getEditors().forEach(processing.app.Editor::applyPreferences); 613 cancelButtonActionPerformed(evt); 614 }//GEN-LAST:event_okButtonActionPerformed 615 autoProxyItemStateChanged(java.awt.event.ItemEvent evt)616 private void autoProxyItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_autoProxyItemStateChanged 617 disableAllProxyFields(); 618 autoProxyFieldsSetEnabled(autoProxy.isSelected()); 619 }//GEN-LAST:event_autoProxyItemStateChanged 620 manualProxyItemStateChanged(java.awt.event.ItemEvent evt)621 private void manualProxyItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_manualProxyItemStateChanged 622 disableAllProxyFields(); 623 manualProxyFieldsSetEnabled(manualProxy.isSelected()); 624 }//GEN-LAST:event_manualProxyItemStateChanged 625 autoProxyUsePACItemStateChanged(java.awt.event.ItemEvent evt)626 private void autoProxyUsePACItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_autoProxyUsePACItemStateChanged 627 autoProxyPACFieldsSetEnabled(autoProxyUsePAC.isSelected()); 628 }//GEN-LAST:event_autoProxyUsePACItemStateChanged 629 preferencesFileLabelMouseEntered(java.awt.event.MouseEvent evt)630 private void preferencesFileLabelMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_preferencesFileLabelMouseEntered 631 preferencesFileLabel.setForeground(new Color(0, 0, 140)); 632 }//GEN-LAST:event_preferencesFileLabelMouseEntered 633 preferencesFileLabelMouseExited(java.awt.event.MouseEvent evt)634 private void preferencesFileLabelMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_preferencesFileLabelMouseExited 635 preferencesFileLabel.setForeground(new Color(76, 76, 76)); 636 }//GEN-LAST:event_preferencesFileLabelMouseExited 637 preferencesFileLabelMousePressed(java.awt.event.MouseEvent evt)638 private void preferencesFileLabelMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_preferencesFileLabelMousePressed 639 Base.openFolder(PreferencesData.getPreferencesFile().getParentFile()); 640 }//GEN-LAST:event_preferencesFileLabelMousePressed 641 extendedAdditionalUrlFieldWindowActionPerformed(java.awt.event.ActionEvent evt)642 private void extendedAdditionalUrlFieldWindowActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_extendedAdditionalUrlFieldWindowActionPerformed 643 final AdditionalBoardsManagerURLTextArea additionalBoardsManagerURLTextArea = new AdditionalBoardsManagerURLTextArea(this); 644 additionalBoardsManagerURLTextArea.setText(additionalBoardsManagerField.getText()); 645 additionalBoardsManagerURLTextArea.onOk(e -> additionalBoardsManagerField.setText(additionalBoardsManagerURLTextArea.getText())); 646 additionalBoardsManagerURLTextArea.setVisible(true); 647 }//GEN-LAST:event_extendedAdditionalUrlFieldWindowActionPerformed 648 browseButtonActionPerformed(java.awt.event.ActionEvent evt)649 private void browseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseButtonActionPerformed 650 File dflt = new File(sketchbookLocationField.getText()); 651 File file = Base.selectFolder(tr("Select new sketchbook location"), dflt, this); 652 if (file != null) { 653 String path = file.getAbsolutePath(); 654 sketchbookLocationField.setText(path); 655 } 656 }//GEN-LAST:event_browseButtonActionPerformed 657 autoScaleCheckBoxItemStateChanged(java.awt.event.ItemEvent evt)658 private void autoScaleCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_autoScaleCheckBoxItemStateChanged 659 scaleSpinner.setEnabled(!autoScaleCheckBox.isSelected()); 660 }//GEN-LAST:event_autoScaleCheckBoxItemStateChanged 661 662 // Variables declaration - do not modify//GEN-BEGIN:variables 663 private javax.swing.JTextField additionalBoardsManagerField; 664 private javax.swing.JLabel additionalBoardsManagerLabel; 665 private javax.swing.JLabel arduinoNotRunningLabel; 666 private javax.swing.JRadioButton autoProxy; 667 private javax.swing.JTextField autoProxyPACURL; 668 private javax.swing.JPasswordField autoProxyPassword; 669 private javax.swing.JLabel autoProxyPasswordLabel; 670 private javax.swing.JCheckBox autoProxyUsePAC; 671 private javax.swing.JTextField autoProxyUsername; 672 private javax.swing.JLabel autoProxyUsernameLabel; 673 private javax.swing.JCheckBox autoScaleCheckBox; 674 private javax.swing.JButton browseButton; 675 private javax.swing.JCheckBox checkUpdatesBox; 676 private javax.swing.JPanel checkboxesContainer; 677 private javax.swing.JComboBox comboLanguage; 678 private javax.swing.JLabel comboLanguageLabel; 679 private javax.swing.JComboBox comboWarnings; 680 private javax.swing.JLabel comboWarningsLabel; 681 private javax.swing.JCheckBox displayLineNumbersBox; 682 private javax.swing.JCheckBox enableCodeFoldingBox; 683 private javax.swing.JButton extendedAdditionalUrlFieldWindow; 684 private javax.swing.JCheckBox externalEditorBox; 685 private javax.swing.JCheckBox cacheCompiledCore; 686 private javax.swing.JTextField fontSizeField; 687 private javax.swing.JLabel fontSizeLabel; 688 private javax.swing.JLabel jLabel1; 689 private javax.swing.JLabel jLabel2; 690 private javax.swing.JLabel jLabel3; 691 private javax.swing.JPanel jPanel1; 692 private javax.swing.JRadioButton manualProxy; 693 private javax.swing.JRadioButton manualProxyHTTP; 694 private javax.swing.JTextField manualProxyHostName; 695 private javax.swing.JLabel manualProxyHostNameLabel; 696 private javax.swing.JPasswordField manualProxyPassword; 697 private javax.swing.JLabel manualProxyPasswordLabel; 698 private javax.swing.JTextField manualProxyPort; 699 private javax.swing.JLabel manualProxyPortLabel; 700 private javax.swing.JRadioButton manualProxySOCKS; 701 private javax.swing.ButtonGroup manualProxyTypeButtonGroup; 702 private javax.swing.JTextField manualProxyUsername; 703 private javax.swing.JLabel manualProxyUsernameLabel; 704 private javax.swing.JLabel morePreferencesLabel; 705 private javax.swing.JRadioButton noProxy; 706 private javax.swing.JLabel preferencesFileLabel; 707 private javax.swing.ButtonGroup proxyTypeButtonGroup; 708 private javax.swing.JLabel requiresRestartLabel; 709 private javax.swing.JCheckBox saveVerifyUploadBox; 710 private javax.swing.JSpinner scaleSpinner; 711 private javax.swing.JLabel showVerboseLabel; 712 private javax.swing.JTextField sketchbookLocationField; 713 private javax.swing.JLabel sketchbookLocationLabel; 714 private javax.swing.JCheckBox updateExtensionBox; 715 private javax.swing.JCheckBox verboseCompilationBox; 716 private javax.swing.JCheckBox verboseUploadBox; 717 private javax.swing.JCheckBox verifyUploadBox; 718 // End of variables declaration//GEN-END:variables 719 validateData()720 private java.util.List<String> validateData() { 721 java.util.List<String> errors = new LinkedList<>(); 722 if (FileUtils.isSubDirectory(new File(sketchbookLocationField.getText()), new File(PreferencesData.get("runtime.ide.path")))) { 723 errors.add(tr("The specified sketchbook folder contains your copy of the IDE.\nPlease choose a different folder for your sketchbook.")); 724 } 725 return errors; 726 } 727 savePreferencesData()728 private void savePreferencesData() { 729 String oldPath = PreferencesData.get("sketchbook.path"); 730 String newPath = sketchbookLocationField.getText(); 731 if (newPath.isEmpty()) { 732 if (BaseNoGui.getPortableFolder() == null) { 733 newPath = base.getDefaultSketchbookFolderOrPromptForIt().toString(); 734 } else { 735 newPath = BaseNoGui.getPortableSketchbookFolder(); 736 } 737 } 738 if (!newPath.equals(oldPath)) { 739 base.rebuildSketchbookMenus(); 740 PreferencesData.set("sketchbook.path", newPath); 741 } 742 743 Language newLanguage = (Language) comboLanguage.getSelectedItem(); 744 PreferencesData.set("editor.languages.current", newLanguage.getIsoCode()); 745 746 String newSizeText = fontSizeField.getText(); 747 try { 748 int newSize = Integer.parseInt(newSizeText.trim()); 749 String pieces[] = PApplet.split(PreferencesData.get("editor.font"), ','); 750 pieces[2] = String.valueOf(newSize); 751 PreferencesData.set("editor.font", PApplet.join(pieces, ',')); 752 753 } catch (Exception e) { 754 System.err.println(I18n.format(tr("ignoring invalid font size {0}"), newSizeText)); 755 } 756 757 if (autoScaleCheckBox.isSelected()) { 758 PreferencesData.set("gui.scale", "auto"); 759 } else { 760 PreferencesData.set("gui.scale", scaleSpinner.getValue().toString()); 761 } 762 763 // put each of the settings into the table 764 PreferencesData.setBoolean("build.verbose", verboseCompilationBox.isSelected()); 765 PreferencesData.setBoolean("upload.verbose", verboseUploadBox.isSelected()); 766 767 WarningItem warningItem = (WarningItem) comboWarnings.getSelectedItem(); 768 PreferencesData.set("compiler.warning_level", warningItem.getValue()); 769 770 PreferencesData.setBoolean("editor.linenumbers", displayLineNumbersBox.isSelected()); 771 772 PreferencesData.setBoolean("editor.code_folding", enableCodeFoldingBox.isSelected()); 773 774 PreferencesData.setBoolean("upload.verify", verifyUploadBox.isSelected()); 775 776 PreferencesData.setBoolean("editor.save_on_verify", saveVerifyUploadBox.isSelected()); 777 778 PreferencesData.setBoolean("editor.external", externalEditorBox.isSelected()); 779 780 PreferencesData.setBoolean("compiler.cache_core", cacheCompiledCore.isSelected()); 781 782 PreferencesData.setBoolean("update.check", checkUpdatesBox.isSelected()); 783 784 PreferencesData.setBoolean("editor.update_extension", updateExtensionBox.isSelected()); 785 786 PreferencesData.setBoolean("editor.save_on_verify", saveVerifyUploadBox.isSelected()); 787 788 PreferencesData.set("boardsmanager.additional.urls", additionalBoardsManagerField.getText().replace("\r\n", "\n").replace("\r", "\n").replace("\n", ",")); 789 790 PreferencesData.set(Constants.PREF_PROXY_TYPE, proxyTypeButtonGroup.getSelection().getActionCommand()); 791 PreferencesData.set(Constants.PREF_PROXY_PAC_URL, autoProxyUsePAC.isSelected() ? autoProxyPACURL.getText() : ""); 792 PreferencesData.set(Constants.PREF_PROXY_MANUAL_TYPE, manualProxyTypeButtonGroup.getSelection().getActionCommand()); 793 PreferencesData.set(Constants.PREF_PROXY_MANUAL_HOSTNAME, manualProxyHostName.getText()); 794 PreferencesData.set(Constants.PREF_PROXY_MANUAL_PORT, manualProxyPort.getText()); 795 PreferencesData.set(Constants.PREF_PROXY_MANUAL_USERNAME, manualProxyUsername.getText()); 796 PreferencesData.set(Constants.PREF_PROXY_MANUAL_PASSWORD, String.valueOf(manualProxyPassword.getPassword())); 797 PreferencesData.set(Constants.PREF_PROXY_AUTO_USERNAME, autoProxyUsername.getText()); 798 PreferencesData.set(Constants.PREF_PROXY_AUTO_PASSWORD, String.valueOf(autoProxyPassword.getPassword())); 799 } 800 showPrerefencesData()801 private void showPrerefencesData() { 802 sketchbookLocationField.setText(PreferencesData.get("sketchbook.path")); 803 804 String currentLanguageISOCode = PreferencesData.get("editor.languages.current"); 805 for (Language language : Languages.languages) { 806 if (language.getIsoCode().equals(currentLanguageISOCode)) { 807 comboLanguage.setSelectedItem(language); 808 } 809 } 810 811 Font editorFont = PreferencesData.getFont("editor.font"); 812 fontSizeField.setText(String.valueOf(editorFont.getSize())); 813 814 try { 815 int scale = PreferencesData.getInteger("gui.scale", -1); 816 if (scale != -1) { 817 autoScaleCheckBox.setSelected(false); 818 scaleSpinner.setValue(scale); 819 } 820 } catch (NumberFormatException ignore) { 821 // In any case defaults to "auto" 822 } 823 824 verboseCompilationBox.setSelected(PreferencesData.getBoolean("build.verbose")); 825 verboseUploadBox.setSelected(PreferencesData.getBoolean("upload.verbose")); 826 827 String currentWarningLevel = PreferencesData.get("compiler.warning_level", "none"); 828 for (WarningItem item : warningItems) { 829 if (currentWarningLevel.equals(item.getValue())) { 830 comboWarnings.setSelectedItem(item); 831 } 832 } 833 834 displayLineNumbersBox.setSelected(PreferencesData.getBoolean("editor.linenumbers")); 835 836 enableCodeFoldingBox.setSelected(PreferencesData.getBoolean("editor.code_folding")); 837 838 verifyUploadBox.setSelected(PreferencesData.getBoolean("upload.verify")); 839 840 externalEditorBox.setSelected(PreferencesData.getBoolean("editor.external")); 841 842 cacheCompiledCore.setSelected(PreferencesData.get("compiler.cache_core") == null || PreferencesData.getBoolean("compiler.cache_core")); 843 844 checkUpdatesBox.setSelected(PreferencesData.getBoolean("update.check")); 845 846 updateExtensionBox.setSelected(PreferencesData.get("editor.update_extension") == null || PreferencesData.getBoolean("editor.update_extension")); 847 848 saveVerifyUploadBox.setSelected(PreferencesData.getBoolean("editor.save_on_verify")); 849 850 additionalBoardsManagerField.setText(PreferencesData.get("boardsmanager.additional.urls")); 851 852 disableAllProxyFields(); 853 String proxyType = PreferencesData.get(Constants.PREF_PROXY_TYPE, Constants.PROXY_TYPE_AUTO); 854 855 if (Constants.PROXY_TYPE_NONE.equals(proxyType)) { 856 noProxy.setSelected(true); 857 } else if (Constants.PROXY_TYPE_AUTO.equals(proxyType)) { 858 autoProxy.setSelected(true); 859 autoProxyFieldsSetEnabled(true); 860 if (!PreferencesData.get(Constants.PREF_PROXY_PAC_URL, "").isEmpty()) { 861 autoProxyUsePAC.setSelected(true); 862 autoProxyPACURL.setText(PreferencesData.get(Constants.PREF_PROXY_PAC_URL)); 863 autoProxyUsername.setText(PreferencesData.get(Constants.PREF_PROXY_AUTO_USERNAME)); 864 autoProxyPassword.setText(PreferencesData.get(Constants.PREF_PROXY_AUTO_PASSWORD)); 865 } 866 } else { 867 manualProxy.setSelected(true); 868 manualProxyFieldsSetEnabled(true); 869 manualProxyHostName.setText(PreferencesData.get(Constants.PREF_PROXY_MANUAL_HOSTNAME)); 870 manualProxyPort.setText(PreferencesData.get(Constants.PREF_PROXY_MANUAL_PORT)); 871 manualProxyUsername.setText(PreferencesData.get(Constants.PREF_PROXY_MANUAL_USERNAME)); 872 manualProxyPassword.setText(PreferencesData.get(Constants.PREF_PROXY_MANUAL_PASSWORD)); 873 } 874 875 String selectedManualProxyType = PreferencesData.get(Constants.PREF_PROXY_MANUAL_TYPE, Constants.PROXY_MANUAL_TYPE_HTTP); 876 manualProxyHTTP.setSelected(Constants.PROXY_MANUAL_TYPE_HTTP.equals(selectedManualProxyType)); 877 manualProxySOCKS.setSelected(Constants.PROXY_MANUAL_TYPE_SOCKS.equals(selectedManualProxyType)); 878 } 879 manualProxyFieldsSetEnabled(boolean enabled)880 private void manualProxyFieldsSetEnabled(boolean enabled) { 881 manualProxySOCKS.setEnabled(enabled); 882 manualProxyHTTP.setEnabled(enabled); 883 manualProxyHostNameLabel.setEnabled(enabled); 884 manualProxyHostName.setEnabled(enabled); 885 manualProxyPortLabel.setEnabled(enabled); 886 manualProxyPort.setEnabled(enabled); 887 manualProxyUsernameLabel.setEnabled(enabled); 888 manualProxyUsername.setEnabled(enabled); 889 manualProxyPasswordLabel.setEnabled(enabled); 890 manualProxyPassword.setEnabled(enabled); 891 } 892 autoProxyFieldsSetEnabled(boolean enabled)893 private void autoProxyFieldsSetEnabled(boolean enabled) { 894 autoProxyUsePAC.setEnabled(enabled); 895 autoProxyPACFieldsSetEnabled(enabled && autoProxyUsePAC.isSelected()); 896 } 897 autoProxyPACFieldsSetEnabled(boolean enabled)898 private void autoProxyPACFieldsSetEnabled(boolean enabled) { 899 autoProxyPACURL.setEnabled(enabled); 900 autoProxyUsername.setEnabled(enabled); 901 autoProxyUsernameLabel.setEnabled(enabled); 902 autoProxyPassword.setEnabled(enabled); 903 autoProxyPasswordLabel.setEnabled(enabled); 904 } 905 disableAllProxyFields()906 private void disableAllProxyFields() { 907 autoProxyFieldsSetEnabled(false); 908 manualProxyFieldsSetEnabled(false); 909 } 910 } 911