diff --git a/src/net/apocalypselabs/symat/CodeCompleter.java b/src/net/apocalypselabs/symat/CodeCompleter.java
index 06ad2da..51aab2e 100644
--- a/src/net/apocalypselabs/symat/CodeCompleter.java
+++ b/src/net/apocalypselabs/symat/CodeCompleter.java
@@ -102,6 +102,10 @@ public class CodeCompleter {
switch (fileid) {
case "functions":
String[] args = line.split("\\|");
+ // Prefix symat to Java commands
+ if (lang.equals("java")) {
+ args[0] = "symat." + args[0];
+ }
if (args.length == 2) {
provider.addCompletion(new BasicCompletion(provider, args[0], args[1]));
} else if (args.length == 3) {
diff --git a/src/net/apocalypselabs/symat/Editor.java b/src/net/apocalypselabs/symat/Editor.java
index b31c5d2..7ca7f41 100644
--- a/src/net/apocalypselabs/symat/Editor.java
+++ b/src/net/apocalypselabs/symat/Editor.java
@@ -92,9 +92,11 @@ public class Editor extends javax.swing.JInternalFrame {
private boolean fileChanged = false;
private CompletionProvider jscomp = new CodeCompleter("js").getProvider();
+ private CompletionProvider javacomp = new CodeCompleter("java").getProvider();
private CompletionProvider pycomp = new CodeCompleter("py").getProvider();
private AutoCompletion jsac = new AutoCompletion(jscomp);
private AutoCompletion pyac = new AutoCompletion(pycomp);
+ private AutoCompletion javaac = new AutoCompletion(javacomp);
/**
* The JavaScript language.
@@ -169,6 +171,9 @@ public class Editor extends javax.swing.JInternalFrame {
pythonOption.setSelected(true);
codeBox.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_PYTHON);
} else if (lang == JAVA) {
+ javaac.install(codeBox);
+ javascriptOption.setSelected(false);
+ javaOption.setSelected(true);
codeBox.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);
} else {
jsac.install(codeBox);
@@ -928,12 +933,14 @@ public class Editor extends javax.swing.JInternalFrame {
private void javascriptOptionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_javascriptOptionActionPerformed
codeBox.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVASCRIPT);
pyac.uninstall();
+ javaac.uninstall();
jsac.install(codeBox);
}//GEN-LAST:event_javascriptOptionActionPerformed
private void pythonOptionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pythonOptionActionPerformed
codeBox.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_PYTHON);
jsac.uninstall();
+ javaac.uninstall();
pyac.install(codeBox);
}//GEN-LAST:event_pythonOptionActionPerformed
@@ -1010,8 +1017,9 @@ public class Editor extends javax.swing.JInternalFrame {
private void javaOptionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_javaOptionActionPerformed
codeBox.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_JAVA);
- //pyac.uninstall();
- //jsac.install(codeBox);
+ pyac.uninstall();
+ jsac.uninstall();
+ javaac.install(codeBox);
}//GEN-LAST:event_javaOptionActionPerformed
private void createShared(String id) {
@@ -1057,14 +1065,15 @@ public class Editor extends javax.swing.JInternalFrame {
text += line + "\n";
}
} catch (Exception e) {
- text = "Error: Could not open embedded sample file.";
- if (ext.startsWith("j")) {
- text = "/* " + text + " */";
- } else {
- text = "## " + text;
- }
+ outputBox.setText("Error: Could not open embedded sample file.");
+// if (ext.startsWith("j")) {
+// text = "/* " + text + " */";
+// } else {
+// text = "## " + text;
+// }
}
- openString(text, name + "." + ext, false);
+ // Open it and remove the .txt ending on Java files
+ openString(text, name + "." + ext.replace(".txt", ""), false);
}
@Override
diff --git a/src/net/apocalypselabs/symat/Help.form b/src/net/apocalypselabs/symat/Help.form
index 8136aec..a23ba56 100644
--- a/src/net/apocalypselabs/symat/Help.form
+++ b/src/net/apocalypselabs/symat/Help.form
@@ -66,15 +66,16 @@
"
+ + error
+ + "
Also, an error occured "
+ + "while displaying the error page: "
+ + ex.getMessage();
+ }
}
/**
@@ -318,7 +382,10 @@ public class WebBrowser extends javax.swing.JInternalFrame {
navBar = new javax.swing.JToolBar();
backBtn = new javax.swing.JButton();
urlBox = new javax.swing.JTextField();
+ buttonBar = new javax.swing.JToolBar();
goBtn = new javax.swing.JButton();
+ sepBar = new javax.swing.JToolBar.Separator();
+ homeBtn = new javax.swing.JButton();
browserBox = new javax.swing.JPanel();
setClosable(true);
@@ -360,10 +427,11 @@ public class WebBrowser extends javax.swing.JInternalFrame {
navBar.setLayout(new java.awt.BorderLayout());
backBtn.setFont(Main.ubuntuRegular.deriveFont(16.0f));
- backBtn.setText("<");
+ backBtn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/apocalypselabs/symat/icons/arrow-left.png"))); // NOI18N
+ backBtn.setToolTipText("Go back a page");
backBtn.setFocusable(false);
backBtn.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
- backBtn.setMaximumSize(new java.awt.Dimension(30, 21));
+ backBtn.setMaximumSize(new java.awt.Dimension(50, 50));
backBtn.setMinimumSize(new java.awt.Dimension(30, 21));
backBtn.setPreferredSize(new java.awt.Dimension(30, 21));
backBtn.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
@@ -387,21 +455,45 @@ public class WebBrowser extends javax.swing.JInternalFrame {
navBar.add(urlBox);
*/
- goBtn.setText("Go");
- goBtn.setFocusable(false);
+ buttonBar.setFloatable(false);
+ buttonBar.setRollover(true);
+ buttonBar.setBorderPainted(false);
+ navBar.add(buttonBar, BorderLayout.EAST);
+
+ goBtn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/apocalypselabs/symat/icons/goarrow.png"))); // NOI18N
+ goBtn.setToolTipText("Navigate");
goBtn.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
- goBtn.setMaximumSize(new java.awt.Dimension(30, 21));
+ goBtn.setMaximumSize(new java.awt.Dimension(50, 50));
goBtn.setMinimumSize(new java.awt.Dimension(30, 21));
- goBtn.setPreferredSize(new java.awt.Dimension(30, 21));
+ goBtn.setPreferredSize(new java.awt.Dimension(30, 30));
goBtn.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
- navBar.add(goBtn, java.awt.BorderLayout.EAST);
+ buttonBar.add(goBtn);
goBtn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
goBtnActionPerformed(evt);
}
});
/*
- navBar.add(goBtn);
+ buttonBar.add(goBtn);
+ */
+ buttonBar.add(sepBar);
+
+ homeBtn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/apocalypselabs/symat/icons/home.png"))); // NOI18N
+ homeBtn.setToolTipText("Go to homepage");
+ homeBtn.setFocusable(false);
+ homeBtn.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
+ homeBtn.setMaximumSize(new java.awt.Dimension(50, 50));
+ homeBtn.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
+ homeBtn.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ homeBtnActionPerformed(evt);
+ }
+ });
+ buttonBar.add(homeBtn);
+
+ /*
+
+ navBar.add(buttonBar);
*/
getContentPane().add(navBar, java.awt.BorderLayout.PAGE_START);
@@ -437,7 +529,7 @@ public class WebBrowser extends javax.swing.JInternalFrame {
if (urlBox.getText().equals("about:home")) {
loadString(homepage());
} else {
- if (!urlBox.getText().startsWith("http")) {
+ if (!urlBox.getText().startsWith("http") && !urlBox.getText().startsWith("about:")) {
urlBox.setText("http://" + urlBox.getText());
}
loadURL(urlBox.getText());
@@ -456,6 +548,10 @@ public class WebBrowser extends javax.swing.JInternalFrame {
});
}//GEN-LAST:event_backBtnActionPerformed
+ private void homeBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_homeBtnActionPerformed
+ loadURL("about:home");
+ }//GEN-LAST:event_homeBtnActionPerformed
+
private void resizeAll() {
Platform.runLater(new Runnable() {
@Override
@@ -466,12 +562,33 @@ public class WebBrowser extends javax.swing.JInternalFrame {
}
});
}
+
+ /**
+ * Add a component to the toolbar.
+ * @param btn The JComponent to add.
+ */
+ public void addButton(JComponent btn) {
+ buttonBar.add(btn);
+ }
+
+ /**
+ * Add a button to the toolbar.
+ * @param btn The JButton to add.
+ * @param action An ActionListener to handle actions.
+ */
+ public void addButton(JButton btn, ActionListener action) {
+ buttonBar.add(btn);
+ btn.addActionListener(action);
+ }
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton backBtn;
private javax.swing.JPanel browserBox;
+ public javax.swing.JToolBar buttonBar;
private javax.swing.JButton goBtn;
+ private javax.swing.JButton homeBtn;
private javax.swing.JToolBar navBar;
+ private javax.swing.JToolBar.Separator sepBar;
private javax.swing.JTextField urlBox;
// End of variables declaration//GEN-END:variables
}
diff --git a/src/net/apocalypselabs/symat/codesamples/graph.java.txt b/src/net/apocalypselabs/symat/codesamples/graph.java.txt
index c97dbf2..3934b53 100644
--- a/src/net/apocalypselabs/symat/codesamples/graph.java.txt
+++ b/src/net/apocalypselabs/symat/codesamples/graph.java.txt
@@ -1,3 +1,3 @@
-String formula = ask("Enter formula:");
-plot(formula);
-plotname("Cool graph!");
\ No newline at end of file
+String formula = symat.ask("Enter formula:");
+symat.plot(formula);
+symat.plotname("Cool graph!");
\ No newline at end of file
diff --git a/src/net/apocalypselabs/symat/codesamples/helloworld.java.txt b/src/net/apocalypselabs/symat/codesamples/helloworld.java.txt
index 9a92bb9..0c0d847 100644
--- a/src/net/apocalypselabs/symat/codesamples/helloworld.java.txt
+++ b/src/net/apocalypselabs/symat/codesamples/helloworld.java.txt
@@ -1,6 +1,9 @@
public class HelloWorld {
public static void main(String[] args) {
- print("Hello world");
+ String message = "Hello World!";
+ int x = 5;
+ print(message);
+ symat.notify(message + " X is " + x + ".");
}
}
diff --git a/src/net/apocalypselabs/symat/functions.java.txt b/src/net/apocalypselabs/symat/functions.java.txt
index fe5a46c..0484c38 100644
--- a/src/net/apocalypselabs/symat/functions.java.txt
+++ b/src/net/apocalypselabs/symat/functions.java.txt
@@ -1,162 +1,6 @@
-void notify(String msg) {
- SyMAT_Functions.notify(msg);
-}
-Object ask(String msg) {
- return SyMAT_Functions.ask(msg);
-}
-Object factorial(int n) {
- return SyMAT_Functions.factorial(n);
-}
-Object diff(String fun,String var) {
- return SyMAT_Functions.diff(fun,var);
-}
-Object integrate(String fun,String var) {
- return SyMAT_Functions.integrate(fun,var);
-}
-Object rad(double num) {
- return SyMAT_Functions.rad(num);
-}
-Object deg(double num) {
- return SyMAT_Functions.deg(num);
-}
-Object subs(String fun,String var) {
- return SyMAT_Functions.subs(fun,var);
-}
-void plot(String fun) {
- SyMAT_Functions.plot(fun);
-}
-void plot() {
- SyMAT_Functions.plot();
-}
-void plotname(String fun) {
- SyMAT_Functions.plotname(fun);
-}
-Object plotname() {
- return SyMAT_Functions.plotname();
-}
-void xlim(int min, int max) {
- SyMAT_Functions.xlim(min,max);
-}
-void plotclr() {
- SyMAT_Functions.plotclr();
-}
-void drawdot(int x, int y) {
- SyMAT_Functions.drawdot(x, y);
-}
-Object simplify(String expr) {
- return SyMAT_Functions.simplify(expr);
-}
-Object vpa(String expr) {
- return SyMAT_Functions.vpa(expr);
-}
-Object readfile(String path) {
- return SyMAT_Functions.readfile(path);
-}
-void savefile(String data,String path) {
- SyMAT_Functions.savefile(data,path);
-}
-Object mtimes(double[][] a, double[][] b) {
- return SyMAT_Functions.mtimes(a,b);
-}
-Object mpower(double[][] a, int b) {
- return SyMAT_Functions.mpower(a,b);
-}
-Object add(double a...) {
- return SyMAT_Functions.add(a);
-}
-Object subtract(double a...) {
- return SyMAT_Functions.subtract(a);
-}
-Object times(double a...) {
- return SyMAT_Functions.times(a);
-}
-Object divide(double a...) {
- return SyMAT_Functions.divide(a);
-}
-Object mod(double a...) {
- return SyMAT_Functions.mod(a);
-}
-Object rand(int min, int max) {
- return SyMAT_Functions.rand(min,max);
-}
-Object rand(int min) {
- return SyMAT_Functions.rand(min,1);
-}
-Object rand() {
- return SyMAT_Functions.rand(0,1);
-}
-Object randb() {
- return SyMAT_Functions.randb();
-}
-void sleep(int x) {
- SyMAT_Functions.sleep(x);
-}
-void pause(int x) {
- SyMAT_Functions.pause(x);
-}
-Object perms(double a...) {
- return SyMAT_Functions.perms(a);
-}
-Object md5sum(String a) {
- return SyMAT_Functions.md5sum(a);
-}
-Object save(String a, String b) {
- return SyMAT_Functions.save(a,b);
-}
-Object load(String a) {
- return SyMAT_Functions.load(a);
-}
-Object powermod(String a,String b,String m) {
- return SyMAT_Functions.powermod(a,b,m);
-}
-Object powermod(double a,double b,double m) {
- return SyMAT_Functions.powermod(a,b,m);
-}
-Object gcd(long a,long b) {
- return SyMAT_Functions.gcd(a,b);
-}
-Object solve(String a, String b, int c) {
- return SyMAT_Functions.solve(a,b,c);
-}
-Object solve(String a) {
- return SyMAT_Functions.solve(a,"x",0);
-}
-Object printa(Object a) {
- return SyMAT_Functions.printa(a);
-}
-Object sec(double a) {
- return SyMAT_Functions.sec(a);
-}
-Object csc(double a) {
- return SyMAT_Functions.csc(a);
-}
-Object cot(double a) {
- return SyMAT_Functions.cot(a);
-}
-Object asec(double a) {
- return SyMAT_Functions.asec(a);
-}
-Object acsc(double a) {
- return SyMAT_Functions.acsc(a);
-}
-Object acot(double a) {
- return SyMAT_Functions.acot(a);
-}
-Object sech(double a) {
- return SyMAT_Functions.sech(a);
-}
-Object csch(double a) {
- return SyMAT_Functions.csch(a);
-}
-Object coth(double a) {
- return SyMAT_Functions.coth(a);
-}
-Object filedialog() {
- return SyMAT_Functions.filedialog();
-}
-Object textbox() {
- return SyMAT_Functions.textbox();
-}
-Object browser() {
- return SyMAT_Functions.browser();
-}
\ No newline at end of file
+import net.apocalypselabs.symat.Functions;
+Functions symat = new Functions();
+public static final double E = java.lang.Math.E;
+public static final double PI = java.lang.Math.PI;
+public static final double SQRT1_2 = java.lang.Math.sqrt(0.5);
+public static final double SQRT2 = java.lang.Math.sqrt(2);
\ No newline at end of file
diff --git a/src/net/apocalypselabs/symat/help/basics.html b/src/net/apocalypselabs/symat/help/basics.html
index 122298c..07c852c 100644
--- a/src/net/apocalypselabs/symat/help/basics.html
+++ b/src/net/apocalypselabs/symat/help/basics.html
@@ -8,6 +8,7 @@
Try typing commands, like "2*2" or "sin(.5)".
You can make variables too, try "x=.5" then "sin(x)".
SyMAT keeps track of the last few commands you enter in a shell.
- To run one again, use the up and down keys to navigate the history.