Skip to content

Commit 794ef80

Browse files
Mumfreycmaglie
authored andcommitted
Support selectable, user-defined themes contained in zip files
1 parent 78ef37e commit 794ef80

File tree

4 files changed

+432
-24
lines changed

4 files changed

+432
-24
lines changed

app/src/cc/arduino/view/preferences/Preferences.java

+42-2
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import processing.app.I18n;
3939
import processing.app.PreferencesData;
4040
import processing.app.Theme;
41+
import processing.app.Theme.ZippedTheme;
4142
import processing.app.helpers.FileUtils;
4243
import processing.app.legacy.PApplet;
4344

@@ -46,6 +47,7 @@
4647
import java.awt.event.ItemEvent;
4748
import java.awt.event.WindowEvent;
4849
import java.io.File;
50+
import java.util.Collection;
4951
import java.util.LinkedList;
5052

5153
import static processing.app.I18n.tr;
@@ -159,6 +161,9 @@ private void initComponents() {
159161
autoProxyUsername = new javax.swing.JTextField();
160162
autoProxyPassword = new javax.swing.JPasswordField();
161163
autoProxyPasswordLabel = new javax.swing.JLabel();
164+
comboThemeLabel = new javax.swing.JLabel();
165+
comboTheme = new JComboBox();
166+
requiresRestartLabel2 = new javax.swing.JLabel();
162167
javax.swing.JPanel jPanel3 = new javax.swing.JPanel();
163168
javax.swing.JButton okButton = new javax.swing.JButton();
164169
javax.swing.JButton cancelButton = new javax.swing.JButton();
@@ -302,6 +307,12 @@ public void itemStateChanged(java.awt.event.ItemEvent evt) {
302307
autoScaleCheckBox.getAccessibleContext().setAccessibleName("Automatic interface scale (requires restart of Arduino");
303308

304309
jLabel3.setText("%");
310+
311+
comboThemeLabel.setText(tr("Theme: "));
312+
313+
comboTheme.getAccessibleContext().setAccessibleName("Theme (requires restart of Arduino)");
314+
315+
requiresRestartLabel2.setText(tr(" (requires restart of Arduino)"));
305316

306317
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
307318
jPanel1.setLayout(jPanel1Layout);
@@ -341,9 +352,14 @@ public void itemStateChanged(java.awt.event.ItemEvent evt) {
341352
.addGroup(jPanel1Layout.createSequentialGroup()
342353
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
343354
.addComponent(comboLanguageLabel)
344-
.addComponent(fontSizeLabel))
355+
.addComponent(fontSizeLabel)
356+
.addComponent(comboThemeLabel))
345357
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
346358
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
359+
.addGroup(jPanel1Layout.createSequentialGroup()
360+
.addComponent(comboTheme, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
361+
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
362+
.addComponent(requiresRestartLabel2))
347363
.addComponent(fontSizeField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
348364
.addGroup(jPanel1Layout.createSequentialGroup()
349365
.addComponent(comboLanguage, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
@@ -363,7 +379,7 @@ public void itemStateChanged(java.awt.event.ItemEvent evt) {
363379
.addContainerGap())
364380
);
365381

366-
jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {comboLanguageLabel, comboWarningsLabel, fontSizeLabel, jLabel1, showVerboseLabel});
382+
jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {comboLanguageLabel, comboWarningsLabel, fontSizeLabel, jLabel1, showVerboseLabel, comboThemeLabel});
367383

368384
jPanel1Layout.setVerticalGroup(
369385
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
@@ -391,6 +407,11 @@ public void itemStateChanged(java.awt.event.ItemEvent evt) {
391407
.addComponent(autoScaleCheckBox)
392408
.addComponent(jLabel3))
393409
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
410+
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
411+
.addComponent(comboThemeLabel)
412+
.addComponent(comboTheme, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
413+
.addComponent(requiresRestartLabel2))
414+
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
394415
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
395416
.addComponent(showVerboseLabel)
396417
.addComponent(verboseCompilationBox)
@@ -742,6 +763,9 @@ private void autoScaleCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//
742763
private javax.swing.JCheckBox verboseCompilationBox;
743764
private javax.swing.JCheckBox verboseUploadBox;
744765
private javax.swing.JCheckBox verifyUploadBox;
766+
private javax.swing.JComboBox comboTheme;
767+
private javax.swing.JLabel comboThemeLabel;
768+
private javax.swing.JLabel requiresRestartLabel2;
745769
// End of variables declaration//GEN-END:variables
746770

747771
private java.util.List<String> validateData() {
@@ -769,6 +793,12 @@ private void savePreferencesData() {
769793

770794
Language newLanguage = (Language) comboLanguage.getSelectedItem();
771795
PreferencesData.set("editor.languages.current", newLanguage.getIsoCode());
796+
797+
if (comboTheme.getSelectedIndex() == 0) {
798+
PreferencesData.set("theme.file", "");
799+
} else {
800+
PreferencesData.set("theme.file", ((ZippedTheme) comboTheme.getSelectedItem()).getKey());
801+
}
772802

773803
String newSizeText = fontSizeField.getText();
774804
try {
@@ -834,6 +864,16 @@ private void showPrerefencesData() {
834864
comboLanguage.setSelectedItem(language);
835865
}
836866
}
867+
868+
String selectedTheme = PreferencesData.get("theme.file", "");
869+
Collection<ZippedTheme> availablethemes = Theme.getAvailablethemes();
870+
comboTheme.addItem(tr("Default theme"));
871+
for (ZippedTheme theme : availablethemes) {
872+
comboTheme.addItem(theme);
873+
if (theme.getKey().equals(selectedTheme)) {
874+
comboTheme.setSelectedItem(theme);
875+
}
876+
}
837877

838878
Font editorFont = PreferencesData.getFont("editor.font");
839879
fontSizeField.setText(String.valueOf(editorFont.getSize()));

0 commit comments

Comments
 (0)