Themes & Themes Configuration

Added themes to choose from and provides customization setting for
these.
This commit is contained in:
DieGurke
2019-12-07 10:58:03 +01:00
parent 8f0bf6012a
commit e245a129af
7 changed files with 736 additions and 232 deletions

View File

@ -49,10 +49,8 @@ public class ChatWindow extends JFrame {
private static final long serialVersionUID = 6865098428255463649L;
// user specific objects
private Client client;
private LocalDB localDB;
// used colors in Envoy
private UIColors uiColors = UIColors.getInstance(true);
private Client client;
private LocalDB localDB;
// GUI components
private JPanel contentPane = new JPanel();
private JTextArea messageEnterTextArea = new JTextArea();
@ -62,8 +60,8 @@ public class ChatWindow extends JFrame {
private JScrollPane scrollPane = new JScrollPane();
private JTextPane textPane = new JTextPane();
// private JCheckBox jCbChangeMode;
private JButton postButton = new JButton("Post");
private JButton settingsButton = new JButton("Settings");
private JButton postButton = new JButton("Post");
private JButton settingsButton = new JButton("Settings");
private static int space = 4;
@ -80,12 +78,14 @@ public class ChatWindow extends JFrame {
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) { try {
localDB.saveToLocalDB();
} catch (IOException e1) {
e1.printStackTrace();
System.err.println("Could nnot save localDB");
} }
public void windowClosing(WindowEvent e) {
try {
localDB.saveToLocalDB();
} catch (IOException e1) {
e1.printStackTrace();
System.err.println("Could not save localDB");
}
}
});
contentPane.setBorder(new EmptyBorder(space, space, space, space));
@ -125,8 +125,9 @@ public class ChatWindow extends JFrame {
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER && ((Settings.getInstance().isEnterToSend() && e.getModifiersEx() == 0)
|| (e.getModifiersEx() == KeyEvent.CTRL_DOWN_MASK))) {
if (e.getKeyCode() == KeyEvent.VK_ENTER
&& ((Settings.getInstance().isEnterToSend() && e.getModifiersEx() == 0)
|| (e.getModifiersEx() == KeyEvent.CTRL_DOWN_MASK))) {
postMessage(messageList);
}
@ -176,7 +177,9 @@ public class ChatWindow extends JFrame {
settingsButton.addActionListener((evt) -> {
try {
SettingsScreen.open();
changeChatWindowColors();
changeChatWindowColors(Settings.getInstance().getCurrentTheme());
} catch (Exception e) {
System.err.println("An error occured while opening the settings screen: " + e);
e.printStackTrace();
@ -232,8 +235,8 @@ public class ChatWindow extends JFrame {
gbc_userList.anchor = GridBagConstraints.PAGE_START;
gbc_userList.insets = new Insets(space, space, space, space);
changeChatWindowColors();
changeChatWindowColors(Settings.getInstance().getCurrentTheme());
contentPane.add(userList, gbc_userList);
contentPane.revalidate();
@ -243,43 +246,44 @@ public class ChatWindow extends JFrame {
contentPane.revalidate();
}
/**
* Used to immediately reload the ChatWindow when settings were changed.
*
* @since Envoy v0.1-alpha
*/
public void changeChatWindowColors() {
uiColors.setDisplayMode(Settings.getInstance().isDarkMode());
public void changeChatWindowColors(String key) {
Theme theme = Settings.getInstance().getThemes().get(key);
// contentPane
contentPane.setBackground(uiColors.getBackgroundColor());
contentPane.setForeground(uiColors.getTextColor());
contentPane.setBackground(theme.getBackgroundColor());
contentPane.setForeground(theme.getUserNameColor());
// messageList
messageList.setSelectionForeground(uiColors.getTextColor());
messageList.setSelectionBackground(uiColors.getSpecialUseColor());
messageList.setForeground(uiColors.getTextColor());
messageList.setBackground(uiColors.getUserInteractionColor());
messageList.setSelectionForeground(theme.getUserNameColor());
messageList.setSelectionBackground(theme.getSelectionColor());
messageList.setForeground(theme.getMessageColorChat());
messageList.setBackground(theme.getCellColor());
// scrollPane
scrollPane.setForeground(uiColors.getBackgroundColor());
scrollPane.setBackground(uiColors.getUserInteractionColor());
scrollPane.setForeground(theme.getBackgroundColor());
scrollPane.setBackground(theme.getCellColor());
// messageEnterTextArea
messageEnterTextArea.setCaretColor(uiColors.getTextColor());
messageEnterTextArea.setForeground(uiColors.getTextColor());
messageEnterTextArea.setBackground(uiColors.getUserInteractionColor());
messageEnterTextArea.setCaretColor(theme.getTypingMessageColor());
messageEnterTextArea.setForeground(theme.getTypingMessageColor());
messageEnterTextArea.setBackground(theme.getCellColor());
// postButton
postButton.setForeground(uiColors.getTextColor());
postButton.setBackground(uiColors.getSpecialUseColor());
postButton.setForeground(theme.getInteractableForegroundColor());
postButton.setBackground(theme.getInteractableBackgroundColor());
// settingsButton
settingsButton.setForeground(uiColors.getTextColor());
settingsButton.setBackground(uiColors.getSpecialUseColor());
settingsButton.setForeground(theme.getInteractableForegroundColor());
settingsButton.setBackground(theme.getInteractableBackgroundColor());
// textPane
textPane.setBackground(uiColors.getBackgroundColor());
textPane.setForeground(uiColors.getTextColor());
textPane.setBackground(theme.getBackgroundColor());
textPane.setForeground(theme.getUserNameColor());
// userList
userList.setSelectionForeground(uiColors.getTextColor());
userList.setSelectionBackground(uiColors.getSpecialUseColor());
userList.setForeground(uiColors.getTextColor());
userList.setBackground(uiColors.getUserInteractionColor());
userList.setSelectionForeground(theme.getUserNameColor());
userList.setSelectionBackground(theme.getSelectionColor());
userList.setForeground(theme.getUserNameColor());
userList.setBackground(theme.getCellColor());
}
@ -293,9 +297,10 @@ public class ChatWindow extends JFrame {
if (!messageEnterTextArea.getText().isEmpty()) try {
// Create and send message object
final Message message = localDB.createMessage(messageEnterTextArea.getText(), currentChat.getRecipient().getID());
localDB.addWaitingMessageToLocalDB(message, currentChat);
// Create and send message object
final Message message = localDB.createMessage(messageEnterTextArea.getText(),
currentChat.getRecipient().getID());
localDB.addWaitingMessageToLocalDB(message, currentChat);
messageList.setModel(currentChat.getModel());
// Clear text field