From 67d4b6d082aa4e47f7979f8943c35983044a6542 Mon Sep 17 00:00:00 2001 From: skylarmt Date: Mon, 22 Dec 2014 15:36:30 -0700 Subject: [PATCH] Make theme update on visible windows, add key shortcuts for ribbon --- src/net/apocalypselabs/symat/CodeEditor.form | 6 ++ src/net/apocalypselabs/symat/CodeEditor.java | 52 +++++++++++---- src/net/apocalypselabs/symat/Debug.java | 6 ++ src/net/apocalypselabs/symat/Help.form | 1 + src/net/apocalypselabs/symat/Help.java | 19 +++++- src/net/apocalypselabs/symat/Interpreter.form | 8 +++ src/net/apocalypselabs/symat/Interpreter.java | 66 +++++++++++++++---- src/net/apocalypselabs/symat/MainGUI.java | 19 +++++- 8 files changed, 148 insertions(+), 29 deletions(-) diff --git a/src/net/apocalypselabs/symat/CodeEditor.form b/src/net/apocalypselabs/symat/CodeEditor.form index 89de9a1..37c4bdc 100644 --- a/src/net/apocalypselabs/symat/CodeEditor.form +++ b/src/net/apocalypselabs/symat/CodeEditor.form @@ -169,6 +169,9 @@ + + + @@ -266,6 +269,9 @@ + + + diff --git a/src/net/apocalypselabs/symat/CodeEditor.java b/src/net/apocalypselabs/symat/CodeEditor.java index cfaf660..8a27a3b 100644 --- a/src/net/apocalypselabs/symat/CodeEditor.java +++ b/src/net/apocalypselabs/symat/CodeEditor.java @@ -81,18 +81,8 @@ public class CodeEditor extends javax.swing.JInternalFrame { } codeBox.setFont(new Font(Font.MONOSPACED, Font.PLAIN, font_size)); outputBox.setFont(new Font(Font.MONOSPACED, Font.PLAIN, font_size)); - - if (PrefStorage.getSetting("theme").equals("dark")) { - outputBox.setBackground(new Color(41,49,52)); - outputBox.setForeground(Color.WHITE); - setBackground(Color.DARK_GRAY); - setEditorTheme("dark"); - } else { - outputBox.setBackground(Color.WHITE); - outputBox.setForeground(Color.BLACK); - setBackground(Color.LIGHT_GRAY); - setEditorTheme("default"); - } + + loadTheme(); codeBox.setCodeFoldingEnabled(true); codeBox.setAntiAliasingEnabled(true); @@ -100,6 +90,12 @@ public class CodeEditor extends javax.swing.JInternalFrame { sp = new RTextScrollPane(codeBox); sp.setFoldIndicatorEnabled(true); editPanel.add(sp); + codeBox.addMouseListener(new java.awt.event.MouseAdapter() { + @Override + public void mouseClicked(java.awt.event.MouseEvent evt) { + formMouseClicked(evt); + } + }); sp.setVisible(true); codeBox.setVisible(true); codeBox.requestFocus(); @@ -114,6 +110,20 @@ public class CodeEditor extends javax.swing.JInternalFrame { } } + private void loadTheme() { + if (PrefStorage.getSetting("theme").equals("dark")) { + outputBox.setBackground(new Color(41, 49, 52)); + outputBox.setForeground(Color.WHITE); + setBackground(Color.DARK_GRAY); + setEditorTheme("dark"); + } else { + outputBox.setBackground(Color.WHITE); + outputBox.setForeground(Color.BLACK); + setBackground(Color.LIGHT_GRAY); + setEditorTheme("default"); + } + } + /** * 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 @@ -165,6 +175,11 @@ public class CodeEditor extends javax.swing.JInternalFrame { setFrameIcon(new javax.swing.ImageIcon(getClass().getResource("/net/apocalypselabs/symat/icons/editor.png"))); // NOI18N setMinimumSize(new java.awt.Dimension(125, 50)); setPreferredSize(new java.awt.Dimension(550, 375)); + addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + formMouseClicked(evt); + } + }); jSplitPane1.setDividerLocation(200); jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT); @@ -177,6 +192,11 @@ public class CodeEditor extends javax.swing.JInternalFrame { outputBox.setLineWrap(true); outputBox.setRows(3); outputBox.setWrapStyleWord(true); + outputBox.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + outputBoxMouseClicked(evt); + } + }); jScrollPane1.setViewportView(outputBox); javax.swing.GroupLayout outputPanelLayout = new javax.swing.GroupLayout(outputPanel); @@ -444,6 +464,14 @@ public class CodeEditor extends javax.swing.JInternalFrame { codeBox.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_PYTHON); }//GEN-LAST:event_pythonOptionActionPerformed + private void formMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMouseClicked + loadTheme(); + }//GEN-LAST:event_formMouseClicked + + private void outputBoxMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_outputBoxMouseClicked + formMouseClicked(evt); + }//GEN-LAST:event_outputBoxMouseClicked + private void saveFile(String content, String path) throws IOException { try (PrintStream out = new PrintStream(new FileOutputStream(path))) { diff --git a/src/net/apocalypselabs/symat/Debug.java b/src/net/apocalypselabs/symat/Debug.java index 99e1997..37e97a6 100644 --- a/src/net/apocalypselabs/symat/Debug.java +++ b/src/net/apocalypselabs/symat/Debug.java @@ -48,4 +48,10 @@ public class Debug { System.err.println(data); } } + + public static void stacktrace(Exception e) { + if (DEBUG) { + e.printStackTrace(); + } + } } diff --git a/src/net/apocalypselabs/symat/Help.form b/src/net/apocalypselabs/symat/Help.form index c6059e1..9a730da 100644 --- a/src/net/apocalypselabs/symat/Help.form +++ b/src/net/apocalypselabs/symat/Help.form @@ -79,6 +79,7 @@ + diff --git a/src/net/apocalypselabs/symat/Help.java b/src/net/apocalypselabs/symat/Help.java index 4430a27..4fe3638 100644 --- a/src/net/apocalypselabs/symat/Help.java +++ b/src/net/apocalypselabs/symat/Help.java @@ -43,6 +43,10 @@ public class Help extends javax.swing.JInternalFrame { */ public Help() { initComponents(); + loadTheme(); + } + + private void loadTheme() { if (PrefStorage.getSetting("theme").equals("dark")) { setBackgroundOfBrowser(Color.BLACK); setBackgroundOfBrowser(Color.WHITE); @@ -57,13 +61,13 @@ public class Help extends javax.swing.JInternalFrame { setBackground(Color.LIGHT_GRAY); } } - + private void setBackgroundOfBrowser(Color c) { - UIDefaults defaults = new UIDefaults(); + /*UIDefaults defaults = new UIDefaults(); defaults.put("EditorPane.backgroundPainter", c); topicBrowser.putClientProperty("Nimbus.Overrides", defaults); topicBrowser.putClientProperty("Nimbus.Overrides.InheritDefaults", true); - topicBrowser.setBackground(c); + topicBrowser.setBackground(c);*/ } public void loadTopic(String name) { @@ -126,6 +130,11 @@ public class Help extends javax.swing.JInternalFrame { }); topicList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); topicList.setSelectedIndex(0); + topicList.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + topicListMouseClicked(evt); + } + }); topicList.addListSelectionListener(new javax.swing.event.ListSelectionListener() { public void valueChanged(javax.swing.event.ListSelectionEvent evt) { topicListValueChanged(evt); @@ -165,6 +174,10 @@ public class Help extends javax.swing.JInternalFrame { loadTopic("welcome"); }//GEN-LAST:event_formComponentShown + private void topicListMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_topicListMouseClicked + loadTheme(); + }//GEN-LAST:event_topicListMouseClicked + // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; diff --git a/src/net/apocalypselabs/symat/Interpreter.form b/src/net/apocalypselabs/symat/Interpreter.form index 624e66c..3cf3397 100644 --- a/src/net/apocalypselabs/symat/Interpreter.form +++ b/src/net/apocalypselabs/symat/Interpreter.form @@ -68,6 +68,9 @@ + + + @@ -131,6 +134,9 @@ + + + @@ -139,6 +145,7 @@ + @@ -148,6 +155,7 @@ + diff --git a/src/net/apocalypselabs/symat/Interpreter.java b/src/net/apocalypselabs/symat/Interpreter.java index 11275bb..b655cf7 100644 --- a/src/net/apocalypselabs/symat/Interpreter.java +++ b/src/net/apocalypselabs/symat/Interpreter.java @@ -76,19 +76,7 @@ public class Interpreter extends javax.swing.JInternalFrame { inputBox.setFont(new Font(Font.MONOSPACED, Font.PLAIN, font_size)); // Set theme - if (PrefStorage.getSetting("theme").equals("dark")) { - mainBox.setBackground(new Color(41,49,52)); - mainBox.setForeground(Color.WHITE); - inputBox.setBackground(new Color(41,49,52)); - inputBox.setForeground(Color.WHITE); - setBackground(Color.DARK_GRAY); - } else { - mainBox.setBackground(Color.WHITE); - mainBox.setForeground(Color.BLACK); - inputBox.setBackground(Color.WHITE); - inputBox.setForeground(Color.BLACK); - setBackground(Color.LIGHT_GRAY); - } + loadTheme(); // Misc. setup mainBox.setText(">>"); @@ -127,6 +115,11 @@ public class Interpreter extends javax.swing.JInternalFrame { setResizable(true); setTitle("Shell"); setFrameIcon(new javax.swing.ImageIcon(getClass().getResource("/net/apocalypselabs/symat/icons/shell.png"))); // NOI18N + addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + formMouseClicked(evt); + } + }); mainBox.setEditable(false); mainBox.setColumns(20); @@ -138,8 +131,18 @@ public class Interpreter extends javax.swing.JInternalFrame { mainBox.setWrapStyleWord(true); DefaultCaret caret = (DefaultCaret)mainBox.getCaret(); caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); + mainBox.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + mainBoxMouseClicked(evt); + } + }); jScrollPane1.setViewportView(mainBox); + inputBox.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + inputBoxMouseClicked(evt); + } + }); inputBox.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(java.awt.event.KeyEvent evt) { inputBoxKeyPressed(evt); @@ -150,6 +153,11 @@ public class Interpreter extends javax.swing.JInternalFrame { }); runBtn.setText("Run"); + runBtn.addMouseListener(new java.awt.event.MouseAdapter() { + public void mouseClicked(java.awt.event.MouseEvent evt) { + runBtnMouseClicked(evt); + } + }); runBtn.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { runBtnActionPerformed(evt); @@ -228,6 +236,22 @@ public class Interpreter extends javax.swing.JInternalFrame { doRunCode(); }//GEN-LAST:event_runBtnActionPerformed + private void loadTheme() { + if (PrefStorage.getSetting("theme").equals("dark")) { + mainBox.setBackground(new Color(41,49,52)); + mainBox.setForeground(Color.WHITE); + inputBox.setBackground(new Color(41,49,52)); + inputBox.setForeground(Color.WHITE); + setBackground(Color.DARK_GRAY); + } else { + mainBox.setBackground(Color.WHITE); + mainBox.setForeground(Color.BLACK); + inputBox.setBackground(Color.WHITE); + inputBox.setForeground(Color.BLACK); + setBackground(Color.LIGHT_GRAY); + } + } + private void inputBoxKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_inputBoxKeyTyped if (evt.getKeyChar() == '\n') { doRunCode(); @@ -282,6 +306,22 @@ public class Interpreter extends javax.swing.JInternalFrame { } }//GEN-LAST:event_pythonMenuActionPerformed + private void formMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMouseClicked + loadTheme(); + }//GEN-LAST:event_formMouseClicked + + private void mainBoxMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_mainBoxMouseClicked + formMouseClicked(evt); + }//GEN-LAST:event_mainBoxMouseClicked + + private void inputBoxMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_inputBoxMouseClicked + formMouseClicked(evt); + }//GEN-LAST:event_inputBoxMouseClicked + + private void runBtnMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_runBtnMouseClicked + formMouseClicked(evt); + }//GEN-LAST:event_runBtnMouseClicked + private void doRunCode() { String code = inputBox.getText(); mainBox.append(" " + code + "\n"); diff --git a/src/net/apocalypselabs/symat/MainGUI.java b/src/net/apocalypselabs/symat/MainGUI.java index ca8ce8f..e7a7ff9 100644 --- a/src/net/apocalypselabs/symat/MainGUI.java +++ b/src/net/apocalypselabs/symat/MainGUI.java @@ -29,6 +29,7 @@ package net.apocalypselabs.symat; import java.awt.Color; import java.awt.Graphics; +import java.awt.event.KeyEvent; import java.beans.PropertyVetoException; import java.io.BufferedReader; import java.io.IOException; @@ -37,6 +38,7 @@ import java.io.InputStreamReader; import java.net.URL; import javax.swing.ImageIcon; import javax.swing.JInternalFrame; +import javax.swing.KeyStroke; /** * @@ -76,8 +78,10 @@ public class MainGUI extends javax.swing.JFrame { } catch (IOException | NumberFormatException e) { System.err.println("Fail: Cannot check update server. \n" + " Assuming local copy up-to-date."); - e.printStackTrace(); + Debug.stacktrace(e); } + + setButtonShortcuts(); // Open shell unless prog was run with argument if (argfile.equals("")) { @@ -92,6 +96,19 @@ public class MainGUI extends javax.swing.JFrame { updateDisplay(); } + /** + * Set keyboard shortcuts for buttons. + */ + private void setButtonShortcuts() { + shellBtn.setMnemonic(KeyEvent.VK_S); + editorBtn.setMnemonic(KeyEvent.VK_D); + graphBtn.setMnemonic(KeyEvent.VK_G); + helpBtn.setMnemonic(KeyEvent.VK_M); + tabs.setMnemonicAt(1, KeyEvent.VK_A); + tabs.setMnemonicAt(2, KeyEvent.VK_T); + tabs.setMnemonicAt(3, KeyEvent.VK_E); + } + /** * (Re)load display settings. */