diff --git a/src/net/apocalypselabs/symat/CodeRunner.java b/src/net/apocalypselabs/symat/CodeRunner.java index 3ddbe70..66da2c7 100644 --- a/src/net/apocalypselabs/symat/CodeRunner.java +++ b/src/net/apocalypselabs/symat/CodeRunner.java @@ -75,6 +75,8 @@ public class CodeRunner { scriptLang = lang; switch (lang) { case "javascript": + case "js": + case "rhino": se = new ScriptEngineManager().getEngineByName("rhino"); wrapRequired = true; try { @@ -89,6 +91,7 @@ public class CodeRunner { } break; case "python": + case "py": se = new ScriptEngineManager().getEngineByName("python"); try { se.eval("from math import *\n" diff --git a/src/net/apocalypselabs/symat/Debug.java b/src/net/apocalypselabs/symat/Debug.java index fb9c91f..2e7a7c6 100644 --- a/src/net/apocalypselabs/symat/Debug.java +++ b/src/net/apocalypselabs/symat/Debug.java @@ -53,7 +53,7 @@ package net.apocalypselabs.symat; public class Debug { // If output should be on or off - public static final boolean DEBUG = false; + public static final boolean DEBUG = true; public static void println(Object data) { if (DEBUG) { diff --git a/src/net/apocalypselabs/symat/Functions.java b/src/net/apocalypselabs/symat/Functions.java index 37a8a24..aa40d2a 100644 --- a/src/net/apocalypselabs/symat/Functions.java +++ b/src/net/apocalypselabs/symat/Functions.java @@ -239,7 +239,8 @@ public class Functions { * @return The variable */ public static Object global(String name) { - return GLOBALS.get(name); + Object item = GLOBALS.get(name); + return item; } /** diff --git a/src/net/apocalypselabs/symat/Globals.form b/src/net/apocalypselabs/symat/Globals.form index 6e9a1a3..9cb49e0 100644 --- a/src/net/apocalypselabs/symat/Globals.form +++ b/src/net/apocalypselabs/symat/Globals.form @@ -45,6 +45,8 @@ + + @@ -61,6 +63,7 @@ + @@ -104,7 +107,7 @@ - + @@ -178,7 +181,6 @@ - @@ -196,5 +198,13 @@ + + + + + + + + diff --git a/src/net/apocalypselabs/symat/Globals.java b/src/net/apocalypselabs/symat/Globals.java index d6f2bdc..ece1122 100644 --- a/src/net/apocalypselabs/symat/Globals.java +++ b/src/net/apocalypselabs/symat/Globals.java @@ -45,6 +45,7 @@ */ package net.apocalypselabs.symat; +import java.util.Arrays; import javax.swing.JOptionPane; /** @@ -53,8 +54,6 @@ import javax.swing.JOptionPane; */ public class Globals extends javax.swing.JInternalFrame { - private int hashCode; - /** * Creates new form Globals */ @@ -80,6 +79,7 @@ public class Globals extends javax.swing.JInternalFrame { jScrollPane2 = new javax.swing.JScrollPane(); valBox = new javax.swing.JTextArea(); refreshBtn = new javax.swing.JButton(); + saveBtn = new javax.swing.JButton(); setClosable(true); setIconifiable(true); @@ -123,7 +123,7 @@ public class Globals extends javax.swing.JInternalFrame { jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() .addContainerGap() - .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 208, Short.MAX_VALUE)) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 212, Short.MAX_VALUE)) ); remBtn.setText("Remove"); @@ -135,7 +135,6 @@ public class Globals extends javax.swing.JInternalFrame { jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Value")); - valBox.setEditable(false); valBox.setColumns(1); valBox.setRows(1); valBox.setTabSize(4); @@ -164,6 +163,13 @@ public class Globals extends javax.swing.JInternalFrame { } }); + saveBtn.setText("Save"); + saveBtn.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + saveBtnActionPerformed(evt); + } + }); + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( @@ -180,6 +186,8 @@ public class Globals extends javax.swing.JInternalFrame { .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(remBtn) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(saveBtn) + .addGap(37, 37, 37) .addComponent(refreshBtn) .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) @@ -191,7 +199,8 @@ public class Globals extends javax.swing.JInternalFrame { .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(addBtn) .addComponent(remBtn) - .addComponent(refreshBtn)) + .addComponent(refreshBtn) + .addComponent(saveBtn)) .addGap(18, 18, 18) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) @@ -204,12 +213,30 @@ public class Globals extends javax.swing.JInternalFrame { private void keyListValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_keyListValueChanged if (keyList.getSelectedValue() != null) { + valBox.setEditable(true); try { - valBox.setText(Functions.GLOBALS.get( - keyList.getSelectedValue().toString()).toString()); + Object item = Functions.GLOBALS.get( + keyList.getSelectedValue()); + if (item.getClass().equals(sun.org.mozilla.javascript.internal.NativeArray.class)) { + Object[] arr = ((sun.org.mozilla.javascript.internal.NativeArray) item).toArray(); + valBox.setText(Arrays.toString(arr)); + valBox.setEditable(false); + } else if (item.getClass().equals(org.mozilla.javascript.NativeArray.class)) { + Object[] arr = ((org.mozilla.javascript.NativeArray) item).toArray(); + valBox.setText(Arrays.toString(arr)); + valBox.setEditable(false); +// } else if (item.getClass().equals(PyList.class)) { +// Object[] arr = ((PyList) item).toArray(); +// valBox.setText(Arrays.toString(arr)); +// valBox.setEditable(false); + } else { + valBox.setText(Functions.GLOBALS.get( + keyList.getSelectedValue()).toString()); + } } catch (Exception ex) { - valBox.setText("Error. Note some datatypes " - + "cannot be displayed here."); + valBox.setText("error"); + valBox.setEditable(false); + Debug.stacktrace(ex); } } }//GEN-LAST:event_keyListValueChanged @@ -249,12 +276,27 @@ public class Globals extends javax.swing.JInternalFrame { refreshList(); }//GEN-LAST:event_refreshBtnActionPerformed + private void saveBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveBtnActionPerformed + try { + setVar(keyList.getSelectedValue().toString(), valBox.getText()); + } catch (Exception ex) { + + } + }//GEN-LAST:event_saveBtnActionPerformed + private void refreshList() { - if (Functions.GLOBALS.hashCode() != hashCode) { - keyList.setListData(Functions.GLOBALS.keySet().toArray()); - hashCode = Functions.GLOBALS.hashCode(); - valBox.setText(""); + keyList.setListData(Functions.GLOBALS.keySet().toArray()); + valBox.setText(""); + } + + private void setVar(String key, String val) { + try { + double value = Double.parseDouble(val); + Functions.GLOBALS.put(key, value); + } catch (Exception ex) { + Functions.GLOBALS.put(key, val); } + refreshList(); } // Variables declaration - do not modify//GEN-BEGIN:variables @@ -266,6 +308,7 @@ public class Globals extends javax.swing.JInternalFrame { private javax.swing.JList keyList; private javax.swing.JButton refreshBtn; private javax.swing.JButton remBtn; + private javax.swing.JButton saveBtn; private javax.swing.JTextArea valBox; // End of variables declaration//GEN-END:variables } diff --git a/src/net/apocalypselabs/symat/SplashScreen.form b/src/net/apocalypselabs/symat/SplashScreen.form index e0ba19d..9041408 100644 --- a/src/net/apocalypselabs/symat/SplashScreen.form +++ b/src/net/apocalypselabs/symat/SplashScreen.form @@ -55,7 +55,7 @@ - + diff --git a/src/net/apocalypselabs/symat/SplashScreen.java b/src/net/apocalypselabs/symat/SplashScreen.java index 78ecada..13f4ca5 100644 --- a/src/net/apocalypselabs/symat/SplashScreen.java +++ b/src/net/apocalypselabs/symat/SplashScreen.java @@ -100,7 +100,7 @@ public class SplashScreen extends javax.swing.JFrame { } }); - dispLabel.setFont(MainGUI.ubuntuRegular.deriveFont(24.0F)); + dispLabel.setFont(MainGUI.ubuntuRegular.deriveFont(20.0F)); dispLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); dispLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/apocalypselabs/symat/splash.gif"))); // NOI18N dispLabel.setText("

   Loading...");