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.
*/