diff --git a/src/net/apocalypselabs/symat/MainGUI.form b/src/net/apocalypselabs/symat/MainGUI.form
index 9dd68b1..f081dd8 100644
--- a/src/net/apocalypselabs/symat/MainGUI.form
+++ b/src/net/apocalypselabs/symat/MainGUI.form
@@ -85,15 +85,15 @@
-
+
+
-
@@ -203,8 +203,9 @@
-
-
+
+
+
@@ -212,7 +213,6 @@
-
diff --git a/src/net/apocalypselabs/symat/MainGUI.java b/src/net/apocalypselabs/symat/MainGUI.java
index 2fdc94c..291eda4 100644
--- a/src/net/apocalypselabs/symat/MainGUI.java
+++ b/src/net/apocalypselabs/symat/MainGUI.java
@@ -57,6 +57,7 @@ import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
+import javafx.application.Platform;
import javax.swing.ImageIcon;
import javax.swing.JInternalFrame;
import javax.swing.JOptionPane;
@@ -118,10 +119,6 @@ public class MainGUI extends javax.swing.JFrame {
setButtonShortcuts();
- // Disable community tab
- // TODO: Make the tab useful.
- tabs.remove(2);
-
// Open initial windows
boolean loaded = false;
if (!argfile.equals("")) {
@@ -420,11 +417,11 @@ public class MainGUI extends javax.swing.JFrame {
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel4Layout.createSequentialGroup()
.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))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
tabs.addTab("Home", jPanel4);
@@ -506,14 +503,14 @@ public class MainGUI extends javax.swing.JFrame {
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addGroup(jPanel2Layout.createSequentialGroup()
- .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
- .addComponent(arrangeWindowsBtn, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(displaySettingsBtn, 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)
- .addComponent(globalsBtn, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ .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)
+ .addComponent(globalsBtn, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
- .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
tabs.addTab("Apps", jPanel2);
@@ -766,7 +763,7 @@ public class MainGUI extends javax.swing.JFrame {
}//GEN-LAST:event_recentItemsTitleMouseClicked
private void wikiBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_wikiBtnActionPerformed
- //loadFrame(new Wiki());
+ loadFrame(new WebBrowser("SyMAT Wiki"));
}//GEN-LAST:event_wikiBtnActionPerformed
private void globalsBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_globalsBtnActionPerformed
@@ -909,6 +906,8 @@ public class MainGUI extends javax.swing.JFrame {
}
}
+ Platform.setImplicitExit(false);
+
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
diff --git a/src/net/apocalypselabs/symat/SplashScreen.java b/src/net/apocalypselabs/symat/SplashScreen.java
index 79a0aa7..3013f9c 100644
--- a/src/net/apocalypselabs/symat/SplashScreen.java
+++ b/src/net/apocalypselabs/symat/SplashScreen.java
@@ -154,6 +154,10 @@ public class SplashScreen extends javax.swing.JFrame {
setProgress("Checking for updates...");
checkUpdates();
+
+ // It will throw errors, but it seems to speed up loading later.
+ setProgress("Loading apps...");
+ try {WebBrowser wb = new WebBrowser();} catch (Exception ex) {}
setProgress("Loading main interface...");
MainGUI main = new MainGUI();
diff --git a/src/net/apocalypselabs/symat/WebBrowser.form b/src/net/apocalypselabs/symat/WebBrowser.form
new file mode 100644
index 0000000..cb3d26f
--- /dev/null
+++ b/src/net/apocalypselabs/symat/WebBrowser.form
@@ -0,0 +1,39 @@
+
+
+
diff --git a/src/net/apocalypselabs/symat/WebBrowser.java b/src/net/apocalypselabs/symat/WebBrowser.java
new file mode 100644
index 0000000..1c3a6c0
--- /dev/null
+++ b/src/net/apocalypselabs/symat/WebBrowser.java
@@ -0,0 +1,200 @@
+/*
+ * 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 java.awt.BorderLayout;
+import javafx.application.Platform;
+import javafx.collections.ObservableList;
+import javafx.embed.swing.JFXPanel;
+import javafx.scene.Group;
+import javafx.scene.Node;
+import javafx.scene.Scene;
+import javafx.scene.web.WebEngine;
+import javafx.scene.web.WebView;
+
+/**
+ *
+ * @author Skylar
+ */
+public class WebBrowser extends javax.swing.JInternalFrame {
+
+ private WebView browser;
+ private WebEngine webEngine;
+ private JFXPanel jfxPanel;
+ private Group root;
+ private Scene scene;
+
+ /**
+ * Creates new form WebBrowser
+ */
+ public WebBrowser() {
+ initComponents();
+ jfxPanel = new JFXPanel();
+ Platform.runLater(new Runnable() {
+ @Override
+ public void run() {
+ browser = new WebView();
+ browser.setPrefSize(getWidth(), getHeight());
+ root = new Group();
+ scene = new Scene(root);
+ ObservableList children = root.getChildren();
+ children.add(browser);
+ jfxPanel.setScene(scene);
+ webEngine = browser.getEngine();
+ webEngine.loadContent("Loading...
");
+ }
+ });
+ getContentPane().add(jfxPanel, BorderLayout.CENTER);
+ }
+
+ public WebBrowser(String title) {
+ this();
+ setTitle(title);
+ loadURL("https://wiki.symatapp.com/");
+ }
+
+ public WebBrowser(String title, String url) {
+ this();
+ setTitle(title);
+ loadURL(url);
+ }
+
+ public WebBrowser(String url, boolean isurl) {
+ this();
+ loadURL(url);
+ }
+
+ public void loadURL(final String url) {
+ Platform.runLater(new Runnable() {
+ @Override
+ public void run() {
+ webEngine.load(url);
+ }
+ });
+ }
+
+ public void loadString(final String content) {
+ Platform.runLater(new Runnable() {
+ @Override
+ public void run() {
+ webEngine.loadContent(content);
+ }
+ });
+ }
+
+ /**
+ * 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() {
+
+ setClosable(true);
+ setIconifiable(true);
+ setMaximizable(true);
+ setResizable(true);
+ setTitle("Browser");
+ setMinimumSize(new java.awt.Dimension(300, 300));
+ setPreferredSize(new java.awt.Dimension(500, 400));
+ addInternalFrameListener(new javax.swing.event.InternalFrameListener() {
+ public void internalFrameActivated(javax.swing.event.InternalFrameEvent evt) {
+ }
+ public void internalFrameClosed(javax.swing.event.InternalFrameEvent evt) {
+ }
+ public void internalFrameClosing(javax.swing.event.InternalFrameEvent evt) {
+ }
+ public void internalFrameDeactivated(javax.swing.event.InternalFrameEvent evt) {
+ }
+ public void internalFrameDeiconified(javax.swing.event.InternalFrameEvent evt) {
+ }
+ public void internalFrameIconified(javax.swing.event.InternalFrameEvent evt) {
+ }
+ public void internalFrameOpened(javax.swing.event.InternalFrameEvent evt) {
+ formInternalFrameOpened(evt);
+ }
+ });
+ addComponentListener(new java.awt.event.ComponentAdapter() {
+ public void componentResized(java.awt.event.ComponentEvent evt) {
+ formComponentResized(evt);
+ }
+ public void componentShown(java.awt.event.ComponentEvent evt) {
+ formComponentShown(evt);
+ }
+ });
+
+ pack();
+ }// //GEN-END:initComponents
+
+ private void formInternalFrameOpened(javax.swing.event.InternalFrameEvent evt) {//GEN-FIRST:event_formInternalFrameOpened
+ resizeAll();
+ // Ensure scrollbars show up correctly.
+ setSize(getWidth() + 1, getHeight());
+ setSize(getWidth() - 1, getHeight());
+ }//GEN-LAST:event_formInternalFrameOpened
+
+ private void formComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentResized
+ resizeAll();
+ }//GEN-LAST:event_formComponentResized
+
+ private void formComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentShown
+ resizeAll();
+ }//GEN-LAST:event_formComponentShown
+
+ private void resizeAll() {
+ Platform.runLater(new Runnable() {
+ @Override
+ public void run() {
+ jfxPanel.setSize(getWidth(), getHeight());
+ browser.resize(getWidth() - 12, getHeight());
+ }
+ });
+ }
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ // End of variables declaration//GEN-END:variables
+}