Implemented settings object and cleaned up ChatWindow
Improvements: * Settings were implemented * Light theme support was implemented * The readability of ChatWindow got improved
This commit is contained in:
parent
329339f05c
commit
48b9176ac2
@ -63,6 +63,7 @@ public class Config {
|
|||||||
case "--localDB":
|
case "--localDB":
|
||||||
case "-db":
|
case "-db":
|
||||||
localDB = new File(args[++i]);
|
localDB = new File(args[++i]);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if (localDB == null) localDB = new File(".\\localDB");
|
if (localDB == null) localDB = new File(".\\localDB");
|
||||||
if (syncTimeout == 0) syncTimeout = 1000;
|
if (syncTimeout == 0) syncTimeout = 1000;
|
||||||
@ -116,12 +117,23 @@ public class Config {
|
|||||||
* Changes the default local database.
|
* Changes the default local database.
|
||||||
* Exclusively intended for development purposes.
|
* Exclusively intended for development purposes.
|
||||||
*
|
*
|
||||||
* @param the file containing the local database
|
* @param localDB the file containing the local database
|
||||||
* @since Envoy v0.1-alpha
|
* @since Envoy v0.1-alpha
|
||||||
**/
|
**/
|
||||||
public void setLocalDB(File localDB) { this.localDB = localDB; }
|
public void setLocalDB(File localDB) { this.localDB = localDB; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return the current time (milliseconds) that is waited between Syncs
|
||||||
|
* @since Envoy v0.1-alpha
|
||||||
|
*/
|
||||||
public int getSyncTimeout() { return syncTimeout; }
|
public int getSyncTimeout() { return syncTimeout; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param syncTimeout sets the time (milliseconds) during which Sync waits
|
||||||
|
* @since Envoy v0.1-alpha
|
||||||
|
*/
|
||||||
public void setSyncTimeout(int syncTimeout) { this.syncTimeout = syncTimeout; }
|
public void setSyncTimeout(int syncTimeout) { this.syncTimeout = syncTimeout; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -30,8 +30,10 @@ import envoy.schema.User;
|
|||||||
* @since Envoy v0.1-alpha
|
* @since Envoy v0.1-alpha
|
||||||
*/
|
*/
|
||||||
public class LocalDB {
|
public class LocalDB {
|
||||||
|
|
||||||
private File localDB;
|
private File localDB;
|
||||||
private User sender;
|
private User sender;
|
||||||
|
private final long id;
|
||||||
private List<Chat> chats = new ArrayList<>();
|
private List<Chat> chats = new ArrayList<>();
|
||||||
private ObjectFactory objectFactory = new ObjectFactory();
|
private ObjectFactory objectFactory = new ObjectFactory();
|
||||||
private DatatypeFactory datatypeFactory;
|
private DatatypeFactory datatypeFactory;
|
||||||
@ -39,12 +41,13 @@ public class LocalDB {
|
|||||||
/**
|
/**
|
||||||
* Constructs an empty local database.
|
* Constructs an empty local database.
|
||||||
*
|
*
|
||||||
* @param client the user that is logged in with this client
|
* @param sender the user that is logged in with this client
|
||||||
* @since Envoy v0.1-alpha
|
* @since Envoy v0.1-alpha
|
||||||
**/
|
**/
|
||||||
|
|
||||||
public LocalDB(User sender) {
|
public LocalDB(User sender) {
|
||||||
this.sender = sender;
|
this.sender = sender;
|
||||||
|
id = sender.getID();
|
||||||
try {
|
try {
|
||||||
datatypeFactory = DatatypeFactory.newInstance();
|
datatypeFactory = DatatypeFactory.newInstance();
|
||||||
} catch (DatatypeConfigurationException e) {
|
} catch (DatatypeConfigurationException e) {
|
||||||
@ -52,7 +55,6 @@ public class LocalDB {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes the local database and fills it with values
|
* Initializes the local database and fills it with values
|
||||||
* if the user has already sent or received messages.
|
* if the user has already sent or received messages.
|
||||||
@ -64,14 +66,16 @@ public class LocalDB {
|
|||||||
public void initializeDBFile(File localDBDir) throws EnvoyException {
|
public void initializeDBFile(File localDBDir) throws EnvoyException {
|
||||||
if (localDBDir.exists() && !localDBDir.isDirectory()) throw new EnvoyException(
|
if (localDBDir.exists() && !localDBDir.isDirectory()) throw new EnvoyException(
|
||||||
String.format("LocalDBDir '%s' is not a directory!", localDBDir.getAbsolutePath()));
|
String.format("LocalDBDir '%s' is not a directory!", localDBDir.getAbsolutePath()));
|
||||||
localDB = new File(localDBDir, sender.getID() + ".db");
|
localDB = new File(localDBDir, id + ".db");
|
||||||
if (localDB.exists()) loadFromLocalDB();
|
if (localDB.exists()) loadFromLocalDB();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Saves the database into a file for future use.
|
* Saves the database into a file for future use.<br>
|
||||||
|
* It is theoretically possible to fail due to unknown causes.<br>
|
||||||
|
* In such a case, every message sent/ received during that session will be
|
||||||
|
* lost.
|
||||||
*
|
*
|
||||||
* @throws IOException if something went wrong during saving
|
|
||||||
* @since Envoy v0.1-alpha
|
* @since Envoy v0.1-alpha
|
||||||
**/
|
**/
|
||||||
public void saveToLocalDB() {
|
public void saveToLocalDB() {
|
||||||
@ -110,12 +114,13 @@ public class LocalDB {
|
|||||||
* Creates a {@link Message} object serializable to XML.
|
* Creates a {@link Message} object serializable to XML.
|
||||||
*
|
*
|
||||||
* @param textContent The content (text) of the message
|
* @param textContent The content (text) of the message
|
||||||
|
* @param recipientID self explanatory
|
||||||
* @return prepared {@link Message} object
|
* @return prepared {@link Message} object
|
||||||
*/
|
*/
|
||||||
public Message createMessage(String textContent, User recipient) {
|
public Message createMessage(String textContent, long recipientID) {
|
||||||
Message.Metadata metaData = objectFactory.createMessageMetadata();
|
Message.Metadata metaData = objectFactory.createMessageMetadata();
|
||||||
metaData.setSender(sender.getID());
|
metaData.setSender(sender.getID());
|
||||||
metaData.setRecipient(recipient.getID());
|
metaData.setRecipient(recipientID);
|
||||||
metaData.setState(MessageState.WAITING);
|
metaData.setState(MessageState.WAITING);
|
||||||
metaData.setDate(datatypeFactory.newXMLGregorianCalendar(Instant.now().toString()));
|
metaData.setDate(datatypeFactory.newXMLGregorianCalendar(Instant.now().toString()));
|
||||||
|
|
||||||
@ -257,7 +262,7 @@ public class LocalDB {
|
|||||||
/**
|
/**
|
||||||
* Adds a message to the "sync" Sync object.
|
* Adds a message to the "sync" Sync object.
|
||||||
*
|
*
|
||||||
* @param message
|
* @param message the message to send
|
||||||
* @since Envoy v0.1-alpha
|
* @since Envoy v0.1-alpha
|
||||||
*/
|
*/
|
||||||
public void addMessageToSync(Message message) { sync.getMessages().add(message); }
|
public void addMessageToSync(Message message) { sync.getMessages().add(message); }
|
||||||
@ -274,7 +279,6 @@ public class LocalDB {
|
|||||||
* Adds the unread messages returned from the server in the latest sync to the
|
* Adds the unread messages returned from the server in the latest sync to the
|
||||||
* right chats in the LocalDB.
|
* right chats in the LocalDB.
|
||||||
*
|
*
|
||||||
* @param localDB
|
|
||||||
* @since Envoy v0.1-alpha
|
* @since Envoy v0.1-alpha
|
||||||
*/
|
*/
|
||||||
public void addUnreadMessagesToLocalDB() {
|
public void addUnreadMessagesToLocalDB() {
|
||||||
@ -292,7 +296,6 @@ public class LocalDB {
|
|||||||
* Gets all messages with state SENT from the LocalDB and adds them to the
|
* Gets all messages with state SENT from the LocalDB and adds them to the
|
||||||
* "sync" Sync object.
|
* "sync" Sync object.
|
||||||
*
|
*
|
||||||
* @param localDB
|
|
||||||
* @since Envoy v0.1-alpha
|
* @since Envoy v0.1-alpha
|
||||||
*/
|
*/
|
||||||
public void getSentStateMessagesFromLocalDB() {
|
public void getSentStateMessagesFromLocalDB() {
|
||||||
@ -310,7 +313,7 @@ public class LocalDB {
|
|||||||
* <br>
|
* <br>
|
||||||
* Adds these Messages to the {@code readMessages} {@link Sync} object.
|
* Adds these Messages to the {@code readMessages} {@link Sync} object.
|
||||||
*
|
*
|
||||||
* @param currentChat
|
* @param currentChat the chat that was just opened
|
||||||
* @since Envoy v0.1-alpha
|
* @since Envoy v0.1-alpha
|
||||||
*/
|
*/
|
||||||
public void setMessagesToRead(Chat currentChat) {
|
public void setMessagesToRead(Chat currentChat) {
|
||||||
@ -325,8 +328,8 @@ public class LocalDB {
|
|||||||
/**
|
/**
|
||||||
* Adds a message with State WAITING to a specific chat in the LocalDB.
|
* Adds a message with State WAITING to a specific chat in the LocalDB.
|
||||||
*
|
*
|
||||||
* @param message
|
* @param message the message that is not yet received by the other user
|
||||||
* @param currentChat
|
* @param currentChat the chat that is currently open
|
||||||
* @since Envoy v0.1-alpha
|
* @since Envoy v0.1-alpha
|
||||||
*/
|
*/
|
||||||
public void addWaitingMessageToLocalDB(Message message, Chat currentChat) { currentChat.appendMessage(message); }
|
public void addWaitingMessageToLocalDB(Message message, Chat currentChat) { currentChat.appendMessage(message); }
|
||||||
@ -334,7 +337,6 @@ public class LocalDB {
|
|||||||
/**
|
/**
|
||||||
* Adds all messages with State WAITING from the {@link LocalDB} to the Sync.
|
* Adds all messages with State WAITING from the {@link LocalDB} to the Sync.
|
||||||
*
|
*
|
||||||
* @param localDB
|
|
||||||
* @since Envoy v0.1-alpha
|
* @since Envoy v0.1-alpha
|
||||||
*/
|
*/
|
||||||
public void addWaitingMessagesToSync() {
|
public void addWaitingMessagesToSync() {
|
||||||
@ -368,4 +370,11 @@ public class LocalDB {
|
|||||||
* @since Envoy v0.1-alpha
|
* @since Envoy v0.1-alpha
|
||||||
*/
|
*/
|
||||||
public User getUser() { return sender; }
|
public User getUser() { return sender; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the id of the client. Used as shortcut for quicker information
|
||||||
|
* retrieval
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
public long getId() { return id; }
|
||||||
}
|
}
|
||||||
|
129
src/main/java/envoy/client/Settings.java
Normal file
129
src/main/java/envoy/client/Settings.java
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
package envoy.client;
|
||||||
|
|
||||||
|
import java.util.prefs.Preferences;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Project: <strong>envoy-client</strong><br>
|
||||||
|
* File: <strong>Settings.java</strong><br>
|
||||||
|
* Created: <strong>11 Nov 2019</strong><br>
|
||||||
|
*
|
||||||
|
* @author Leon Hofmeister
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
public class Settings {
|
||||||
|
|
||||||
|
private String username;
|
||||||
|
private String email;
|
||||||
|
private boolean enterToSend = true;
|
||||||
|
private boolean darkMode = true;
|
||||||
|
// private Image profilePic;
|
||||||
|
private static Settings settings;
|
||||||
|
private Preferences prefs = Preferences.userNodeForPackage(Settings.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The way to instantiate the settings.
|
||||||
|
* Is set to private to deny other instances of that object.
|
||||||
|
*
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
private Settings() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is used to ensure that there is only one instance of Settings.
|
||||||
|
*
|
||||||
|
* @return the instance of Settings
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
public static Settings getInstance() {
|
||||||
|
if (settings == null) {
|
||||||
|
settings = new Settings();
|
||||||
|
}
|
||||||
|
settings.load();
|
||||||
|
return settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void load() {
|
||||||
|
settings.setUsername(prefs.get("username", ""));
|
||||||
|
settings.setEmail(prefs.get("email", ""));
|
||||||
|
settings.setDarkMode(prefs.getBoolean("darkMode", true));
|
||||||
|
settings.setEnterToSend(prefs.getBoolean("enterToSend", true));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void save() {
|
||||||
|
prefs.put("username", settings.getUsername());
|
||||||
|
prefs.put("email", settings.getEmail());
|
||||||
|
prefs.putBoolean("darkMode", settings.isDarkMode());
|
||||||
|
prefs.putBoolean("enterToSend", settings.isEnterToSend());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the username
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
public String getUsername() { return username; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param username the username to set
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
public void setUsername(String username) { this.username = username; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the email associated with that user.
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
public String getEmail() { return email; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param email the email to set
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
public void setEmail(String email) { this.email = email; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return true, if "enter" suffices to send a message, else it has to be "ctrl"
|
||||||
|
* + "enter"
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
public boolean isEnterToSend() { return enterToSend; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change mode of posting a message via Keystroke.
|
||||||
|
*
|
||||||
|
* @param enterToSend if true, "enter" suffices to send a message, <br>
|
||||||
|
* else it has to be "ctrl" + "enter"
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
public void setEnterToSend(boolean enterToSend) { this.enterToSend = enterToSend; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Describes whether the Envoy GUI should be displayed in dark mode or not.
|
||||||
|
*
|
||||||
|
* @return true, if dark mode display is currently set, else the light theme
|
||||||
|
* will be displayed
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
public boolean isDarkMode() { return darkMode; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change display mode of Envoy GUI.
|
||||||
|
*
|
||||||
|
* @param darkMode true, if dark mode display is currently set, <br>
|
||||||
|
* else the light theme will be displayed
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
public void setDarkMode(boolean darkMode) { this.darkMode = darkMode; }
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * @return the profilePic
|
||||||
|
// * @since Envoy v0.2-alpha
|
||||||
|
// */
|
||||||
|
// public Image getProfilePic() { return profilePic; }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * @param profilePic the profilePic to set
|
||||||
|
// * @since Envoy v0.1-alpha
|
||||||
|
// */
|
||||||
|
// public void setProfilePic(Image profilePic) { this.profilePic = profilePic; }
|
||||||
|
|
||||||
|
}
|
@ -1,6 +1,5 @@
|
|||||||
package envoy.client.ui;
|
package envoy.client.ui;
|
||||||
|
|
||||||
import java.awt.Color;
|
|
||||||
import java.awt.ComponentOrientation;
|
import java.awt.ComponentOrientation;
|
||||||
import java.awt.Font;
|
import java.awt.Font;
|
||||||
import java.awt.GridBagConstraints;
|
import java.awt.GridBagConstraints;
|
||||||
@ -29,6 +28,7 @@ import envoy.client.Chat;
|
|||||||
import envoy.client.Client;
|
import envoy.client.Client;
|
||||||
import envoy.client.Config;
|
import envoy.client.Config;
|
||||||
import envoy.client.LocalDB;
|
import envoy.client.LocalDB;
|
||||||
|
import envoy.client.Settings;
|
||||||
import envoy.schema.Message;
|
import envoy.schema.Message;
|
||||||
import envoy.schema.Sync;
|
import envoy.schema.Sync;
|
||||||
import envoy.schema.User;
|
import envoy.schema.User;
|
||||||
@ -47,19 +47,30 @@ public class ChatWindow extends JFrame {
|
|||||||
|
|
||||||
private static final long serialVersionUID = 6865098428255463649L;
|
private static final long serialVersionUID = 6865098428255463649L;
|
||||||
|
|
||||||
private JPanel contentPane = new JPanel();
|
// user specific objects
|
||||||
|
|
||||||
private Client client;
|
private Client client;
|
||||||
private LocalDB localDB;
|
private LocalDB localDB;
|
||||||
|
private Settings settings;
|
||||||
|
// used colors in Envoy
|
||||||
|
private UIColors uiColors = UIColors.getInstance(true);
|
||||||
|
// GUI components
|
||||||
|
private JPanel contentPane = new JPanel();
|
||||||
|
private JTextArea messageEnterTextArea = new JTextArea();
|
||||||
private JList<User> userList = new JList<>();
|
private JList<User> userList = new JList<>();
|
||||||
private Chat currentChat;
|
private Chat currentChat;
|
||||||
|
private JList<Message> messageList = new JList<>();
|
||||||
|
private JScrollPane scrollPane = new JScrollPane();
|
||||||
|
private JTextPane textPane = new JTextPane();
|
||||||
|
// private JCheckBox jCbChangeMode;
|
||||||
|
private JButton postButton = new JButton();
|
||||||
|
private JButton settingsButton = new JButton();
|
||||||
|
|
||||||
private JTextArea messageEnterTextArea;
|
private static int space = 4;
|
||||||
|
|
||||||
public ChatWindow(Client client, LocalDB localDB) {
|
public ChatWindow(Client client, LocalDB localDB, Settings setting) {
|
||||||
this.client = client;
|
this.client = client;
|
||||||
this.localDB = localDB;
|
this.localDB = localDB;
|
||||||
|
this.settings = setting;
|
||||||
|
|
||||||
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
setBounds(100, 100, 600, 800);
|
setBounds(100, 100, 600, 800);
|
||||||
@ -73,9 +84,7 @@ public class ChatWindow extends JFrame {
|
|||||||
public void windowClosing(WindowEvent e) { localDB.saveToLocalDB(); }
|
public void windowClosing(WindowEvent e) { localDB.saveToLocalDB(); }
|
||||||
});
|
});
|
||||||
|
|
||||||
contentPane.setBackground(new Color(0, 0, 0));
|
contentPane.setBorder(new EmptyBorder(space, space, space, space));
|
||||||
contentPane.setForeground(Color.white);
|
|
||||||
contentPane.setBorder(new EmptyBorder(0, 5, 0, 0));
|
|
||||||
setContentPane(contentPane);
|
setContentPane(contentPane);
|
||||||
GridBagLayout gbl_contentPane = new GridBagLayout();
|
GridBagLayout gbl_contentPane = new GridBagLayout();
|
||||||
gbl_contentPane.columnWidths = new int[] { 1, 1, 1 };
|
gbl_contentPane.columnWidths = new int[] { 1, 1, 1 };
|
||||||
@ -84,25 +93,16 @@ public class ChatWindow extends JFrame {
|
|||||||
gbl_contentPane.rowWeights = new double[] { 0.05, 1.0, 0.07 };
|
gbl_contentPane.rowWeights = new double[] { 0.05, 1.0, 0.07 };
|
||||||
contentPane.setLayout(gbl_contentPane);
|
contentPane.setLayout(gbl_contentPane);
|
||||||
|
|
||||||
JList<Message> messageList = new JList<>();
|
|
||||||
messageList.setCellRenderer(new MessageListRenderer());
|
messageList.setCellRenderer(new MessageListRenderer());
|
||||||
|
|
||||||
messageList.setFocusTraversalKeysEnabled(false);
|
messageList.setFocusTraversalKeysEnabled(false);
|
||||||
messageList.setSelectionForeground(new Color(255, 255, 255));
|
|
||||||
messageList.setSelectionBackground(new Color(102, 0, 153));
|
|
||||||
messageList.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
|
messageList.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
|
||||||
messageList.setForeground(new Color(255, 255, 255));
|
|
||||||
messageList.setBackground(new Color(51, 51, 51));
|
|
||||||
|
|
||||||
DefaultListModel<Message> messageListModel = new DefaultListModel<>();
|
DefaultListModel<Message> messageListModel = new DefaultListModel<>();
|
||||||
messageList.setModel(messageListModel);
|
messageList.setModel(messageListModel);
|
||||||
messageList.setFont(new Font("Arial", Font.PLAIN, 17));
|
messageList.setFont(new Font("Arial", Font.PLAIN, 17));
|
||||||
messageList.setFixedCellHeight(60);
|
messageList.setFixedCellHeight(60);
|
||||||
messageList.setBorder(new EmptyBorder(5, 5, 5, 5));
|
messageList.setBorder(new EmptyBorder(space, space, space, space));
|
||||||
|
|
||||||
JScrollPane scrollPane = new JScrollPane();
|
|
||||||
scrollPane.setForeground(new Color(0, 0, 0));
|
|
||||||
scrollPane.setBackground(new Color(51, 51, 51));
|
|
||||||
scrollPane.setViewportView(messageList);
|
scrollPane.setViewportView(messageList);
|
||||||
scrollPane.setBorder(null);
|
scrollPane.setBorder(null);
|
||||||
|
|
||||||
@ -112,18 +112,17 @@ public class ChatWindow extends JFrame {
|
|||||||
gbc_scrollPane.gridx = 1;
|
gbc_scrollPane.gridx = 1;
|
||||||
gbc_scrollPane.gridy = 1;
|
gbc_scrollPane.gridy = 1;
|
||||||
|
|
||||||
gbc_scrollPane.insets = new Insets(0, 10, 10, 10);
|
gbc_scrollPane.insets = new Insets(space, space, space, space);
|
||||||
|
|
||||||
contentPane.add(scrollPane, gbc_scrollPane);
|
contentPane.add(scrollPane, gbc_scrollPane);
|
||||||
|
|
||||||
// Message enter field
|
// Message enter field
|
||||||
messageEnterTextArea = new JTextArea();
|
|
||||||
messageEnterTextArea.addKeyListener(new KeyAdapter() {
|
messageEnterTextArea.addKeyListener(new KeyAdapter() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void keyReleased(KeyEvent e) {
|
public void keyReleased(KeyEvent e) {
|
||||||
|
|
||||||
if (e.getKeyCode() == KeyEvent.VK_ENTER && ((SettingsScreen.enterToSend && e.getModifiersEx() == 0)
|
if (e.getKeyCode() == KeyEvent.VK_ENTER && ((settings.isEnterToSend() && e.getModifiersEx() == 0)
|
||||||
|| (e.getModifiersEx() == KeyEvent.CTRL_DOWN_MASK))) {
|
|| (e.getModifiersEx() == KeyEvent.CTRL_DOWN_MASK))) {
|
||||||
|
|
||||||
postMessage(messageList);
|
postMessage(messageList);
|
||||||
@ -133,44 +132,34 @@ public class ChatWindow extends JFrame {
|
|||||||
});
|
});
|
||||||
// Checks for changed Message
|
// Checks for changed Message
|
||||||
messageEnterTextArea.setWrapStyleWord(true);
|
messageEnterTextArea.setWrapStyleWord(true);
|
||||||
messageEnterTextArea.setCaretColor(new Color(255, 255, 255));
|
|
||||||
messageEnterTextArea.setForeground(new Color(255, 255, 255));
|
|
||||||
messageEnterTextArea.setBackground(new Color(51, 51, 51));
|
|
||||||
messageEnterTextArea.setLineWrap(true);
|
messageEnterTextArea.setLineWrap(true);
|
||||||
messageEnterTextArea.setBorder(null);
|
messageEnterTextArea.setBorder(null);
|
||||||
messageEnterTextArea.setFont(new Font("Arial", Font.PLAIN, 17));
|
messageEnterTextArea.setFont(new Font("Arial", Font.PLAIN, 17));
|
||||||
messageEnterTextArea.setBorder(new EmptyBorder(5, 5, 5, 5));
|
messageEnterTextArea.setBorder(new EmptyBorder(space, space, space, space));
|
||||||
|
|
||||||
GridBagConstraints gbc_messageEnterTextfield = new GridBagConstraints();
|
GridBagConstraints gbc_messageEnterTextfield = new GridBagConstraints();
|
||||||
gbc_messageEnterTextfield.fill = GridBagConstraints.BOTH;
|
gbc_messageEnterTextfield.fill = GridBagConstraints.BOTH;
|
||||||
gbc_messageEnterTextfield.gridx = 1;
|
gbc_messageEnterTextfield.gridx = 1;
|
||||||
gbc_messageEnterTextfield.gridy = 2;
|
gbc_messageEnterTextfield.gridy = 2;
|
||||||
|
|
||||||
gbc_messageEnterTextfield.insets = new Insets(10, 10, 10, 10);
|
gbc_messageEnterTextfield.insets = new Insets(space, space, space, space);
|
||||||
|
|
||||||
contentPane.add(messageEnterTextArea, gbc_messageEnterTextfield);
|
contentPane.add(messageEnterTextArea, gbc_messageEnterTextfield);
|
||||||
|
|
||||||
// Post Button
|
// Post Button
|
||||||
JButton postButton = new JButton("Post");
|
|
||||||
postButton.setForeground(new Color(255, 255, 255));
|
|
||||||
postButton.setBackground(new Color(102, 51, 153));
|
|
||||||
postButton.setBorderPainted(false);
|
postButton.setBorderPainted(false);
|
||||||
|
|
||||||
GridBagConstraints gbc_moveSelectionPostButton = new GridBagConstraints();
|
GridBagConstraints gbc_moveSelectionPostButton = new GridBagConstraints();
|
||||||
|
|
||||||
gbc_moveSelectionPostButton.fill = GridBagConstraints.BOTH;
|
gbc_moveSelectionPostButton.fill = GridBagConstraints.BOTH;
|
||||||
gbc_moveSelectionPostButton.gridx = 2;
|
gbc_moveSelectionPostButton.gridx = 2;
|
||||||
gbc_moveSelectionPostButton.gridy = 2;
|
gbc_moveSelectionPostButton.gridy = 2;
|
||||||
|
|
||||||
gbc_moveSelectionPostButton.insets = new Insets(10, 10, 10, 10);
|
gbc_moveSelectionPostButton.insets = new Insets(space, space, space, space);
|
||||||
|
|
||||||
postButton.addActionListener((evt) -> { postMessage(messageList); });
|
postButton.addActionListener((evt) -> { postMessage(messageList); });
|
||||||
contentPane.add(postButton, gbc_moveSelectionPostButton);
|
contentPane.add(postButton, gbc_moveSelectionPostButton);
|
||||||
|
|
||||||
// Settings Button
|
// Settings Button
|
||||||
JButton settingsButton = new JButton("Settings");
|
|
||||||
settingsButton.setForeground(new Color(255, 255, 255));
|
|
||||||
settingsButton.setBackground(new Color(102, 51, 153));
|
|
||||||
settingsButton.setBorderPainted(false);
|
settingsButton.setBorderPainted(false);
|
||||||
|
|
||||||
GridBagConstraints gbc_moveSelectionSettingsButton = new GridBagConstraints();
|
GridBagConstraints gbc_moveSelectionSettingsButton = new GridBagConstraints();
|
||||||
@ -179,13 +168,12 @@ public class ChatWindow extends JFrame {
|
|||||||
gbc_moveSelectionSettingsButton.gridx = 2;
|
gbc_moveSelectionSettingsButton.gridx = 2;
|
||||||
gbc_moveSelectionSettingsButton.gridy = 0;
|
gbc_moveSelectionSettingsButton.gridy = 0;
|
||||||
|
|
||||||
gbc_moveSelectionSettingsButton.insets = new Insets(10, 10, 10, 10);
|
gbc_moveSelectionSettingsButton.insets = new Insets(space, space, space, space);
|
||||||
|
|
||||||
settingsButton.addActionListener((evt) -> {
|
settingsButton.addActionListener((evt) -> {
|
||||||
try {
|
try {
|
||||||
SettingsScreen.open(localDB.getUser().getName());
|
|
||||||
} catch (Exception e) {
|
|
||||||
SettingsScreen.open();
|
SettingsScreen.open();
|
||||||
|
} catch (Exception e) {
|
||||||
System.err.println("An error occured while opening the settings screen: " + e);
|
System.err.println("An error occured while opening the settings screen: " + e);
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
@ -193,10 +181,6 @@ public class ChatWindow extends JFrame {
|
|||||||
contentPane.add(settingsButton, gbc_moveSelectionSettingsButton);
|
contentPane.add(settingsButton, gbc_moveSelectionSettingsButton);
|
||||||
|
|
||||||
// Partner name display
|
// Partner name display
|
||||||
JTextPane textPane = new JTextPane();
|
|
||||||
textPane.setBackground(new Color(0, 0, 0));
|
|
||||||
textPane.setForeground(new Color(255, 255, 255));
|
|
||||||
|
|
||||||
textPane.setFont(new Font("Arial", Font.PLAIN, 20));
|
textPane.setFont(new Font("Arial", Font.PLAIN, 20));
|
||||||
|
|
||||||
GridBagConstraints gbc_partnerName = new GridBagConstraints();
|
GridBagConstraints gbc_partnerName = new GridBagConstraints();
|
||||||
@ -204,7 +188,7 @@ public class ChatWindow extends JFrame {
|
|||||||
gbc_partnerName.gridx = 1;
|
gbc_partnerName.gridx = 1;
|
||||||
gbc_partnerName.gridy = 0;
|
gbc_partnerName.gridy = 0;
|
||||||
|
|
||||||
gbc_partnerName.insets = new Insets(0, 10, 0, 10);
|
gbc_partnerName.insets = new Insets(space, space, space, space);
|
||||||
contentPane.add(textPane, gbc_partnerName);
|
contentPane.add(textPane, gbc_partnerName);
|
||||||
|
|
||||||
userList.setCellRenderer(new UserListRenderer());
|
userList.setCellRenderer(new UserListRenderer());
|
||||||
@ -234,19 +218,17 @@ public class ChatWindow extends JFrame {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
userList.setSelectionForeground(new Color(255, 255, 255));
|
|
||||||
userList.setSelectionBackground(new Color(102, 0, 153));
|
|
||||||
userList.setForeground(new Color(255, 255, 255));
|
|
||||||
userList.setBackground(new Color(51, 51, 51));
|
|
||||||
userList.setFont(new Font("Arial", Font.PLAIN, 17));
|
userList.setFont(new Font("Arial", Font.PLAIN, 17));
|
||||||
userList.setBorder(new EmptyBorder(5, 5, 5, 5));
|
userList.setBorder(new EmptyBorder(space, space, space, space));
|
||||||
|
|
||||||
GridBagConstraints gbc_userList = new GridBagConstraints();
|
GridBagConstraints gbc_userList = new GridBagConstraints();
|
||||||
gbc_userList.fill = GridBagConstraints.VERTICAL;
|
gbc_userList.fill = GridBagConstraints.VERTICAL;
|
||||||
gbc_userList.gridx = 0;
|
gbc_userList.gridx = 0;
|
||||||
gbc_userList.gridy = 1;
|
gbc_userList.gridy = 1;
|
||||||
gbc_userList.anchor = GridBagConstraints.PAGE_START;
|
gbc_userList.anchor = GridBagConstraints.PAGE_START;
|
||||||
gbc_userList.insets = new Insets(0, 0, 10, 0);
|
gbc_userList.insets = new Insets(space, space, space, space);
|
||||||
|
|
||||||
|
changeChatWindowColors();
|
||||||
|
|
||||||
contentPane.add(userList, gbc_userList);
|
contentPane.add(userList, gbc_userList);
|
||||||
contentPane.revalidate();
|
contentPane.revalidate();
|
||||||
@ -257,6 +239,46 @@ public class ChatWindow extends JFrame {
|
|||||||
contentPane.revalidate();
|
contentPane.revalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to immediately reload the ChatWindow when settings were changed.
|
||||||
|
*
|
||||||
|
* @since Envoy v0.1-alpha
|
||||||
|
*/
|
||||||
|
public void changeChatWindowColors() {
|
||||||
|
uiColors.setDisplayMode(settings.isDarkMode());
|
||||||
|
|
||||||
|
// contentPane
|
||||||
|
contentPane.setBackground(uiColors.getBackgroundColor());
|
||||||
|
contentPane.setForeground(uiColors.getTextColor());
|
||||||
|
// messageList
|
||||||
|
messageList.setSelectionForeground(uiColors.getTextColor());
|
||||||
|
messageList.setSelectionBackground(uiColors.getSpecialUseColor());
|
||||||
|
messageList.setForeground(uiColors.getTextColor());
|
||||||
|
messageList.setBackground(uiColors.getUserInteractionColor());
|
||||||
|
// scrollPane
|
||||||
|
scrollPane.setForeground(uiColors.getBackgroundColor());
|
||||||
|
scrollPane.setBackground(uiColors.getUserInteractionColor());
|
||||||
|
// messageEnterTextArea
|
||||||
|
messageEnterTextArea.setCaretColor(uiColors.getTextColor());
|
||||||
|
messageEnterTextArea.setForeground(uiColors.getTextColor());
|
||||||
|
messageEnterTextArea.setBackground(uiColors.getUserInteractionColor());
|
||||||
|
// postButton
|
||||||
|
postButton.setForeground(uiColors.getTextColor());
|
||||||
|
postButton.setBackground(uiColors.getSpecialUseColor());
|
||||||
|
// settingsButton
|
||||||
|
settingsButton.setForeground(uiColors.getTextColor());
|
||||||
|
settingsButton.setBackground(uiColors.getSpecialUseColor());
|
||||||
|
// textPane
|
||||||
|
textPane.setBackground(uiColors.getBackgroundColor());
|
||||||
|
textPane.setForeground(uiColors.getTextColor());
|
||||||
|
// userList
|
||||||
|
userList.setSelectionForeground(uiColors.getTextColor());
|
||||||
|
userList.setSelectionBackground(uiColors.getSpecialUseColor());
|
||||||
|
userList.setForeground(uiColors.getTextColor());
|
||||||
|
userList.setBackground(uiColors.getUserInteractionColor());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private void postMessage(JList<Message> messageList) {
|
private void postMessage(JList<Message> messageList) {
|
||||||
if (!client.hasRecipient()) {
|
if (!client.hasRecipient()) {
|
||||||
JOptionPane.showMessageDialog(this,
|
JOptionPane.showMessageDialog(this,
|
||||||
@ -268,7 +290,7 @@ public class ChatWindow extends JFrame {
|
|||||||
if (!messageEnterTextArea.getText().isEmpty()) try {
|
if (!messageEnterTextArea.getText().isEmpty()) try {
|
||||||
|
|
||||||
// Create and send message object
|
// Create and send message object
|
||||||
final Message message = localDB.createMessage(messageEnterTextArea.getText(), currentChat.getRecipient());
|
final Message message = localDB.createMessage(messageEnterTextArea.getText(), currentChat.getRecipient().getID());
|
||||||
localDB.addWaitingMessageToLocalDB(message, currentChat);
|
localDB.addWaitingMessageToLocalDB(message, currentChat);
|
||||||
messageList.setModel(currentChat.getModel());
|
messageList.setModel(currentChat.getModel());
|
||||||
|
|
||||||
|
@ -1,15 +1,22 @@
|
|||||||
package envoy.client.ui;
|
package envoy.client.ui;
|
||||||
|
|
||||||
import java.awt.BorderLayout;
|
import java.awt.BorderLayout;
|
||||||
import java.awt.Color;
|
|
||||||
import java.awt.FlowLayout;
|
import java.awt.FlowLayout;
|
||||||
|
import java.awt.GridBagConstraints;
|
||||||
|
import java.awt.GridBagLayout;
|
||||||
|
import java.awt.Insets;
|
||||||
|
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
import javax.swing.JDialog;
|
import javax.swing.JDialog;
|
||||||
|
import javax.swing.JOptionPane;//TODO: temporary
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import javax.swing.border.EmptyBorder;
|
import javax.swing.border.EmptyBorder;
|
||||||
|
|
||||||
|
import envoy.client.Settings;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* This class provides the GUI to change the user specific settings.
|
||||||
|
*
|
||||||
* Project: <strong>envoy-client</strong><br>
|
* Project: <strong>envoy-client</strong><br>
|
||||||
* File: <strong>SettingsScreen.java</strong><br>
|
* File: <strong>SettingsScreen.java</strong><br>
|
||||||
* Created: <strong>31 Oct 2019</strong><br>
|
* Created: <strong>31 Oct 2019</strong><br>
|
||||||
@ -20,137 +27,107 @@ public class SettingsScreen extends JDialog {
|
|||||||
|
|
||||||
private static final long serialVersionUID = -4476913491263077107L;
|
private static final long serialVersionUID = -4476913491263077107L;
|
||||||
private final JPanel contentPanel = new JPanel();
|
private final JPanel contentPanel = new JPanel();
|
||||||
public static boolean enterToSend = true;
|
private JPanel buttonPane = new JPanel();
|
||||||
|
private JButton okButton = new JButton("Save");
|
||||||
|
private JButton cancelButton = new JButton("Cancel");
|
||||||
|
private static Settings settings;
|
||||||
|
private static UIColors uiColors;
|
||||||
|
private static int space = 5;
|
||||||
|
private static SettingsScreen settingsScreen;
|
||||||
|
|
||||||
// TODO: Add a JPanel with all the Information necessary:
|
// TODO: Add a JPanel with all the Information necessary:
|
||||||
// change (Picture,Username, Email, Password) and toggle(light/dark mode,
|
// change (Picture,Username, Email, Password) and toggle(light/dark mode,
|
||||||
// "ctrl+enter"/"enter"
|
// "ctrl+enter"/"enter"
|
||||||
// to send a message directly)
|
// to send a message directly)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Open the Settings screen.
|
* Opens the settings screen.<br>
|
||||||
* Only suited for Dev/Error mode.
|
|
||||||
* Avoid usage.
|
|
||||||
*
|
*
|
||||||
* @since Envoy v0.1-alpha
|
* @since Envoy v0.1-alpha
|
||||||
*/
|
*/
|
||||||
public static void open() { open(new SettingsScreen()); }
|
public static void open() {
|
||||||
|
|
||||||
/**
|
settings = Settings.getInstance();
|
||||||
* Opens the Settings screen.<br>
|
uiColors.setDisplayMode(settings.isDarkMode());
|
||||||
* Use preferably since everyone is already initialised.<br>
|
settingsScreen = new SettingsScreen();
|
||||||
* It personalises the screen more.
|
settingsScreen.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
|
||||||
*
|
settingsScreen.setModal(true);
|
||||||
* @param username The name of the User
|
settingsScreen.setVisible(true);
|
||||||
* @param Email The Email that is associated with that Account
|
|
||||||
* @since Envoy v0.1-alpha
|
|
||||||
*/
|
|
||||||
public static void open(String username) {// , String Email) {AUSKLAMMERN, WENN ANMELDUNG PER
|
|
||||||
// EMAIL IMPLEMENTIERT IST!
|
|
||||||
open(new SettingsScreen(username));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void open(SettingsScreen dialog) {
|
|
||||||
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
|
|
||||||
dialog.setModal(true);
|
|
||||||
dialog.setVisible(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Builds the Settings screen.<br>
|
* Builds the settings screen.<br>
|
||||||
* Use only as Dev/Error Mode.<br>
|
|
||||||
* Avoid usage.
|
|
||||||
*
|
*
|
||||||
* @since Envoy v0.1-alpha
|
* @since Envoy v0.1-alpha
|
||||||
*/
|
*/
|
||||||
public SettingsScreen() {
|
private SettingsScreen() {
|
||||||
setBackground(Color.BLACK);
|
|
||||||
setBounds(100, 100, 450, 300);
|
setBounds(100, 100, 450, 300);
|
||||||
getContentPane().setLayout(new BorderLayout());
|
getContentPane().setLayout(new BorderLayout());
|
||||||
contentPanel.setBackground(Color.BLACK);
|
|
||||||
contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
|
|
||||||
getContentPane().add(contentPanel, BorderLayout.CENTER);
|
|
||||||
contentPanel.setLayout(new BorderLayout(0, 0));
|
|
||||||
{
|
|
||||||
JPanel buttonPane = new JPanel();
|
|
||||||
buttonPane.setBackground(Color.BLACK);
|
|
||||||
getContentPane().add(buttonPane, BorderLayout.SOUTH);
|
|
||||||
buttonPane.setLayout(new BorderLayout(0, 0));
|
|
||||||
{
|
|
||||||
JButton okButton = new JButton("Save");
|
|
||||||
okButton.setActionCommand("OK");
|
|
||||||
buttonPane.add(okButton, BorderLayout.EAST);
|
|
||||||
getRootPane().setDefaultButton(okButton);
|
|
||||||
okButton.addActionListener((evt) -> {
|
|
||||||
// Hier später die Daten abspeichern, wenn Datenmodell implementiert ist
|
|
||||||
dispose();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
{
|
|
||||||
JButton cancelButton = new JButton("Cancel");
|
|
||||||
cancelButton.setActionCommand("Cancel");
|
|
||||||
buttonPane.add(cancelButton, BorderLayout.WEST);
|
|
||||||
|
|
||||||
cancelButton.addActionListener((evt) -> { dispose(); });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Builds the Settings screen.<br>
|
|
||||||
* Use preferreably since everyone is already initialised.<br>
|
|
||||||
* It personalises the screen more.
|
|
||||||
*
|
|
||||||
* @param Username The name of the User
|
|
||||||
* @param Email The Email that is associated with that Account
|
|
||||||
* @since Envoy v0.1-alpha
|
|
||||||
*/
|
|
||||||
public SettingsScreen(String Username) {// , String Email, String hashedPwd) {AUSKLAMMERN, WENN ANMELDUNG PER EMAIL
|
|
||||||
// IMPLEMENTIERT IST!
|
|
||||||
setBackground(Color.BLACK);
|
|
||||||
setBounds(100, 100, 450, 300);
|
|
||||||
getContentPane().setLayout(new BorderLayout());
|
|
||||||
contentPanel.setBackground(Color.BLACK);
|
|
||||||
contentPanel.setLayout(new FlowLayout());
|
contentPanel.setLayout(new FlowLayout());
|
||||||
contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
|
contentPanel.setBorder(new EmptyBorder(space, space, space, space));
|
||||||
getContentPane().add(contentPanel, BorderLayout.CENTER);
|
getContentPane().add(contentPanel, BorderLayout.CENTER);
|
||||||
{
|
{
|
||||||
JPanel buttonPane = new JPanel();
|
|
||||||
buttonPane.setBackground(Color.BLACK);
|
|
||||||
getContentPane().add(buttonPane, BorderLayout.SOUTH);
|
getContentPane().add(buttonPane, BorderLayout.SOUTH);
|
||||||
buttonPane.setLayout(new BorderLayout(0, 0));
|
GridBagLayout gbl_buttonPane = new GridBagLayout();
|
||||||
|
gbl_buttonPane.columnWidths = new int[] { 100, 250, 100, 0 };
|
||||||
|
gbl_buttonPane.rowHeights = new int[] { 25, 0 };
|
||||||
|
gbl_buttonPane.columnWeights = new double[] { 0.0, 0.0, 0.0, Double.MIN_VALUE };
|
||||||
|
gbl_buttonPane.rowWeights = new double[] { 0.0, Double.MIN_VALUE };
|
||||||
|
buttonPane.setLayout(gbl_buttonPane);
|
||||||
{
|
{
|
||||||
JButton okButton = new JButton("Save");
|
|
||||||
okButton.setActionCommand("OK");
|
|
||||||
buttonPane.add(okButton, BorderLayout.EAST);
|
|
||||||
getRootPane().setDefaultButton(okButton);
|
|
||||||
okButton.addActionListener((evt) -> {
|
|
||||||
// Hier später die Daten abspeichern, wenn Datenmodell implementiert ist
|
|
||||||
dispose();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
{
|
|
||||||
JButton cancelButton = new JButton("Cancel");
|
|
||||||
cancelButton.setActionCommand("Cancel");
|
cancelButton.setActionCommand("Cancel");
|
||||||
buttonPane.add(cancelButton, BorderLayout.WEST);
|
GridBagConstraints gbc_cancelButton = new GridBagConstraints();
|
||||||
|
gbc_cancelButton.anchor = GridBagConstraints.NORTHWEST;
|
||||||
|
gbc_cancelButton.insets = new Insets(space, space, space, space);
|
||||||
|
gbc_cancelButton.gridx = 0;
|
||||||
|
gbc_cancelButton.gridy = 0;
|
||||||
|
buttonPane.add(cancelButton, gbc_cancelButton);
|
||||||
|
|
||||||
cancelButton.addActionListener((evt) -> { dispose(); });
|
cancelButton.addActionListener((evt) -> { dispose(); });
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
okButton.setActionCommand("OK");
|
||||||
|
GridBagConstraints gbc_okButton = new GridBagConstraints();
|
||||||
|
gbc_okButton.anchor = GridBagConstraints.NORTHEAST;
|
||||||
|
gbc_okButton.fill = GridBagConstraints.EAST;
|
||||||
|
gbc_okButton.insets = new Insets(space, space, space, space);
|
||||||
|
gbc_okButton.gridx = 2;
|
||||||
|
gbc_okButton.gridy = 0;
|
||||||
|
buttonPane.add(okButton, gbc_okButton);
|
||||||
|
getRootPane().setDefaultButton(okButton);
|
||||||
|
okButton.addActionListener((evt) -> {
|
||||||
|
try {
|
||||||
|
settings.setUsername(settings.getUsername());// still temporary value
|
||||||
|
settings.setEmail(settings.getEmail());// still temporary value
|
||||||
|
settings.setDarkMode(false);// TODO temporary values while no UI is implemented
|
||||||
|
settings.setEnterToSend(settings.isEnterToSend());// still temporary value
|
||||||
|
settings.save();
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.err.println("Something went wrong when changing the setting");
|
||||||
|
settingsScreen.dispose();
|
||||||
|
}
|
||||||
|
JOptionPane.showConfirmDialog(settingsScreen, "Successfully changed settings");
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
changeSettingsScreenColors();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
private void changeSettingsScreenColors() {
|
||||||
* @return true if Enter should be used to send a message instead of ctrl+enter
|
// whole JDialog
|
||||||
* @since Envoy v0.1-alpha
|
setBackground(uiColors.getBackgroundColor());
|
||||||
*/
|
// contentPanel
|
||||||
public static boolean isEnterToSend() { return enterToSend; }
|
contentPanel.setBackground(uiColors.getBackgroundColor());
|
||||||
|
// buttonPane
|
||||||
|
buttonPane.setBackground(uiColors.getBackgroundColor());
|
||||||
|
// cancelButton
|
||||||
|
cancelButton.setBackground(uiColors.getSpecialUseColor());
|
||||||
|
cancelButton.setForeground(uiColors.getTextColor());
|
||||||
|
// okButton
|
||||||
|
okButton.setBackground(uiColors.getSpecialUseColor());
|
||||||
|
okButton.setForeground(uiColors.getTextColor());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param enterToSend <br>
|
|
||||||
* toggles whether a message should be sent via
|
|
||||||
* <br>
|
|
||||||
* buttonpress "enter" or "ctrl"+"enter"
|
|
||||||
* @since Envoy v0.1-alpha
|
|
||||||
*/
|
|
||||||
public static void setEnterToSend(boolean enterForSend) { enterToSend = enterForSend; }
|
|
||||||
// TODO: Should be changed to private, but later to avoid warnings
|
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import javax.swing.JOptionPane;
|
|||||||
import envoy.client.Client;
|
import envoy.client.Client;
|
||||||
import envoy.client.Config;
|
import envoy.client.Config;
|
||||||
import envoy.client.LocalDB;
|
import envoy.client.LocalDB;
|
||||||
|
import envoy.client.Settings;
|
||||||
import envoy.exception.EnvoyException;
|
import envoy.exception.EnvoyException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -60,10 +61,11 @@ public class Startup {
|
|||||||
"Local DB error",
|
"Local DB error",
|
||||||
JOptionPane.WARNING_MESSAGE);
|
JOptionPane.WARNING_MESSAGE);
|
||||||
}
|
}
|
||||||
|
Settings settings = Settings.getInstance();//TODO delete line
|
||||||
|
|
||||||
EventQueue.invokeLater(() -> {
|
EventQueue.invokeLater(() -> {
|
||||||
try {
|
try {
|
||||||
ChatWindow frame = new ChatWindow(client, localDB);
|
ChatWindow frame = new ChatWindow(client, localDB, settings);
|
||||||
frame.setVisible(true);
|
frame.setVisible(true);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
158
src/main/java/envoy/client/ui/UIColors.java
Normal file
158
src/main/java/envoy/client/ui/UIColors.java
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
package envoy.client.ui;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class stores the colors that are used in Envoy.
|
||||||
|
* <br>
|
||||||
|
* <br>
|
||||||
|
* Project: <strong>envoy-client</strong><br>
|
||||||
|
* File: <strong>EnvoyColors.java</strong><br>
|
||||||
|
* Created: <strong>16 Nov 2019</strong><br>
|
||||||
|
*
|
||||||
|
* @author Leon Hofmeister
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
public class UIColors {
|
||||||
|
|
||||||
|
private UIColors() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This color is used for the general background where no other elements
|
||||||
|
* overlap.
|
||||||
|
*
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
private Color backgroundColor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This color is used as background for all areas where a user can interact with
|
||||||
|
* Envoy.
|
||||||
|
* (i.e. a JTextArea or JList)
|
||||||
|
*
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
|
||||||
|
private Color userInteractionColor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This color is used for any areas that need special attention.
|
||||||
|
* (i.e. highlighting a selected list column or a button background)
|
||||||
|
*
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
private Color specialUseColor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This color is the color in which text will be displayed.
|
||||||
|
*
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
private Color textColor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This object ensures that only one {@link UIColors} object exists.
|
||||||
|
*
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
private static UIColors uIColors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is used to ensure that there is only one instance of EnvoyColors.
|
||||||
|
*
|
||||||
|
* @param darkMode default value how envoyColors should be displayed
|
||||||
|
* @return the instance of EnvoyColors
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
public static UIColors getInstance(boolean darkMode) {
|
||||||
|
if (uIColors == null) { uIColors = new UIColors(); }
|
||||||
|
uIColors.setDisplayMode(darkMode);
|
||||||
|
return uIColors;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to change the appearance of Envoy.
|
||||||
|
*
|
||||||
|
* @param darkMode if true, Envoy will be displayed in dark mode else it will
|
||||||
|
* use bright mode
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
public void setDisplayMode(boolean darkMode) {
|
||||||
|
if (darkMode) {
|
||||||
|
uIColors.setBackgroundColor(Color.black); // TODO: other color suggestions?
|
||||||
|
uIColors.setUserInteractionColor(Color.darkGray); // temporary
|
||||||
|
uIColors.setSpecialUseColor(Color.blue); // temporary
|
||||||
|
uIColors.setTextColor(Color.white); // temporary
|
||||||
|
|
||||||
|
} else {
|
||||||
|
uIColors.setBackgroundColor(Color.white); // temporary
|
||||||
|
uIColors.setUserInteractionColor(Color.lightGray); // temporary
|
||||||
|
uIColors.setSpecialUseColor(Color.green); // temporary
|
||||||
|
uIColors.setTextColor(Color.black); // temporary
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the {@link UIColors#backgroundColor}
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
public Color getBackgroundColor() { return backgroundColor; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param backgroundColor the new {@link UIColors#backgroundColor}
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
public void setBackgroundColor(Color backgroundColor) { this.backgroundColor = backgroundColor; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the {@link UIColors#userInteractionColor}
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
public Color getUserInteractionColor() { return userInteractionColor; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param userInteractionColor the new {@link UIColors#userInteractionColor}
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
public void setUserInteractionColor(Color userInteractionColor) {
|
||||||
|
this.userInteractionColor = userInteractionColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the {@link UIColors#specialUseColor}
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
public Color getSpecialUseColor() { return specialUseColor; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param specialUseColor the new {@link UIColors#specialUseColor}
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
public void setSpecialUseColor(Color specialUseColor) { this.specialUseColor = specialUseColor; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the {@link UIColors#textColor}
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
public Color getTextColor() { return textColor; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param textColor the new {@link UIColors#textColor}
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
public void setTextColor(Color textColor) { this.textColor = textColor; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the {@link UIColors#uIColors}
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
public static UIColors getEnvoyColors() { return uIColors; }
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
/**
|
||||||
|
* @param envoyColors the new {@link EnvoyColors#envoyColors}
|
||||||
|
* @since Envoy v0.2-alpha
|
||||||
|
*/
|
||||||
|
public static void setEnvoyColors(UIColors uIColors) { UIColors.uIColors = uIColors; }
|
||||||
|
}
|
@ -56,6 +56,12 @@ public class UserListRenderer extends JLabel implements ListCellRenderer<User> {
|
|||||||
status,
|
status,
|
||||||
name));
|
name));
|
||||||
break;
|
break;
|
||||||
|
case AFK:
|
||||||
|
break;
|
||||||
|
case DO_NOT_DISTURB:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user