From 1e61cd6b4c515bcf82cf3a4ecb6e96648be6ef48 Mon Sep 17 00:00:00 2001 From: "ricardo.jl.rufino" Date: Wed, 22 Apr 2015 16:57:34 -0300 Subject: [PATCH] preferences for syntax highlighting theme --- app/src/processing/app/Editor.java | 11 ++- app/src/processing/app/Preferences.java | 22 ++++++ .../processing/app/syntax/SketchTextArea.java | 22 +++--- build/shared/lib/preferences.txt | 2 + build/shared/lib/theme/syntax/dark.xml | 78 +++++++++++++++++++ build/shared/lib/theme/syntax/default.xml | 69 ++++++++++++++++ 6 files changed, 190 insertions(+), 14 deletions(-) create mode 100644 build/shared/lib/theme/syntax/dark.xml create mode 100644 build/shared/lib/theme/syntax/default.xml diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java index d5b2e035b..796e12bd5 100644 --- a/app/src/processing/app/Editor.java +++ b/app/src/processing/app/Editor.java @@ -253,11 +253,11 @@ public class Editor extends JFrame implements RunnerListener { lineStatus = new EditorLineStatus(textarea); consolePanel.add(lineStatus, BorderLayout.SOUTH); - //scrollPane = new RTextScrollPane(textarea); - + // RTextScrollPane scrollPane = new RTextScrollPane(textarea, true); scrollPane.setViewportBorder(BorderFactory.createEmptyBorder()); - scrollPane.setIconRowHeaderEnabled(true); + scrollPane.setLineNumbersEnabled(Preferences.getBoolean("editor.linenumbers")); + scrollPane.setIconRowHeaderEnabled(false); Gutter gutter = scrollPane.getGutter(); gutter.setBookmarkingEnabled(false); @@ -450,7 +450,7 @@ public class Editor extends JFrame implements RunnerListener { saveMenuItem.setEnabled(!external); saveAsMenuItem.setEnabled(!external); - textarea.setMarginLineEnabled(PreferencesData.getBoolean("editor.linenumbers")); + scrollPane.setLineNumbersEnabled(PreferencesData.getBoolean("editor.linenumbers")); if (external) { // disable line highlight and turn off the caret when disabling @@ -479,6 +479,8 @@ public class Editor extends JFrame implements RunnerListener { //sketchbook.rebuildMenus(); // For 0126, moved into Base, which will notify all editors. //base.rebuildMenusAsync(); + + textarea.setTheme(Preferences.get("editor.syntax_theme")); } @@ -956,6 +958,7 @@ public class Editor extends JFrame implements RunnerListener { SketchTextArea textArea = new SketchTextArea(); textArea.requestFocusInWindow(); textArea.setMarkOccurrences(true); + textArea.setMarginLineEnabled(false); textArea.setCodeFoldingEnabled(PreferencesData.getBoolean("editor.codefolding")); textArea.setAntiAliasingEnabled(PreferencesData.getBoolean("editor.antialias")); // textArea.setClearWhitespaceLinesEnabled(false); diff --git a/app/src/processing/app/Preferences.java b/app/src/processing/app/Preferences.java index e951f3e46..dd5da7eaa 100644 --- a/app/src/processing/app/Preferences.java +++ b/app/src/processing/app/Preferences.java @@ -230,6 +230,7 @@ public class Preferences { JCheckBox autoAssociateBox; JComboBox comboLanguage; JComboBox comboWarnings; + JComboBox comboSyntaxThemes; JCheckBox saveVerifyUploadBox; JTextField proxyHTTPServer; JTextField proxyHTTPPort; @@ -357,7 +358,27 @@ public class Preferences { fontSizeField.setText(String.valueOf(editorFont.getSize())); top += d.height + GUI_BETWEEN; + // Syntax Coloring [ ] + box = Box.createHorizontalBox(); + label = new JLabel(_("Syntax Coloring: ")); + box.add(label); + String[] syntaxThemes = new String[]{"default","dark"}; + comboSyntaxThemes = new JComboBox(syntaxThemes); + String currentTheme = PreferencesData.get("editor.syntax_theme", "default"); + for (String item : syntaxThemes) { + if (currentTheme.equals(item)) { + comboSyntaxThemes.setSelectedItem(item); + } + } + box.add(comboSyntaxThemes); + 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; + // Show verbose output during: [ ] compilation [ ] upload box = Box.createHorizontalBox(); @@ -746,6 +767,7 @@ public class Preferences { PreferencesData.set("sketchbook.path", newPath); } + PreferencesData.set("editor.syntax_theme", comboSyntaxThemes.getSelectedItem().toString()); PreferencesData.setBoolean("editor.external", externalEditorBox.isSelected()); PreferencesData.setBoolean("update.check", checkUpdatesBox.isSelected()); PreferencesData.setBoolean("editor.save_on_verify", saveVerifyUploadBox.isSelected()); diff --git a/app/src/processing/app/syntax/SketchTextArea.java b/app/src/processing/app/syntax/SketchTextArea.java index 61ee6559b..aff5adb5f 100644 --- a/app/src/processing/app/syntax/SketchTextArea.java +++ b/app/src/processing/app/syntax/SketchTextArea.java @@ -21,14 +21,12 @@ import javax.swing.text.Segment; import javax.swing.undo.UndoManager; import org.fife.ui.rsyntaxtextarea.*; +import org.fife.ui.rsyntaxtextarea.Theme; import org.fife.ui.rsyntaxtextarea.Token; import org.fife.ui.rsyntaxtextarea.focusabletip.FocusableTip; import org.fife.ui.rtextarea.RUndoManager; -import processing.app.Base; -import processing.app.BaseNoGui; -import processing.app.EditorLineStatus; -import processing.app.EditorListener; +import processing.app.*; /** * Arduino Sketch code editor based on RSyntaxTextArea (http://fifesoft.com/rsyntaxtextarea) @@ -57,9 +55,18 @@ public class SketchTextArea extends RSyntaxTextArea { protected void installFeatures(){ + setTheme(PreferencesData.get("editor.syntax_theme", "default")); + + setLinkGenerator(new DocLinkGenerator()); + + fixControlTab(); + installTokenMaker(); + } + + public void setTheme(String name){ FileInputStream defaultXmlInputStream = null; try { - defaultXmlInputStream = new FileInputStream(new File(BaseNoGui.getContentFile("lib"), "theme/syntax/default.xml")); + defaultXmlInputStream = new FileInputStream(new File(BaseNoGui.getContentFile("lib"), "theme/syntax/"+name+".xml")); Theme theme = Theme.load(defaultXmlInputStream); theme.apply(this); } catch (IOException e) { @@ -73,11 +80,6 @@ public class SketchTextArea extends RSyntaxTextArea { } } } - - setLinkGenerator(new DocLinkGenerator()); - - fixControlTab(); - installTokenMaker(); } // Removing the default focus traversal keys diff --git a/build/shared/lib/preferences.txt b/build/shared/lib/preferences.txt index 5dfde1ce2..27c45c52e 100644 --- a/build/shared/lib/preferences.txt +++ b/build/shared/lib/preferences.txt @@ -86,6 +86,8 @@ editor.window.height.min = 290 # tested to be 515 on Windows XP, this leaves some room #editor.window.height.min.windows = 530 +# Syntax coloring ( on lib/theme/syntax ) +editor.syntax_theme = default # font size for editor editor.font=Monospaced,plain,12 diff --git a/build/shared/lib/theme/syntax/dark.xml b/build/shared/lib/theme/syntax/dark.xml new file mode 100644 index 000000000..c9283f38d --- /dev/null +++ b/build/shared/lib/theme/syntax/dark.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +