Theme system now much easier to work with

master
skylarmt 9 years ago
parent 9324818e77
commit 7aa2957433

@ -52,8 +52,6 @@ import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
@ -175,17 +173,10 @@ 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");
}
outputBox.setBackground(net.apocalypselabs.symat.Theme.boxColor());
outputBox.setForeground(net.apocalypselabs.symat.Theme.textColor());
setBackground(net.apocalypselabs.symat.Theme.windowColor());
setEditorTheme(net.apocalypselabs.symat.Theme.editorTheme());
}
/**
@ -799,7 +790,7 @@ public class CodeEditor extends javax.swing.JInternalFrame {
}//GEN-LAST:event_shareMenuActionPerformed
private void shareAsMenuActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_shareAsMenuActionPerformed
String id = JOptionPane.showInternalInputDialog(this,
String id = JOptionPane.showInternalInputDialog(this,
"Enter the pad ID to share to. "
+ "If the pad exists, it will be overwritten.",
"Share",
@ -826,7 +817,7 @@ public class CodeEditor extends javax.swing.JInternalFrame {
JOptionPane.ERROR_MESSAGE);
}
}
/**
* Open a sample code file with the given name.<p>
* Uses the current language.

@ -56,6 +56,7 @@ public class Display extends javax.swing.JInternalFrame {
*/
public Display() {
initComponents();
setBackground(Theme.windowColor());
}
/**
@ -176,9 +177,9 @@ public class Display extends javax.swing.JInternalFrame {
private void saveBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveBtnActionPerformed
if (themeDark.isSelected()) {
PrefStorage.saveSetting("theme", "dark");
Theme.setTheme("dark");
} else {
PrefStorage.saveSetting("theme", "light");
Theme.setTheme("light");
}
if (showRecent.isSelected()) {
PrefStorage.saveSetting("showrecent", "");

@ -313,19 +313,11 @@ public class Interpreter extends javax.swing.JInternalFrame {
}//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);
}
mainBox.setBackground(Theme.boxColor());
mainBox.setForeground(Theme.textColor());
inputBox.setBackground(Theme.boxColor());
inputBox.setForeground(Theme.textColor());
setBackground(Theme.windowColor());
}
private void inputBoxKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_inputBoxKeyTyped

@ -257,15 +257,9 @@ public class MainGUI extends javax.swing.JFrame {
public static void updateDisplay() {
mainPane.paintImmediately(0, 0,
mainPane.getWidth(), mainPane.getHeight());
if (PrefStorage.getSetting("theme").equals("dark")) {
tabs.setBackground(new Color(41, 49, 52));
recentFileList.setForeground(Color.white);
recentFileList.setBackground(new Color(41, 49, 52));
} else {
tabs.setBackground(new Color(240, 240, 240));
recentFileList.setForeground(Color.black);
recentFileList.setBackground(Color.white);
}
tabs.setBackground(Theme.tabColor());
recentFileList.setForeground(Theme.textColor());
recentFileList.setBackground(Theme.boxColor());
if (!PrefStorage.getSetting("showrecent", "").equals("")) {
recentItemsPanel.setVisible(false);
} else {

@ -20,17 +20,6 @@
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="eraseBtnActionPerformed"/>
</Events>
</MenuItem>
<MenuItem class="javax.swing.JMenuItem" name="saveBtn">
<Properties>
<Property name="accelerator" type="javax.swing.KeyStroke" editor="org.netbeans.modules.form.editors.KeyStrokeEditor">
<KeyStroke key="Ctrl+S"/>
</Property>
<Property name="text" type="java.lang.String" value="Save"/>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="saveBtnActionPerformed"/>
</Events>
</MenuItem>
</SubComponents>
</Menu>
</SubComponents>
@ -45,7 +34,6 @@
<Property name="frameIcon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
<Image iconType="3" name="/net/apocalypselabs/symat/icons/notepad.png"/>
</Property>
<Property name="icon" type="boolean" value="true"/>
</Properties>
<SyntheticProperties>
<SyntheticProperty name="menuBar" type="java.lang.String" value="jMenuBar1"/>
@ -89,6 +77,11 @@
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
<SubComponents>
<Component class="javax.swing.JEditorPane" name="textBox">
<Properties>
<Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
<Color blue="cc" green="ff" red="ff" type="rgb"/>
</Property>
</Properties>
<Events>
<EventHandler event="keyTyped" listener="java.awt.event.KeyListener" parameters="java.awt.event.KeyEvent" handler="textBoxKeyTyped"/>
</Events>

@ -61,9 +61,14 @@ public class Notepad extends javax.swing.JInternalFrame {
*/
public Notepad() {
initComponents();
updateTheme();
textBox.setText(PrefStorage.getSetting("notepad"));
}
private void updateTheme() {
}
/**
* 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
@ -78,7 +83,6 @@ public class Notepad extends javax.swing.JInternalFrame {
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
eraseBtn = new javax.swing.JMenuItem();
saveBtn = new javax.swing.JMenuItem();
setClosable(true);
setIconifiable(true);
@ -89,6 +93,7 @@ public class Notepad extends javax.swing.JInternalFrame {
jScrollPane4.setFont(Font.getFont(Font.MONOSPACED));
textBox.setBackground(new java.awt.Color(255, 255, 204));
textBox.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
textBoxKeyTyped(evt);
@ -107,15 +112,6 @@ public class Notepad extends javax.swing.JInternalFrame {
});
jMenu1.add(eraseBtn);
saveBtn.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_MASK));
saveBtn.setText("Save");
saveBtn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
saveBtnActionPerformed(evt);
}
});
jMenu1.add(saveBtn);
jMenuBar1.add(jMenu1);
setJMenuBar(jMenuBar1);
@ -138,26 +134,23 @@ public class Notepad extends javax.swing.JInternalFrame {
int ans = JOptionPane.showInternalConfirmDialog(this, "Erase notepad contents?", "Are you sure?", JOptionPane.YES_NO_OPTION);
if (ans == JOptionPane.YES_OPTION) {
textBox.setText("");
setTitle("Notepad *");
save();
}
}//GEN-LAST:event_eraseBtnActionPerformed
private void saveBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveBtnActionPerformed
PrefStorage.saveSetting("notepad", textBox.getText());
setTitle("Notepad");
}//GEN-LAST:event_saveBtnActionPerformed
private void textBoxKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_textBoxKeyTyped
setTitle("Notepad *");
save();
}//GEN-LAST:event_textBoxKeyTyped
private void save() {
PrefStorage.saveSetting("notepad", textBox.getText());
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JMenuItem eraseBtn;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JScrollPane jScrollPane4;
private javax.swing.JMenuItem saveBtn;
private javax.swing.JEditorPane textBox;
// End of variables declaration//GEN-END:variables
}

@ -17,6 +17,9 @@
<SyntheticProperties>
<SyntheticProperty name="formSizePolicy" type="int" value="1"/>
</SyntheticProperties>
<Events>
<EventHandler event="mouseEntered" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="formMouseEntered"/>
</Events>
<AuxValues>
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>

@ -45,6 +45,7 @@
*/
package net.apocalypselabs.symat;
import java.awt.Color;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
@ -66,9 +67,18 @@ public class Pads extends javax.swing.JInternalFrame {
*/
public Pads() {
initComponents();
updateTheme();
padPane.setListData(getPads());
}
private void updateTheme() {
padPane.setBackground(Theme.boxColor());
padPane.setForeground(Theme.textColor());
previewPane.setBackground(Theme.boxColor());
previewPane.setForeground(Theme.textColor());
setBackground(Theme.windowColor());
}
/**
* Add the given pad ID to the local pad list.
*
@ -283,6 +293,11 @@ public class Pads extends javax.swing.JInternalFrame {
setTitle("Collaboration");
setMinimumSize(new java.awt.Dimension(450, 280));
setPreferredSize(new java.awt.Dimension(450, 280));
addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
formMouseEntered(evt);
}
});
padPane.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
padPane.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
@ -494,6 +509,10 @@ public class Pads extends javax.swing.JInternalFrame {
JOptionPane.PLAIN_MESSAGE);
}//GEN-LAST:event_shareBtnActionPerformed
private void formMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMouseEntered
updateTheme();
}//GEN-LAST:event_formMouseEntered
private String getSelectedPad() {
return padPane.getSelectedValue().toString();
}

@ -0,0 +1,136 @@
/*
* 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.Color;
/**
* Handles theme colors and giving them out.
*
* @author Skylar
*/
public class Theme {
// Theme colors.
private static final Color WHITE = Color.WHITE;
private static final Color BLACK = Color.BLACK;
private static final Color DBACK = new Color(41, 49, 52);
private static final Color LBACK = new Color(240,240,240);
private static final Color DGRAY = Color.DARK_GRAY;
private static final Color LGRAY = Color.LIGHT_GRAY;
/**
* Light theme.
*/
public static final int THEME_LIGHT = 0;
/**
* Dark theme.
*/
public static final int THEME_DARK = 1;
/**
* The current theme.
*/
public static int currentTheme = (PrefStorage.getSetting("theme")
.equals("dark") ? 1 : 0);
/**
* Set the theme for the application.
*
* @param theme the theme id number.
*/
public static void setTheme(int theme) {
switch (theme) {
case THEME_DARK:
PrefStorage.saveSetting("theme", "dark");
break;
case THEME_LIGHT:
default:
PrefStorage.saveSetting("theme", "light");
}
currentTheme = theme;
}
/**
* Set the theme for the application.
*
* @param theme The theme name, either "light" or "dark".
*/
public static void setTheme(String theme) {
switch (theme) {
case "dark":
setTheme(THEME_DARK);
break;
case "light":
default:
setTheme(THEME_LIGHT);
}
}
public static String getTheme() {
return (currentTheme == THEME_LIGHT) ? "light" : "dark";
}
public static Color textColor() {
return (currentTheme == THEME_LIGHT) ? BLACK : WHITE;
}
public static Color boxColor() {
return (currentTheme == THEME_LIGHT) ? WHITE : DBACK;
}
public static Color windowColor() {
return (currentTheme == THEME_LIGHT) ? LGRAY : DGRAY;
}
public static Color tabColor() {
return (currentTheme == THEME_LIGHT) ? LBACK : DBACK;
}
public static String editorTheme() {
return (currentTheme == THEME_LIGHT) ? "default" : "dark";
}
}
Loading…
Cancel
Save