diff --git a/lib/beautyeye_lnf.jar b/lib/beautyeye_lnf.jar
new file mode 100644
index 0000000..ad6f1df
Binary files /dev/null and b/lib/beautyeye_lnf.jar differ
diff --git a/lib/json-simple-1.1.1.jar b/lib/json-simple-1.1.1.jar
new file mode 100644
index 0000000..66347a6
Binary files /dev/null and b/lib/json-simple-1.1.1.jar differ
diff --git a/lib/seaglasslookandfeel-0.2.jar b/lib/seaglasslookandfeel-0.2.jar
new file mode 100644
index 0000000..059f9f0
Binary files /dev/null and b/lib/seaglasslookandfeel-0.2.jar differ
diff --git a/src/net/apocalypselabs/symat/Display.form b/src/net/apocalypselabs/symat/Display.form
index 3c76018..2cd362f 100644
--- a/src/net/apocalypselabs/symat/Display.form
+++ b/src/net/apocalypselabs/symat/Display.form
@@ -13,13 +13,13 @@
-
+
-
+
-
+
@@ -58,12 +58,11 @@
-
-
+
-
+
@@ -88,7 +87,7 @@
-
+
@@ -97,7 +96,7 @@
-
+
@@ -111,7 +110,7 @@
-
+
@@ -119,7 +118,7 @@
-
+
diff --git a/src/net/apocalypselabs/symat/Display.java b/src/net/apocalypselabs/symat/Display.java
index 93c1276..bd93862 100644
--- a/src/net/apocalypselabs/symat/Display.java
+++ b/src/net/apocalypselabs/symat/Display.java
@@ -45,8 +45,6 @@
*/
package net.apocalypselabs.symat;
-import javax.swing.JOptionPane;
-
/**
*
* @author Skylar
@@ -79,9 +77,9 @@ public class Display extends javax.swing.JInternalFrame {
setIconifiable(true);
setTitle("Theme");
setFrameIcon(new javax.swing.ImageIcon(getClass().getResource("/net/apocalypselabs/symat/icons/settings.png"))); // NOI18N
- setMaximumSize(new java.awt.Dimension(170, 190));
- setMinimumSize(new java.awt.Dimension(170, 190));
- setPreferredSize(new java.awt.Dimension(170, 190));
+ setMaximumSize(new java.awt.Dimension(170, 188));
+ setMinimumSize(new java.awt.Dimension(170, 188));
+ setPreferredSize(new java.awt.Dimension(170, 188));
addComponentListener(new java.awt.event.ComponentAdapter() {
public void componentShown(java.awt.event.ComponentEvent evt) {
formComponentShown(evt);
@@ -93,10 +91,10 @@ public class Display extends javax.swing.JInternalFrame {
themeGroup.add(themeLight);
themeLight.setSelected(true);
- themeLight.setText("Light");
+ themeLight.setText("Daylight");
themeGroup.add(themeDark);
- themeDark.setText("Dark");
+ themeDark.setText("NightDark");
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
@@ -107,14 +105,14 @@ public class Display extends javax.swing.JInternalFrame {
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(themeLight)
.addComponent(themeDark))
- .addContainerGap(67, Short.MAX_VALUE))
+ .addContainerGap(43, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(themeLight)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(themeDark)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
@@ -142,11 +140,10 @@ public class Display extends javax.swing.JInternalFrame {
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
- .addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(saveBtn)
- .addContainerGap(29, Short.MAX_VALUE))
+ .addContainerGap(41, Short.MAX_VALUE))
);
pack();
@@ -172,13 +169,7 @@ public class Display extends javax.swing.JInternalFrame {
} else {
PrefStorage.saveSetting("theme", "light");
}
- if (!PrefStorage.save()) {
- // Something dun goofed...
- JOptionPane.showInternalMessageDialog(this,
- "Error: Problem occured while saving settings. "
- + "This error is outside the control of "
- + "the application.");
- }
+ PrefStorage.save();
MainGUI.updateDisplay();
dispose();
}//GEN-LAST:event_saveBtnActionPerformed
diff --git a/src/net/apocalypselabs/symat/Functions.java b/src/net/apocalypselabs/symat/Functions.java
index 5a74e02..af398e2 100644
--- a/src/net/apocalypselabs/symat/Functions.java
+++ b/src/net/apocalypselabs/symat/Functions.java
@@ -46,6 +46,7 @@
package net.apocalypselabs.symat;
import static java.lang.Math.*;
+import java.util.HashMap;
import javax.swing.JOptionPane;
import org.matheclipse.core.eval.EvalUtilities;
import org.matheclipse.parser.client.math.MathException;
@@ -59,6 +60,8 @@ import org.matheclipse.parser.client.math.MathException;
*/
public class Functions {
+ public static final HashMap GLOBALS = new HashMap<>();
+
private final EvalUtilities util = new EvalUtilities(true, true);
Graph graphwin = new Graph(true);
@@ -203,6 +206,45 @@ public class Functions {
graphwin.drawDot(x, y);
}
+ /*
+ Global variables are accessible across scripts.
+ */
+ /**
+ * Set a global variable.
+ *
+ * @param name The variable name
+ * @param var The variable
+ */
+ public static void global(String name, Object var) {
+ GLOBALS.put(name, var);
+ }
+
+ /**
+ * Get a global variable.
+ *
+ * @param name The variable name
+ * @return The variable
+ */
+ public static Object global(String name) {
+ return GLOBALS.get(name);
+ }
+
+ /**
+ * Clear all the GLOBALS.
+ */
+ public static void clrglobals() {
+ GLOBALS.clear();
+ }
+
+ /**
+ * Check if the given global key is set.
+ * @param name The key to check.
+ * @return True if the key exists, else false.
+ */
+ public static boolean globalcontains(String name) {
+ return GLOBALS.containsKey(name);
+ }
+
/*
Other
*/
diff --git a/src/net/apocalypselabs/symat/Globals.form b/src/net/apocalypselabs/symat/Globals.form
new file mode 100644
index 0000000..6e9a1a3
--- /dev/null
+++ b/src/net/apocalypselabs/symat/Globals.form
@@ -0,0 +1,200 @@
+
+
+
diff --git a/src/net/apocalypselabs/symat/Globals.java b/src/net/apocalypselabs/symat/Globals.java
new file mode 100644
index 0000000..d6f2bdc
--- /dev/null
+++ b/src/net/apocalypselabs/symat/Globals.java
@@ -0,0 +1,271 @@
+/*
+ * CODE LICENSE =====================
+ * Copyright (c) 2015, Apocalypse Laboratories
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation and/or
+ * other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its contributors
+ * may be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * 4. You adhere to the Media License detailed below. If you do not, this license
+ * is automatically revoked and you must purge all copies of the software you
+ * possess, in source or binary form.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * MEDIA LICENSE ====================
+ * All images and other graphical files (the "graphics") included with this
+ * software are copyright (c) 2015 Apocalypse Laboratories. You may not distribute
+ * the graphics or any program, source code repository, or other digital storage
+ * media containing them without written permission from Apocalypse Laboratories.
+ * This ban on distribution only applies to publicly available systems.
+ * A password-protected network file share, USB drive, or other storage scheme that
+ * cannot be easily accessed by the public is generally allowed. If in doubt,
+ * contact Apocalypse Laboratories. If Apocalypse Laboratories allows or denies
+ * you permission, that decision is considered final and binding.
+ */
+package net.apocalypselabs.symat;
+
+import javax.swing.JOptionPane;
+
+/**
+ *
+ * @author Skylar
+ */
+public class Globals extends javax.swing.JInternalFrame {
+
+ private int hashCode;
+
+ /**
+ * Creates new form Globals
+ */
+ public Globals() {
+ initComponents();
+ }
+
+ /**
+ * 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
+ * regenerated by the Form Editor.
+ */
+ @SuppressWarnings("unchecked")
+ // //GEN-BEGIN:initComponents
+ private void initComponents() {
+
+ addBtn = new javax.swing.JButton();
+ jPanel1 = new javax.swing.JPanel();
+ jScrollPane1 = new javax.swing.JScrollPane();
+ keyList = new javax.swing.JList();
+ remBtn = new javax.swing.JButton();
+ jPanel2 = new javax.swing.JPanel();
+ jScrollPane2 = new javax.swing.JScrollPane();
+ valBox = new javax.swing.JTextArea();
+ refreshBtn = new javax.swing.JButton();
+
+ setClosable(true);
+ setIconifiable(true);
+ setMaximizable(true);
+ setResizable(true);
+ setTitle("Global Variables");
+ setFrameIcon(new javax.swing.ImageIcon(getClass().getResource("/net/apocalypselabs/symat/icons/globals.png"))); // NOI18N
+ addComponentListener(new java.awt.event.ComponentAdapter() {
+ public void componentShown(java.awt.event.ComponentEvent evt) {
+ formComponentShown(evt);
+ }
+ });
+
+ addBtn.setText("Add");
+ addBtn.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ addBtnActionPerformed(evt);
+ }
+ });
+
+ jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Variables"));
+
+ keyList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
+ keyList.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
+ public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
+ keyListValueChanged(evt);
+ }
+ });
+ jScrollPane1.setViewportView(keyList);
+
+ javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
+ jPanel1.setLayout(jPanel1Layout);
+ jPanel1Layout.setHorizontalGroup(
+ jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(jPanel1Layout.createSequentialGroup()
+ .addContainerGap()
+ .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 109, Short.MAX_VALUE)
+ .addContainerGap())
+ );
+ jPanel1Layout.setVerticalGroup(
+ 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))
+ );
+
+ remBtn.setText("Remove");
+ remBtn.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ remBtnActionPerformed(evt);
+ }
+ });
+
+ jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Value"));
+
+ valBox.setEditable(false);
+ valBox.setColumns(1);
+ valBox.setRows(1);
+ valBox.setTabSize(4);
+ jScrollPane2.setViewportView(valBox);
+
+ javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
+ jPanel2.setLayout(jPanel2Layout);
+ jPanel2Layout.setHorizontalGroup(
+ jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(jPanel2Layout.createSequentialGroup()
+ .addContainerGap()
+ .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 202, Short.MAX_VALUE)
+ .addContainerGap())
+ );
+ jPanel2Layout.setVerticalGroup(
+ jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
+ .addContainerGap()
+ .addComponent(jScrollPane2))
+ );
+
+ refreshBtn.setText("Refresh");
+ refreshBtn.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ refreshBtnActionPerformed(evt);
+ }
+ });
+
+ javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+ getContentPane().setLayout(layout);
+ layout.setHorizontalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createSequentialGroup()
+ .addContainerGap()
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createSequentialGroup()
+ .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+ .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addGroup(layout.createSequentialGroup()
+ .addComponent(addBtn)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(remBtn)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(refreshBtn)
+ .addGap(0, 0, Short.MAX_VALUE)))
+ .addContainerGap())
+ );
+ layout.setVerticalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+ .addContainerGap()
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(addBtn)
+ .addComponent(remBtn)
+ .addComponent(refreshBtn))
+ .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)
+ .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ .addContainerGap())
+ );
+
+ pack();
+ }// //GEN-END:initComponents
+
+ private void keyListValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_keyListValueChanged
+ if (keyList.getSelectedValue() != null) {
+ try {
+ valBox.setText(Functions.GLOBALS.get(
+ keyList.getSelectedValue().toString()).toString());
+ } catch (Exception ex) {
+ valBox.setText("Error. Note some datatypes "
+ + "cannot be displayed here.");
+ }
+ }
+ }//GEN-LAST:event_keyListValueChanged
+
+ private void addBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addBtnActionPerformed
+ String name = JOptionPane.showInternalInputDialog(this,
+ "New variable name:",
+ "New global",
+ JOptionPane.PLAIN_MESSAGE);
+ if (name != null) {
+ if (!name.equals("")) {
+ Functions.GLOBALS.put(name, null);
+ refreshList();
+ }
+ }
+ }//GEN-LAST:event_addBtnActionPerformed
+
+ private void formComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentShown
+ refreshList();
+ }//GEN-LAST:event_formComponentShown
+
+ private void remBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_remBtnActionPerformed
+ if (keyList.getSelectedValue() != null) {
+ int choice = JOptionPane.showInternalConfirmDialog(this,
+ "Delete variable '"
+ + keyList.getSelectedValue().toString() + "'?",
+ "Delete?",
+ JOptionPane.YES_NO_OPTION);
+ if (choice == JOptionPane.YES_OPTION) {
+ Functions.GLOBALS.remove(keyList.getSelectedValue().toString());
+ refreshList();
+ }
+ }
+ }//GEN-LAST:event_remBtnActionPerformed
+
+ private void refreshBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_refreshBtnActionPerformed
+ refreshList();
+ }//GEN-LAST:event_refreshBtnActionPerformed
+
+ private void refreshList() {
+ if (Functions.GLOBALS.hashCode() != hashCode) {
+ keyList.setListData(Functions.GLOBALS.keySet().toArray());
+ hashCode = Functions.GLOBALS.hashCode();
+ valBox.setText("");
+ }
+ }
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JButton addBtn;
+ private javax.swing.JPanel jPanel1;
+ private javax.swing.JPanel jPanel2;
+ private javax.swing.JScrollPane jScrollPane1;
+ private javax.swing.JScrollPane jScrollPane2;
+ private javax.swing.JList keyList;
+ private javax.swing.JButton refreshBtn;
+ private javax.swing.JButton remBtn;
+ private javax.swing.JTextArea valBox;
+ // End of variables declaration//GEN-END:variables
+}
diff --git a/src/net/apocalypselabs/symat/MainGUI.form b/src/net/apocalypselabs/symat/MainGUI.form
index efe5e15..78ca6ca 100644
--- a/src/net/apocalypselabs/symat/MainGUI.form
+++ b/src/net/apocalypselabs/symat/MainGUI.form
@@ -62,8 +62,8 @@
-
-
+
+
@@ -76,26 +76,24 @@
-
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
@@ -175,12 +173,12 @@
-
+
-
+
-
+
@@ -192,7 +190,7 @@
-
+
@@ -203,8 +201,8 @@
-
-
+
+
@@ -216,22 +214,22 @@
-
+
-
-
-
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
@@ -256,7 +254,7 @@
-
+
@@ -271,12 +269,12 @@
-
+
-
+
-
+
@@ -288,15 +286,15 @@
-
+
-
+
-
+
-
+
@@ -308,7 +306,7 @@
-
+
@@ -340,9 +338,9 @@
-
-
-
+
+
+
diff --git a/src/net/apocalypselabs/symat/MainGUI.java b/src/net/apocalypselabs/symat/MainGUI.java
index 5d79d3c..fede1ed 100644
--- a/src/net/apocalypselabs/symat/MainGUI.java
+++ b/src/net/apocalypselabs/symat/MainGUI.java
@@ -53,7 +53,6 @@ import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
-import java.beans.PropertyVetoException;
import java.io.File;
import java.io.IOException;
import java.util.Calendar;
@@ -73,9 +72,9 @@ import javax.swing.UIManager;
public class MainGUI extends javax.swing.JFrame {
// TODO: Add more code comments and stuff in case anybody else reads this
- public static final String APP_NAME = "SyMAT 1.1";
- public static final double APP_CODE = 13;
- public static final String VERSION_NAME = "1.1";
+ public static final String APP_NAME = "SyMAT 1.2";
+ public static final double APP_CODE = 14;
+ public static final String VERSION_NAME = "1.2";
public static final String API_URL = "https://apis.symatapp.com/";
public static String argfile = "";
public static boolean skipPython = false; // Skip python init on start?
@@ -122,7 +121,7 @@ public class MainGUI extends javax.swing.JFrame {
// Disable community tab
tabs.remove(2);
-
+
// Open initial windows
boolean loaded = false;
if (!argfile.equals("")) {
@@ -314,12 +313,12 @@ public class MainGUI extends javax.swing.JFrame {
editorBtn = new javax.swing.JButton();
graphBtn = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();
- helpBtn = new javax.swing.JButton();
+ globalsBtn = new javax.swing.JButton();
jPanel2 = new javax.swing.JPanel();
jLabel3 = new javax.swing.JLabel();
arrangeWindowsBtn = new javax.swing.JButton();
- closeAllBtn = new javax.swing.JButton();
displaySettingsBtn = new javax.swing.JButton();
+ helpBtn = new javax.swing.JButton();
jPanel5 = new javax.swing.JPanel();
wikiBtn = new javax.swing.JButton();
jLabel4 = new javax.swing.JLabel();
@@ -402,16 +401,16 @@ public class MainGUI extends javax.swing.JFrame {
jLabel1.setText(namemark());
jLabel1.setFocusable(false);
- helpBtn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/apocalypselabs/symat/images/help.png"))); // NOI18N
- helpBtn.setText("Manual");
- helpBtn.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5));
- helpBtn.setFocusable(false);
- helpBtn.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
- helpBtn.setOpaque(false);
- helpBtn.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
- helpBtn.addActionListener(new java.awt.event.ActionListener() {
+ globalsBtn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/apocalypselabs/symat/images/globals.png"))); // NOI18N
+ globalsBtn.setText("Vars");
+ globalsBtn.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5));
+ globalsBtn.setFocusable(false);
+ globalsBtn.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
+ globalsBtn.setOpaque(false);
+ globalsBtn.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
+ globalsBtn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
- helpBtnActionPerformed(evt);
+ globalsBtnActionPerformed(evt);
}
});
@@ -424,27 +423,26 @@ public class MainGUI extends javax.swing.JFrame {
.addComponent(shellBtn)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(editorBtn)
- .addGap(12, 12, 12)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(graphBtn)
- .addGap(11, 11, 11)
- .addComponent(helpBtn)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 124, Short.MAX_VALUE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+ .addComponent(globalsBtn)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 127, Short.MAX_VALUE)
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 300, javax.swing.GroupLayout.PREFERRED_SIZE))
);
jPanel4Layout.setVerticalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel4Layout.createSequentialGroup()
- .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(shellBtn)
- .addComponent(editorBtn)
- .addComponent(graphBtn)
- .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
- .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(helpBtn, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
+ .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
+ .addComponent(jLabel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(shellBtn, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(editorBtn, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(graphBtn, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(globalsBtn, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
- tabs.addTab("Apps", jPanel4);
+ tabs.addTab("Home", jPanel4);
jPanel2.setOpaque(false);
@@ -454,7 +452,7 @@ public class MainGUI extends javax.swing.JFrame {
jLabel3.setFocusable(false);
arrangeWindowsBtn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/apocalypselabs/symat/images/cascade.png"))); // NOI18N
- arrangeWindowsBtn.setText("Cascade");
+ arrangeWindowsBtn.setText("Arrange");
arrangeWindowsBtn.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5));
arrangeWindowsBtn.setFocusable(false);
arrangeWindowsBtn.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
@@ -466,19 +464,6 @@ public class MainGUI extends javax.swing.JFrame {
}
});
- closeAllBtn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/apocalypselabs/symat/images/closeall.png"))); // NOI18N
- closeAllBtn.setText("Close All");
- closeAllBtn.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5));
- closeAllBtn.setFocusable(false);
- closeAllBtn.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
- closeAllBtn.setOpaque(false);
- closeAllBtn.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
- closeAllBtn.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent evt) {
- closeAllBtnActionPerformed(evt);
- }
- });
-
displaySettingsBtn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/apocalypselabs/symat/images/display.png"))); // NOI18N
displaySettingsBtn.setText("Theme");
displaySettingsBtn.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5));
@@ -492,6 +477,19 @@ public class MainGUI extends javax.swing.JFrame {
}
});
+ helpBtn.setIcon(new javax.swing.ImageIcon(getClass().getResource("/net/apocalypselabs/symat/images/help.png"))); // NOI18N
+ helpBtn.setText("Manual");
+ helpBtn.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5));
+ helpBtn.setFocusable(false);
+ helpBtn.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
+ helpBtn.setOpaque(false);
+ helpBtn.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
+ helpBtn.addActionListener(new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent evt) {
+ helpBtnActionPerformed(evt);
+ }
+ });
+
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
@@ -500,24 +498,24 @@ public class MainGUI extends javax.swing.JFrame {
.addContainerGap()
.addComponent(displaySettingsBtn)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
- .addComponent(arrangeWindowsBtn)
+ .addComponent(arrangeWindowsBtn, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
- .addComponent(closeAllBtn)
- .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, 490, Short.MAX_VALUE))
+ .addComponent(helpBtn)
+ .addGap(77, 77, 77)
+ .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, 417, Short.MAX_VALUE))
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(jPanel2Layout.createSequentialGroup()
- .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 65, javax.swing.GroupLayout.PREFERRED_SIZE)
- .addComponent(arrangeWindowsBtn)
- .addComponent(closeAllBtn)
- .addComponent(displaySettingsBtn))
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
+ .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+ .addComponent(jLabel3, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(arrangeWindowsBtn, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(displaySettingsBtn, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(helpBtn, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
- tabs.addTab("Window", jPanel2);
+ tabs.addTab("Apps", jPanel2);
jPanel5.setFocusable(false);
jPanel5.setOpaque(false);
@@ -553,9 +551,9 @@ public class MainGUI extends javax.swing.JFrame {
jPanel5Layout.setVerticalGroup(
jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel5Layout.createSequentialGroup()
- .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(wikiBtn)
- .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 65, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
+ .addComponent(jLabel4, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addComponent(wikiBtn, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
@@ -689,16 +687,6 @@ public class MainGUI extends javax.swing.JFrame {
loadFrame(new Display());
}//GEN-LAST:event_displaySettingsBtnActionPerformed
- private void closeAllBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeAllBtnActionPerformed
- for (JInternalFrame ji : mainPane.getAllFrames()) {
- try {
- ji.setClosed(true);
- } catch (PropertyVetoException ex) {
- ji.dispose();
- }
- }
- }//GEN-LAST:event_closeAllBtnActionPerformed
-
private void arrangeWindowsBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_arrangeWindowsBtnActionPerformed
cascade();
}//GEN-LAST:event_arrangeWindowsBtnActionPerformed
@@ -771,6 +759,10 @@ public class MainGUI extends javax.swing.JFrame {
//loadFrame(new Wiki());
}//GEN-LAST:event_wikiBtnActionPerformed
+ private void globalsBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_globalsBtnActionPerformed
+ loadFrame(new Globals());
+ }//GEN-LAST:event_globalsBtnActionPerformed
+
/*
End the button handlers.
*/
@@ -851,6 +843,7 @@ public class MainGUI extends javax.swing.JFrame {
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
+
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
@@ -858,16 +851,24 @@ public class MainGUI extends javax.swing.JFrame {
break;
}
}
- } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
- java.util.logging.Logger.getLogger(MainGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
+ } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException e) {
+ java.util.logging.Logger.getLogger(MainGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, e);
+ }
+
+ if (PrefStorage.getSetting("theme").equals("glass")) {
+ try {
+ UIManager.setLookAndFeel("com.seaglasslookandfeel.SeaGlassLookAndFeel");
+ } catch (Exception ex) {
+
+ }
}
//
//
try {
// Ubuntu font for prettifying
- ubuntuRegular = Font.createFont(Font.TRUETYPE_FONT,MainGUI.class.
- getResourceAsStream("/ubuntu.ttf"));
+ ubuntuRegular = Font.createFont(Font.TRUETYPE_FONT, MainGUI.class.
+ getResourceAsStream("/ubuntu.ttf"));
} catch (FontFormatException | IOException ex) {
ubuntuRegular = Font.getFont(Font.SANS_SERIF);
System.err.println("Error loading fonts: " + ex.getMessage());
@@ -909,9 +910,9 @@ public class MainGUI extends javax.swing.JFrame {
// Variables declaration - do not modify//GEN-BEGIN:variables
public static javax.swing.JButton arrangeWindowsBtn;
- public static javax.swing.JButton closeAllBtn;
public static javax.swing.JButton displaySettingsBtn;
public static javax.swing.JButton editorBtn;
+ public static javax.swing.JButton globalsBtn;
public static javax.swing.JButton graphBtn;
public static javax.swing.JButton helpBtn;
public static javax.swing.JLabel jLabel1;
diff --git a/src/net/apocalypselabs/symat/icons/globals.png b/src/net/apocalypselabs/symat/icons/globals.png
new file mode 100644
index 0000000..c40d4d6
Binary files /dev/null and b/src/net/apocalypselabs/symat/icons/globals.png differ
diff --git a/src/net/apocalypselabs/symat/images/globals.png b/src/net/apocalypselabs/symat/images/globals.png
new file mode 100644
index 0000000..18072d4
Binary files /dev/null and b/src/net/apocalypselabs/symat/images/globals.png differ