Themes & Themes Configuration
Added themes to choose from and provides customization setting for these.
This commit is contained in:
		| @@ -1,7 +1,11 @@ | ||||
| package envoy.client; | ||||
|  | ||||
| import java.awt.Color; | ||||
| import java.util.HashMap; | ||||
| import java.util.Map; | ||||
| import java.util.prefs.Preferences; | ||||
|  | ||||
| import envoy.client.ui.Theme; | ||||
| import envoy.schema.User; | ||||
|  | ||||
| /** | ||||
| @@ -10,14 +14,17 @@ import envoy.schema.User; | ||||
|  * Created: <strong>11 Nov 2019</strong><br> | ||||
|  *  | ||||
|  * @author Leon Hofmeister | ||||
|  * @author Maximilian Käfer | ||||
|  * @since Envoy v0.2-alpha | ||||
|  */ | ||||
| public class Settings { | ||||
|  | ||||
| 	private String	username; | ||||
| 	private String	email; | ||||
| 	private boolean	enterToSend	= true; | ||||
| 	private boolean	darkMode	= true; | ||||
| 	private String				username; | ||||
| 	private String				email; | ||||
| 	private boolean				enterToSend	= true; | ||||
| 	private Map<String, Theme>	themes		= new HashMap<>(); | ||||
|  | ||||
| 	private String currentTheme; | ||||
| 	// private Image profilePic; | ||||
| 	private static Settings	settings; | ||||
| 	private Preferences		prefs	= Preferences.userNodeForPackage(Settings.class); | ||||
| @@ -47,24 +54,54 @@ public class 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)); | ||||
| 		// currentTheme = "dark"; Activate once if NullPointerException on currentTheme | ||||
| 		// and change theme to dark or white in Settings | ||||
| 		settings.setCurrentTheme(prefs.get("theme", "dark")); | ||||
| 	} | ||||
|  | ||||
| 	public void save() { | ||||
| 		prefs.put("username", settings.getUsername()); | ||||
| 		prefs.put("email", settings.getEmail()); | ||||
| 		prefs.putBoolean("darkMode", settings.isDarkMode()); | ||||
| 		prefs.put("theme", currentTheme); | ||||
| 		System.out.println(currentTheme); | ||||
| 		prefs.putBoolean("enterToSend", settings.isEnterToSend()); | ||||
| 		// TODO: override themes map | ||||
|  | ||||
| 	} | ||||
| 	 | ||||
|  | ||||
| 	public void firstSave(User user) { | ||||
|  | ||||
| 		// TODO: load themes | ||||
|  | ||||
| 		settings.getThemes() | ||||
| 			.put("dark", | ||||
| 					new Theme("dark", Color.black, Color.darkGray, Color.white, Color.blue, Color.white, Color.orange, | ||||
| 							Color.blue, Color.white, Color.white)); | ||||
| 		settings.getThemes() | ||||
| 			.put("light", | ||||
| 					new Theme("light", new Color(235, 235, 235), Color.white, Color.white, Color.darkGray, Color.black, | ||||
| 							Color.orange, Color.darkGray, Color.black, Color.black)); | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| 		prefs.put("username", user.getName()); | ||||
| //		prefs.put("email", user.getEmail()); | ||||
| //		prefs.putBoolean("darkMode", true); | ||||
| //		prefs.putBoolean("enterToSend", true); | ||||
| 		// prefs.put("email", user.getEmail()); | ||||
| 		// prefs.putBoolean("darkMode", true); | ||||
| 		// prefs.putBoolean("enterToSend", true); | ||||
| 	} | ||||
|  | ||||
| 	public void addNewThemeToMap(Theme theme) { | ||||
| 		settings.getThemes().put(theme.getThemeName(), theme); | ||||
| 		currentTheme = theme.getThemeName(); | ||||
| 	} | ||||
|  | ||||
| 	public String getCurrentTheme() { return currentTheme; } | ||||
|  | ||||
| 	public void setCurrentTheme(String themeName) { currentTheme = themeName; } | ||||
|  | ||||
| 	/** | ||||
| 	 * @return the username | ||||
| 	 * @since Envoy v0.2-alpha | ||||
| @@ -105,23 +142,9 @@ public class Settings { | ||||
| 	 */ | ||||
| 	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; } | ||||
| 	public Map<String, Theme> getThemes() { return themes; } | ||||
|  | ||||
| 	/** | ||||
| 	 * 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; } | ||||
| 	public void setThemes(Map<String, Theme> themes) { this.themes = themes; } | ||||
|  | ||||
| 	// /** | ||||
| 	// * @return the profilePic | ||||
| @@ -135,4 +158,5 @@ public class Settings { | ||||
| 	// */ | ||||
| 	// public void setProfilePic(Image profilePic) { this.profilePic = profilePic; } | ||||
|  | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| package envoy.client.ui; | ||||
|  | ||||
| import java.awt.Color; | ||||
| import java.awt.Component; | ||||
| import java.text.SimpleDateFormat; | ||||
|  | ||||
| @@ -7,6 +8,7 @@ import javax.swing.JLabel; | ||||
| import javax.swing.JList; | ||||
| import javax.swing.ListCellRenderer; | ||||
|  | ||||
| import envoy.client.Settings; | ||||
| import envoy.schema.Message; | ||||
|  | ||||
| /** | ||||
| @@ -39,16 +41,38 @@ public class MessageListRenderer extends JLabel implements ListCellRenderer<Mess | ||||
| 		setOpaque(true); | ||||
|  | ||||
| 		final String	text	= value.getContent().get(0).getText(); | ||||
| 		final String 	state 	= value.getMetadata().getState().toString(); | ||||
| 		final String	state	= value.getMetadata().getState().toString(); | ||||
| 		final String	date	= value.getMetadata().getDate() == null ? "" | ||||
| 				: new SimpleDateFormat("dd.MM.yyyy HH:mm ") | ||||
| 					.format(value.getMetadata().getDate().toGregorianCalendar().getTime()); | ||||
|  | ||||
| 		// Getting the MessageColor in the Chat of the current theme | ||||
| 		String textColor = null; | ||||
|  | ||||
| 		textColor = toHex( | ||||
| 				Settings.getInstance().getThemes().get(Settings.getInstance().getCurrentTheme()).getMessageColorChat()); | ||||
|  | ||||
| 		// Getting the DateColor in the Chat of the current theme | ||||
| 		String dateColor = null; | ||||
| 		dateColor = toHex( | ||||
| 				Settings.getInstance().getThemes().get(Settings.getInstance().getCurrentTheme()).getDateColorChat()); | ||||
|  | ||||
| 		setText(String.format( | ||||
| 				"<html><p style=\"color:#d2d235\"><b><small>%s</b></small><br><p style=\"color:white\">%s :%s</html>", | ||||
| 				"<html><p style=\"color:%s\"><b><small>%s</b></small><br><p style=\"color:%s\">%s :%s</html>", | ||||
| 				dateColor, | ||||
| 				date, | ||||
| 				textColor, | ||||
| 				text, | ||||
| 				state)); | ||||
|  | ||||
| 		return this; | ||||
| 	} | ||||
|  | ||||
| 	public String toHex(Color c) { | ||||
| 		int		r	= c.getRed(); | ||||
| 		int		g	= c.getGreen(); | ||||
| 		int		b	= c.getBlue(); | ||||
| 		String	hex	= String.format("#%02x%02x%02x", r, g, b); | ||||
| 		return hex; | ||||
| 	} | ||||
| } | ||||
| @@ -1,15 +1,29 @@ | ||||
| package envoy.client.ui; | ||||
|  | ||||
| import java.awt.BorderLayout; | ||||
| import java.awt.FlowLayout; | ||||
| import java.awt.Color; | ||||
| import java.awt.Component; | ||||
| import java.awt.Dimension; | ||||
| import java.awt.Font; | ||||
| import java.awt.GridBagConstraints; | ||||
| import java.awt.GridBagLayout; | ||||
| import java.awt.Insets; | ||||
| import java.awt.LayoutManager; | ||||
| import java.awt.event.ItemEvent; | ||||
| import java.awt.event.ItemListener; | ||||
| import java.util.Arrays; | ||||
|  | ||||
| import javax.swing.BoxLayout; | ||||
| import javax.swing.DefaultListModel; | ||||
| import javax.swing.JButton; | ||||
| import javax.swing.JColorChooser; | ||||
| import javax.swing.JComboBox; | ||||
| import javax.swing.JDialog; | ||||
| import javax.swing.JList; | ||||
| import javax.swing.JOptionPane; | ||||
| import javax.swing.JPanel; | ||||
| import javax.swing.border.EmptyBorder; | ||||
| import javax.swing.JTextPane; | ||||
| import javax.swing.ListSelectionModel; | ||||
|  | ||||
| import envoy.client.Settings; | ||||
|  | ||||
| @@ -21,15 +35,36 @@ import envoy.client.Settings; | ||||
|  * Created: <strong>31 Oct 2019</strong><br> | ||||
|  *  | ||||
|  * @author Leon Hofmeister | ||||
|  * @author Maximilian Käfer | ||||
|  */ | ||||
| public class SettingsScreen extends JDialog { | ||||
|  | ||||
| 	private static final long		serialVersionUID	= -4476913491263077107L; | ||||
| 	private final JPanel			contentPanel		= new JPanel(); | ||||
| 	private JPanel					buttonPane			= new JPanel(); | ||||
| 	private JButton					okButton			= new JButton("Save"); | ||||
| 	private JButton					cancelButton		= new JButton("Cancel"); | ||||
| 	private static int				space				= 5; | ||||
| 	private static final long	serialVersionUID	= -4476913491263077107L; | ||||
| 	private final JPanel		contentPanel		= new JPanel(); | ||||
|  | ||||
| 	private DefaultListModel<String>	optionsListModel	= new DefaultListModel<>(); | ||||
| 	private final JList<String>			options				= new JList<String>(); | ||||
| 	private JPanel						buttonPane			= new JPanel(); | ||||
|  | ||||
| 	private JPanel				themeContent	= new JPanel(); | ||||
| 	private String[]			themeArray		= { Settings.getInstance().getThemes().get("dark").getThemeName(), | ||||
| 			Settings.getInstance().getThemes().get("light").getThemeName() }; | ||||
| 	private JComboBox<String>	themes			= new JComboBox<String>(themeArray); | ||||
|  | ||||
| 	private GridBagConstraints gbc_themeContent = new GridBagConstraints(); | ||||
|  | ||||
| 	private Theme selectedTheme = Settings.getInstance().getThemes().get(Settings.getInstance().getCurrentTheme()); | ||||
|  | ||||
| 	private JButton createNewThemeButton = new JButton("Create New Theme"); | ||||
|  | ||||
| 	private JPanel		colorsPanel		= new JPanel(); | ||||
| 	private JButton		okButton		= new JButton("Save"); | ||||
| 	private JButton		cancelButton	= new JButton("Cancel"); | ||||
| 	private static int	space			= 5; | ||||
|  | ||||
| 	private boolean colorChanged = false; | ||||
|  | ||||
| 	private Theme					temporaryTheme; | ||||
| 	private static SettingsScreen	settingsScreen; | ||||
|  | ||||
| 	// TODO: Add a JPanel with all the Information necessary: | ||||
| @@ -44,7 +79,7 @@ public class SettingsScreen extends JDialog { | ||||
| 	 */ | ||||
| 	public static void open() { | ||||
|  | ||||
| 		UIColors.getInstance(Settings.getInstance().isDarkMode()); | ||||
| 		// UIColors.getInstance(Settings.getInstance().isDarkMode()); | ||||
| 		settingsScreen = new SettingsScreen(); | ||||
| 		settingsScreen.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); | ||||
| 		settingsScreen.setModal(true); | ||||
| @@ -58,21 +93,254 @@ public class SettingsScreen extends JDialog { | ||||
| 	 */ | ||||
| 	private SettingsScreen() { | ||||
|  | ||||
| 		setBounds(100, 100, 450, 300); | ||||
| 		System.out.println(Settings.getInstance().getCurrentTheme()); | ||||
|  | ||||
| 		setBounds(10, 10, 450, 650); | ||||
| 		getContentPane().setLayout(new BorderLayout()); | ||||
| 		contentPanel.setLayout(new FlowLayout()); | ||||
| 		contentPanel.setBorder(new EmptyBorder(space, space, space, space)); | ||||
| 		getContentPane().add(contentPanel, BorderLayout.CENTER); | ||||
| 		{ | ||||
| 			getContentPane().add(buttonPane, BorderLayout.SOUTH); | ||||
|  | ||||
| 			createNewThemeButton.setEnabled(false); | ||||
|  | ||||
| 			temporaryTheme = new Theme("temporaryTheme", | ||||
| 					Settings.getInstance().getThemes().get(Settings.getInstance().getCurrentTheme())); | ||||
| 			// ContentPane------------------------------------------------------ | ||||
| 			GridBagLayout gbl_contentPanel = new GridBagLayout(); | ||||
|  | ||||
| 			gbl_contentPanel.columnWidths	= new int[] { 1, 1 }; | ||||
| 			gbl_contentPanel.rowHeights		= new int[] { 1 }; | ||||
| 			gbl_contentPanel.columnWeights	= new double[] { 0.05, 1.0 }; | ||||
| 			gbl_contentPanel.rowWeights		= new double[] { 1.0 }; | ||||
|  | ||||
| 			getContentPane().add(contentPanel, BorderLayout.CENTER); | ||||
| 			contentPanel.setLayout(gbl_contentPanel); | ||||
|  | ||||
| 			options.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); | ||||
|  | ||||
| 			options.addListSelectionListener((listSelectionEvent) -> { | ||||
| 				if (!listSelectionEvent.getValueIsAdjusting()) { | ||||
| 					@SuppressWarnings("unchecked") | ||||
| 					final JList<String>	selectedOption	= (JList<String>) listSelectionEvent.getSource(); | ||||
| 					final String		option			= selectedOption.getSelectedValue(); | ||||
| 					System.out.println(option); | ||||
|  | ||||
| 					switch (option) { | ||||
| 						case "Color Themes": | ||||
| 							setContent(themeContent, gbc_themeContent); | ||||
| 							getContentPane().repaint(); | ||||
| 							getContentPane().revalidate(); | ||||
| 							break; | ||||
| 					} | ||||
| 				} | ||||
| 			}); | ||||
|  | ||||
| 			options.setFont(new Font("Arial", Font.PLAIN, 14)); | ||||
|  | ||||
| 			Theme theme = Settings.getInstance().getThemes().get(Settings.getInstance().getCurrentTheme()); | ||||
|  | ||||
| 			options.setSelectionForeground(theme.getUserNameColor()); | ||||
| 			options.setSelectionBackground(theme.getSelectionColor()); | ||||
| 			options.setForeground(theme.getUserNameColor()); | ||||
| 			options.setBackground(theme.getCellColor()); | ||||
|  | ||||
| 			GridBagConstraints gbc_optionsList = new GridBagConstraints(); | ||||
| 			gbc_optionsList.fill	= GridBagConstraints.BOTH; | ||||
| 			gbc_optionsList.gridx	= 0; | ||||
| 			gbc_optionsList.gridy	= 0; | ||||
| 			gbc_optionsList.anchor	= GridBagConstraints.PAGE_START; | ||||
| 			gbc_optionsList.insets	= new Insets(space, space, space, space); | ||||
|  | ||||
| 			optionsListModel.addElement("Color Themes"); | ||||
|  | ||||
| 			options.setModel(optionsListModel); | ||||
|  | ||||
| 			contentPanel.add(options, gbc_optionsList); | ||||
|  | ||||
| 			// ThemeContent --- | ||||
|  | ||||
| 			gbc_themeContent		= new GridBagConstraints(); | ||||
| 			gbc_themeContent.fill	= GridBagConstraints.BOTH; | ||||
| 			gbc_themeContent.gridx	= 1; | ||||
| 			gbc_themeContent.gridy	= 0; | ||||
| 			gbc_themeContent.anchor	= GridBagConstraints.PAGE_START; | ||||
| 			gbc_themeContent.insets	= new Insets(space, space, space, space); | ||||
|  | ||||
| 			GridBagLayout gbl_themeLayout = new GridBagLayout(); | ||||
|  | ||||
| 			// themeContent.setSelectionForeground(theme.getUserNameColor()); | ||||
| 			// themeContent.setSelectionBackground(theme.getSelectionColor()); | ||||
| 			themeContent.setForeground(theme.getUserNameColor()); | ||||
| 			themeContent.setBackground(theme.getCellColor()); | ||||
|  | ||||
| 			gbl_themeLayout.columnWidths	= new int[] { 1, 1 }; | ||||
| 			gbl_themeLayout.rowHeights		= new int[] { 1, 1 }; | ||||
| 			gbl_themeLayout.columnWeights	= new double[] { 1.0, 1.0 }; | ||||
| 			gbl_themeLayout.rowWeights		= new double[] { 0.01, 1.0 }; | ||||
|  | ||||
| 			themeContent.setLayout(gbl_themeLayout); | ||||
|  | ||||
| 			themes.setBackground(theme.getUserNameColor()); | ||||
| 			themes.setForeground(theme.getBackgroundColor()); | ||||
| 			themes.setSelectedItem(Settings.getInstance().getCurrentTheme()); | ||||
| 			// themes.setBorder(null); | ||||
|  | ||||
| 			themes.addItemListener(new ItemListener() { | ||||
|  | ||||
| 				@Override | ||||
| 				public void itemStateChanged(ItemEvent e) { | ||||
| 					String selectedValue = (String) themes.getSelectedItem(); | ||||
| 					System.out.println(selectedValue); | ||||
| 					selectedTheme = Settings.getInstance().getThemes().get(selectedValue); | ||||
| 				} | ||||
|  | ||||
| 			}); | ||||
|  | ||||
| 			GridBagConstraints gbc_themes = new GridBagConstraints(); | ||||
| 			gbc_themes.fill		= GridBagConstraints.HORIZONTAL; | ||||
| 			gbc_themes.gridx	= 0; | ||||
| 			gbc_themes.gridy	= 0; | ||||
| 			gbc_themes.anchor	= GridBagConstraints.NORTHWEST; | ||||
| 			gbc_themes.insets	= new Insets(space, space, space, space); | ||||
|  | ||||
| 			themeContent.add(themes, gbc_themes); | ||||
|  | ||||
| 			colorsPanel.setLayout((LayoutManager) new BoxLayout(colorsPanel, BoxLayout.Y_AXIS)); | ||||
| 			colorsPanel.setAlignmentX(Component.LEFT_ALIGNMENT); | ||||
|  | ||||
| 			buildCustomizeElement(new JPanel(), | ||||
|  | ||||
| 					new JButton(), | ||||
| 					new JTextPane(), | ||||
| 					theme, | ||||
| 					theme.getBackgroundColor(), | ||||
| 					"Background", | ||||
| 					1); | ||||
| 			buildCustomizeElement(new JPanel(), | ||||
|  | ||||
| 					new JButton(), | ||||
| 					new JTextPane(), | ||||
| 					theme, | ||||
| 					theme.getCellColor(), | ||||
| 					"Cells", | ||||
| 					2); | ||||
| 			buildCustomizeElement(new JPanel(), | ||||
|  | ||||
| 					new JButton(), | ||||
| 					new JTextPane(), | ||||
| 					theme, | ||||
| 					theme.getInteractableForegroundColor(), | ||||
| 					"Interactable Foreground", | ||||
| 					3); | ||||
| 			buildCustomizeElement(new JPanel(), | ||||
|  | ||||
| 					new JButton(), | ||||
| 					new JTextPane(), | ||||
| 					theme, | ||||
| 					theme.getInteractableBackgroundColor(), | ||||
| 					"Interactable Background", | ||||
| 					4); | ||||
| 			buildCustomizeElement(new JPanel(), | ||||
|  | ||||
| 					new JButton(), | ||||
| 					new JTextPane(), | ||||
| 					theme, | ||||
| 					theme.getMessageColorChat(), | ||||
| 					"Messages Chat", | ||||
| 					5); | ||||
| 			buildCustomizeElement(new JPanel(), | ||||
|  | ||||
| 					new JButton(), | ||||
| 					new JTextPane(), | ||||
| 					theme, | ||||
| 					theme.getDateColorChat(), | ||||
| 					"Date Chat", | ||||
| 					6); | ||||
| 			buildCustomizeElement(new JPanel(), | ||||
|  | ||||
| 					new JButton(), | ||||
| 					new JTextPane(), | ||||
| 					theme, | ||||
| 					theme.getSelectionColor(), | ||||
| 					"Selection", | ||||
| 					7); | ||||
| 			buildCustomizeElement(new JPanel(), | ||||
|  | ||||
| 					new JButton(), | ||||
| 					new JTextPane(), | ||||
| 					theme, | ||||
| 					theme.getTypingMessageColor(), | ||||
| 					"Typing Message", | ||||
| 					8); | ||||
| 			buildCustomizeElement(new JPanel(), | ||||
|  | ||||
| 					new JButton(), | ||||
| 					new JTextPane(), | ||||
| 					theme, | ||||
| 					theme.getUserNameColor(), | ||||
| 					"User Names", | ||||
| 					9); | ||||
|  | ||||
| 			GridBagConstraints gbc_colorsPanel = new GridBagConstraints(); | ||||
| 			gbc_colorsPanel.fill		= GridBagConstraints.HORIZONTAL; | ||||
| 			gbc_colorsPanel.gridx		= 0; | ||||
| 			gbc_colorsPanel.gridy		= 1; | ||||
| 			gbc_colorsPanel.gridwidth	= 2; | ||||
| 			gbc_colorsPanel.anchor		= GridBagConstraints.NORTHWEST; | ||||
| 			gbc_colorsPanel.insets		= new Insets(space, 0, 0, 0); | ||||
|  | ||||
| 			themeContent.add(colorsPanel, gbc_colorsPanel); | ||||
|  | ||||
| 			createNewThemeButton.setBackground(theme.getInteractableBackgroundColor()); | ||||
| 			createNewThemeButton.setForeground(theme.getInteractableForegroundColor()); | ||||
| 			colorsPanel.setBackground(theme.getCellColor()); | ||||
|  | ||||
| 			createNewThemeButton.addActionListener((evt) -> { | ||||
| 				try { | ||||
| 					String s = JOptionPane.showInputDialog("Enter a name for the new theme"); | ||||
| 					System.out.println(s); | ||||
| 					Settings.getInstance() | ||||
| 						.addNewThemeToMap(new Theme(s, temporaryTheme.getBackgroundColor(), | ||||
| 								temporaryTheme.getCellColor(), temporaryTheme.getInteractableForegroundColor(), | ||||
| 								temporaryTheme.getInteractableBackgroundColor(), temporaryTheme.getMessageColorChat(), | ||||
| 								temporaryTheme.getDateColorChat(), temporaryTheme.getSelectionColor(), | ||||
| 								temporaryTheme.getTypingMessageColor(), temporaryTheme.getUserNameColor())); | ||||
| 					themeArray							= Arrays.copyOf(themeArray, themeArray.length + 1); | ||||
| 					themeArray[themeArray.length - 1]	= Settings.getInstance().getThemes().get(s).getThemeName(); | ||||
|  | ||||
| 					temporaryTheme = new Theme("temporaryTheme", | ||||
| 							Settings.getInstance().getThemes().get(Settings.getInstance().getCurrentTheme())); | ||||
|  | ||||
| 					createNewThemeButton.setEnabled(false); | ||||
| 					themes.addItem(themeArray[themeArray.length - 1]); | ||||
|  | ||||
| 					contentPanel.revalidate(); | ||||
| 					contentPanel.repaint(); | ||||
|  | ||||
| 					// TODO: Create new Theme | ||||
|  | ||||
| 				} catch (Exception e) { | ||||
| 					System.err.println("New theme couldn't be created! " + e); | ||||
| 					e.printStackTrace(); | ||||
| 				} | ||||
| 			}); | ||||
|  | ||||
| 			GridBagConstraints gbc_createNewTheme = new GridBagConstraints(); | ||||
| 			gbc_createNewTheme.gridx	= 0; | ||||
| 			gbc_createNewTheme.gridy	= 10; | ||||
|  | ||||
| 			colorsPanel.add(createNewThemeButton, gbc_createNewTheme); | ||||
|  | ||||
| 			// ButtonPane------------------------------------------------------- | ||||
| 			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 }; | ||||
|  | ||||
| 			getContentPane().add(buttonPane, BorderLayout.SOUTH); | ||||
| 			buttonPane.setLayout(gbl_buttonPane); | ||||
| 			{ | ||||
| 				cancelButton.setActionCommand("Cancel"); | ||||
| 				cancelButton.setBorderPainted(false); | ||||
| 				GridBagConstraints gbc_cancelButton = new GridBagConstraints(); | ||||
| 				gbc_cancelButton.anchor	= GridBagConstraints.NORTHWEST; | ||||
| 				gbc_cancelButton.insets	= new Insets(space, space, space, space); | ||||
| @@ -84,6 +352,7 @@ public class SettingsScreen extends JDialog { | ||||
| 			} | ||||
| 			{ | ||||
| 				okButton.setActionCommand("OK"); | ||||
| 				okButton.setBorderPainted(false); | ||||
| 				GridBagConstraints gbc_okButton = new GridBagConstraints(); | ||||
| 				gbc_okButton.anchor	= GridBagConstraints.NORTHEAST; | ||||
| 				gbc_okButton.fill	= GridBagConstraints.EAST; | ||||
| @@ -95,16 +364,19 @@ public class SettingsScreen extends JDialog { | ||||
| 				okButton.addActionListener((evt) -> { | ||||
| 					try { | ||||
| 						Settings.getInstance().setUsername(Settings.getInstance().getUsername());// still temporary | ||||
| 																									// value | ||||
|  | ||||
| 						Settings.getInstance().setEmail(Settings.getInstance().getEmail());// still temporary value | ||||
| 						Settings.getInstance().setDarkMode(!Settings.getInstance().isDarkMode());// TODO temporary | ||||
| 																									// values while no | ||||
| 																									// UI is implemented | ||||
|  | ||||
| 						Settings.getInstance().setEnterToSend(Settings.getInstance().isEnterToSend());// still temporary | ||||
| 																										// value | ||||
|  | ||||
| 						Settings.getInstance().setCurrentTheme(selectedTheme.getThemeName()); | ||||
| 						System.out.println(selectedTheme.getThemeName()); | ||||
|  | ||||
| 						changeSettingsScreenColors(Settings.getInstance().getCurrentTheme()); | ||||
| 						updateColorVariables(Settings.getInstance().getCurrentTheme()); | ||||
|  | ||||
| 						Settings.getInstance().save(); | ||||
| 						UIColors.getUIColors().setDisplayMode(Settings.getInstance().isDarkMode()); | ||||
| 						changeSettingsScreenColors(); | ||||
|  | ||||
| 						revalidate(); | ||||
| 						repaint(); | ||||
| 					} catch (Exception e) { | ||||
| @@ -114,23 +386,191 @@ public class SettingsScreen extends JDialog { | ||||
| 				}); | ||||
| 			} | ||||
| 		} | ||||
| 		changeSettingsScreenColors(); | ||||
| 		changeSettingsScreenColors(Settings.getInstance().getCurrentTheme()); | ||||
| 	} | ||||
|  | ||||
| 	private void changeSettingsScreenColors() { | ||||
| 	private void changeSettingsScreenColors(String key) { | ||||
| 		Theme theme = Settings.getInstance().getThemes().get(key); | ||||
| 		// whole JDialog | ||||
| 		setBackground(UIColors.getUIColors().getBackgroundColor()); | ||||
| 		setBackground(theme.getBackgroundColor()); | ||||
| 		// contentPanel | ||||
| 		contentPanel.setBackground(UIColors.getUIColors().getBackgroundColor()); | ||||
| 		contentPanel.setBackground(theme.getBackgroundColor()); | ||||
| 		// buttonPane | ||||
| 		buttonPane.setBackground(UIColors.getUIColors().getBackgroundColor()); | ||||
| 		buttonPane.setBackground(theme.getCellColor()); | ||||
| 		// cancelButton | ||||
| 		cancelButton.setBackground(UIColors.getUIColors().getSpecialUseColor()); | ||||
| 		cancelButton.setForeground(UIColors.getUIColors().getTextColor()); | ||||
| 		cancelButton.setBackground(theme.getInteractableBackgroundColor()); | ||||
| 		cancelButton.setForeground(theme.getInteractableForegroundColor()); | ||||
| 		// okButton | ||||
| 		okButton.setBackground(UIColors.getUIColors().getSpecialUseColor()); | ||||
| 		okButton.setForeground(UIColors.getUIColors().getTextColor()); | ||||
| 		okButton.setBackground(theme.getInteractableBackgroundColor()); | ||||
| 		okButton.setForeground(theme.getInteractableForegroundColor()); | ||||
| 		// options | ||||
| 		options.setSelectionForeground(theme.getUserNameColor()); | ||||
| 		options.setSelectionBackground(theme.getSelectionColor()); | ||||
| 		options.setForeground(theme.getUserNameColor()); | ||||
| 		options.setBackground(theme.getCellColor()); | ||||
| 		// themeContent | ||||
| 		themeContent.setForeground(theme.getUserNameColor()); | ||||
| 		themeContent.setBackground(theme.getCellColor()); | ||||
| 		// themes | ||||
| 		themes.setBackground(theme.getUserNameColor()); | ||||
| 		themes.setForeground(theme.getBackgroundColor()); | ||||
|  | ||||
| 		createNewThemeButton.setBackground(theme.getInteractableBackgroundColor()); | ||||
| 		createNewThemeButton.setForeground(theme.getInteractableForegroundColor()); | ||||
| 		colorsPanel.setBackground(theme.getCellColor()); | ||||
|  | ||||
| 	} | ||||
|  | ||||
| 	public void updateColorVariables(String key) { | ||||
| 		Theme theme = Settings.getInstance().getThemes().get(key); | ||||
|  | ||||
| 		temporaryTheme = new Theme("temporaryTheme", | ||||
| 				Settings.getInstance().getThemes().get(Settings.getInstance().getCurrentTheme()).getBackgroundColor(), | ||||
| 				Settings.getInstance().getThemes().get(Settings.getInstance().getCurrentTheme()).getCellColor(), | ||||
| 				Settings.getInstance() | ||||
| 					.getThemes() | ||||
| 					.get(Settings.getInstance().getCurrentTheme()) | ||||
| 					.getInteractableForegroundColor(), | ||||
| 				Settings.getInstance() | ||||
| 					.getThemes() | ||||
| 					.get(Settings.getInstance().getCurrentTheme()) | ||||
| 					.getInteractableBackgroundColor(), | ||||
| 				Settings.getInstance().getThemes().get(Settings.getInstance().getCurrentTheme()).getMessageColorChat(), | ||||
| 				Settings.getInstance().getThemes().get(Settings.getInstance().getCurrentTheme()).getDateColorChat(), | ||||
| 				Settings.getInstance().getThemes().get(Settings.getInstance().getCurrentTheme()).getSelectionColor(), | ||||
| 				Settings.getInstance() | ||||
| 					.getThemes() | ||||
| 					.get(Settings.getInstance().getCurrentTheme()) | ||||
| 					.getTypingMessageColor(), | ||||
| 				Settings.getInstance().getThemes().get(Settings.getInstance().getCurrentTheme()).getUserNameColor()); | ||||
|  | ||||
| 		colorsPanel.removeAll(); | ||||
|  | ||||
| 		buildCustomizeElement(new JPanel(), | ||||
|  | ||||
| 				new JButton(), | ||||
| 				new JTextPane(), | ||||
| 				theme, | ||||
| 				theme.getBackgroundColor(), | ||||
| 				"Background", | ||||
| 				1); | ||||
| 		buildCustomizeElement(new JPanel(), | ||||
|  | ||||
| 				new JButton(), | ||||
| 				new JTextPane(), | ||||
| 				theme, | ||||
| 				theme.getCellColor(), | ||||
| 				"Cells", | ||||
| 				2); | ||||
| 		buildCustomizeElement(new JPanel(), | ||||
|  | ||||
| 				new JButton(), | ||||
| 				new JTextPane(), | ||||
| 				theme, | ||||
| 				theme.getInteractableForegroundColor(), | ||||
| 				"Interactable Foreground", | ||||
| 				3); | ||||
| 		buildCustomizeElement(new JPanel(), | ||||
|  | ||||
| 				new JButton(), | ||||
| 				new JTextPane(), | ||||
| 				theme, | ||||
| 				theme.getInteractableBackgroundColor(), | ||||
| 				"Interactable Background", | ||||
| 				4); | ||||
| 		buildCustomizeElement(new JPanel(), | ||||
|  | ||||
| 				new JButton(), | ||||
| 				new JTextPane(), | ||||
| 				theme, | ||||
| 				theme.getMessageColorChat(), | ||||
| 				"Messages Chat", | ||||
| 				5); | ||||
| 		buildCustomizeElement(new JPanel(), | ||||
|  | ||||
| 				new JButton(), | ||||
| 				new JTextPane(), | ||||
| 				theme, | ||||
| 				theme.getDateColorChat(), | ||||
| 				"Date Chat", | ||||
| 				6); | ||||
| 		buildCustomizeElement(new JPanel(), | ||||
|  | ||||
| 				new JButton(), | ||||
| 				new JTextPane(), | ||||
| 				theme, | ||||
| 				theme.getSelectionColor(), | ||||
| 				"Selection", | ||||
| 				7); | ||||
| 		buildCustomizeElement(new JPanel(), | ||||
|  | ||||
| 				new JButton(), | ||||
| 				new JTextPane(), | ||||
| 				theme, | ||||
| 				theme.getTypingMessageColor(), | ||||
| 				"Typing Message", | ||||
| 				8); | ||||
| 		buildCustomizeElement(new JPanel(), | ||||
|  | ||||
| 				new JButton(), | ||||
| 				new JTextPane(), | ||||
| 				theme, | ||||
| 				theme.getUserNameColor(), | ||||
| 				"User Names", | ||||
| 				9); | ||||
|  | ||||
| 		GridBagConstraints gbc_createNewTheme = new GridBagConstraints(); | ||||
| 		gbc_createNewTheme.gridx	= 0; | ||||
| 		gbc_createNewTheme.gridy	= 10; | ||||
|  | ||||
| 		colorsPanel.add(createNewThemeButton, gbc_createNewTheme); | ||||
| 	} | ||||
|  | ||||
| 	public void setContent(JPanel content, GridBagConstraints layout) { contentPanel.add(content, layout); } | ||||
|  | ||||
| 	public void buildCustomizeElement(JPanel panel, JButton button, JTextPane textPane, Theme theme, Color color, | ||||
| 			String name, int yIndex) { | ||||
| 		textPane.setFont(new Font("Arial", Font.PLAIN, 14)); | ||||
| 		textPane.setBackground(theme.getBackgroundColor()); | ||||
| 		textPane.setForeground(theme.getUserNameColor()); | ||||
| 		textPane.setText(name); | ||||
| 		textPane.setEditable(false); | ||||
|  | ||||
| 		button.setBackground(color); | ||||
| 		button.setPreferredSize(new Dimension(25, 25)); | ||||
|  | ||||
| 		button.addActionListener((evt) -> { | ||||
| 			try { | ||||
| 				Color newColor = JColorChooser.showDialog(null, "Choose a color", color); | ||||
| 				if (newColor.getRGB() != color.getRGB()) { | ||||
| 					System.out.println("New Color"); | ||||
| 					System.out.println(color.getRGB()); | ||||
| 					// TODO: When Theme changed in same settings screen, color variable doesnt | ||||
| 					// update. | ||||
| 					Color[] colorsArray = temporaryTheme.getAllColors(); | ||||
| 					for (int i = 0; i < colorsArray.length; i++) { | ||||
| 						if (color.getRGB() == colorsArray[i].getRGB()) { | ||||
| 							temporaryTheme.setColor(i, newColor); | ||||
| 							colorChanged = true; | ||||
| 							createNewThemeButton.setEnabled(true); | ||||
| 							break; | ||||
| 						} | ||||
|  | ||||
| 					} | ||||
| 					button.setBackground(newColor); | ||||
| 				} | ||||
|  | ||||
| 			} catch (Exception e) { | ||||
| 				System.err.println("An error occured while opening Color Chooser: " + e); | ||||
| 				e.printStackTrace(); | ||||
| 			} | ||||
| 		}); | ||||
|  | ||||
| 		panel.add(textPane); | ||||
| 		panel.add(button); | ||||
| 		panel.setBackground(theme.getCellColor()); | ||||
| 		panel.setAlignmentX(Component.LEFT_ALIGNMENT); | ||||
|  | ||||
| 		colorsPanel.add(panel); | ||||
| 	} | ||||
| } | ||||
|   | ||||
							
								
								
									
										121
									
								
								src/main/java/envoy/client/ui/Theme.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								src/main/java/envoy/client/ui/Theme.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,121 @@ | ||||
| package envoy.client.ui; | ||||
|  | ||||
| import java.awt.Color; | ||||
| import java.io.Serializable; | ||||
|  | ||||
| /** | ||||
|  *  | ||||
|  * Project: <strong>envoy-client</strong><br> | ||||
|  * File: <strong>Theme.java</strong><br> | ||||
|  * Created: <strong>23 Nov 2019</strong><br> | ||||
|  *  | ||||
|  * @author Maximilian Käfer | ||||
|  * @since Envoy v0.2-alpha | ||||
|  */ | ||||
| public class Theme implements Serializable { | ||||
|  | ||||
| 	private static final long serialVersionUID = 141727847527060352L; | ||||
|  | ||||
| 	private String	themeName; | ||||
| 	private Color	backgroundColor; | ||||
| 	private Color	cellColor; | ||||
| 	private Color	interactableBackgroundColor; | ||||
| 	private Color	userNameColor; | ||||
| 	private Color	interactableForegroundColor; | ||||
| 	private Color	messageColorChat; | ||||
| 	private Color	dateColorChat; | ||||
| 	private Color	selectionColor; | ||||
| 	private Color	typingMessageColor; | ||||
|  | ||||
| 	public Theme(String themeName, Color backgroundColor, Color cellColor, Color interactableForegroundColor, | ||||
| 			Color interactableBackgroundColor, Color messageColorChat, Color dateColorChat, Color selectionColor, | ||||
| 			Color typingMessageColor, Color userNameColor) { | ||||
|  | ||||
| 		this.themeName = themeName; | ||||
|  | ||||
| 		this.backgroundColor				= backgroundColor; | ||||
| 		this.cellColor						= cellColor; | ||||
| 		this.interactableForegroundColor	= interactableForegroundColor; | ||||
| 		this.interactableBackgroundColor	= interactableBackgroundColor; | ||||
| 		this.messageColorChat				= messageColorChat; | ||||
| 		this.dateColorChat					= dateColorChat; | ||||
| 		this.selectionColor					= selectionColor; | ||||
| 		this.typingMessageColor				= typingMessageColor; | ||||
| 		this.userNameColor					= userNameColor; | ||||
| 	} | ||||
| 	 | ||||
| 	public Theme(String name, Theme other) { | ||||
| 		this(name, other.backgroundColor, other.cellColor, other.interactableBackgroundColor, | ||||
| 				other.interactableForegroundColor, other.messageColorChat, other.dateColorChat, other.selectionColor, | ||||
| 				other.typingMessageColor, other.userNameColor); | ||||
| 	} | ||||
|  | ||||
| 	public String getThemeName() { return themeName; } | ||||
|  | ||||
| 	public Color getInteractableForegroundColor() { return interactableForegroundColor; } | ||||
|  | ||||
| 	public Color getMessageColorChat() { return messageColorChat; } | ||||
|  | ||||
| 	public Color getDateColorChat() { return dateColorChat; } | ||||
|  | ||||
| 	public Color getSelectionColor() { return selectionColor; } | ||||
|  | ||||
| 	public Color getTypingMessageColor() { return typingMessageColor; } | ||||
|  | ||||
| 	public Color getBackgroundColor() { return backgroundColor; } | ||||
|  | ||||
| 	public Color getCellColor() { return cellColor; } | ||||
|  | ||||
| 	public Color getInteractableBackgroundColor() { return interactableBackgroundColor; } | ||||
|  | ||||
| 	public Color getUserNameColor() { return userNameColor; } | ||||
|  | ||||
| 	public Color[] getAllColors() { | ||||
| 		Color[] c = new Color[9]; | ||||
| 		c[0]	= backgroundColor; | ||||
| 		c[1]	= cellColor; | ||||
| 		c[2]	= interactableForegroundColor; | ||||
| 		c[3]	= interactableBackgroundColor; | ||||
| 		c[4]	= messageColorChat; | ||||
| 		c[5]	= dateColorChat; | ||||
| 		c[6]	= selectionColor; | ||||
| 		c[7]	= typingMessageColor; | ||||
| 		c[8]	= userNameColor; | ||||
|  | ||||
| 		return c; | ||||
| 	} | ||||
|  | ||||
| 	public void setColor(int index, Color newColor) { | ||||
| 		switch (index) { | ||||
| 			case 0: | ||||
| 				this.backgroundColor = newColor; | ||||
| 				break; | ||||
| 			case 1: | ||||
| 				this.cellColor = newColor; | ||||
| 				break; | ||||
| 			case 2: | ||||
| 				this.interactableForegroundColor = newColor; | ||||
| 				break; | ||||
| 			case 3: | ||||
| 				this.interactableBackgroundColor = newColor; | ||||
| 				break; | ||||
| 			case 4: | ||||
| 				this.messageColorChat = newColor; | ||||
| 				break; | ||||
| 			case 5: | ||||
| 				this.dateColorChat = newColor; | ||||
| 				break; | ||||
| 			case 6: | ||||
| 				this.selectionColor = newColor; | ||||
| 				break; | ||||
| 			case 7: | ||||
| 				this.typingMessageColor = newColor; | ||||
| 				break; | ||||
| 			case 8: | ||||
| 				this.userNameColor = newColor; | ||||
| 				break; | ||||
|  | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| } | ||||
| @@ -1,123 +0,0 @@ | ||||
| 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() {} | ||||
|  | ||||
| 	private Color backgroundColor; | ||||
| 	private Color userInteractionColor; | ||||
| 	private Color specialUseColor; | ||||
| 	private Color textColor; | ||||
| 	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 general background color where no other element overlaps | ||||
| 	 * @since Envoy v0.2-alpha | ||||
| 	 */ | ||||
| 	public Color getBackgroundColor() { return backgroundColor; } | ||||
|  | ||||
| 	/** | ||||
| 	 * @param backgroundColor the general background where no other element overlaps | ||||
| 	 * @since Envoy v0.2-alpha | ||||
| 	 */ | ||||
| 	public void setBackgroundColor(Color backgroundColor) { this.backgroundColor = backgroundColor; } | ||||
|  | ||||
| 	/** | ||||
| 	 * @return the userInteractionColor:<br> | ||||
| 	 *         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 | ||||
| 	 */ | ||||
| 	public Color getUserInteractionColor() { return userInteractionColor; } | ||||
|  | ||||
| 	/** | ||||
| 	 * @param userInteractionColor This color is used as background for all areas <br> | ||||
| 	 *                             where a user can interact with Envoy  | ||||
| 	 *                             (i.e. a JTextArea or JList) | ||||
| 	 * @since Envoy v0.2-alpha | ||||
| 	 */ | ||||
| 	public void setUserInteractionColor(Color userInteractionColor) { | ||||
| 		this.userInteractionColor = userInteractionColor; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * @return specialUseColor: This color is used for any areas that need special attention.<br> | ||||
| 	 * (i.e. highlighting a selected list column or a button background) | ||||
| 	 * @since Envoy v0.2-alpha | ||||
| 	 */ | ||||
| 	public Color getSpecialUseColor() { return specialUseColor; } | ||||
|  | ||||
| 	/** | ||||
| 	 * @param specialUseColor This color is used for any areas that need special attention.<br> | ||||
| 	 * (i.e. highlighting a selected list column or a button background) | ||||
| 	 * @since Envoy v0.2-alpha | ||||
| 	 */ | ||||
| 	public void setSpecialUseColor(Color specialUseColor) { this.specialUseColor = specialUseColor; } | ||||
|  | ||||
| 	/** | ||||
| 	 * @return textColor: The color in which text will be displayed | ||||
| 	 * @since Envoy v0.2-alpha | ||||
| 	 */ | ||||
| 	public Color getTextColor() { return textColor; } | ||||
|  | ||||
| 	/** | ||||
| 	 * @param textColor The color in which text will be displayed | ||||
| 	 * @since Envoy v0.2-alpha | ||||
| 	 */ | ||||
| 	public void setTextColor(Color textColor) { this.textColor = textColor; } | ||||
|  | ||||
| 	/** | ||||
| 	 * @return the uiColors object | ||||
| 	 * @since Envoy v0.2-alpha | ||||
| 	 */ | ||||
| 	public static UIColors getUIColors() { return uIColors; } | ||||
| } | ||||
| @@ -1,11 +1,13 @@ | ||||
| package envoy.client.ui; | ||||
|  | ||||
| import java.awt.Color; | ||||
| import java.awt.Component; | ||||
|  | ||||
| import javax.swing.JLabel; | ||||
| import javax.swing.JList; | ||||
| import javax.swing.ListCellRenderer; | ||||
|  | ||||
| import envoy.client.Settings; | ||||
| import envoy.schema.User; | ||||
| import envoy.schema.User.UserStatus; | ||||
|  | ||||
| @@ -24,6 +26,7 @@ public class UserListRenderer extends JLabel implements ListCellRenderer<User> { | ||||
|  | ||||
| 	private static final long serialVersionUID = 5164417379767181198L; | ||||
|  | ||||
| 	@SuppressWarnings("incomplete-switch") | ||||
| 	@Override | ||||
| 	public Component getListCellRendererComponent(JList<? extends User> list, User value, int index, boolean isSelected, | ||||
| 			boolean cellHasFocus) { | ||||
| @@ -41,31 +44,41 @@ public class UserListRenderer extends JLabel implements ListCellRenderer<User> { | ||||
|  | ||||
| 		final String		name	= value.getName(); | ||||
| 		final UserStatus	status	= value.getStatus(); | ||||
|  | ||||
| 		// Getting the UserNameColor of the current theme | ||||
| 		String				textColor	= null; | ||||
|  | ||||
| 		textColor = toHex( | ||||
| 				Settings.getInstance().getThemes().get(Settings.getInstance().getCurrentTheme()).getUserNameColor()); | ||||
| 		 | ||||
| 		switch (status) { | ||||
| 			case ONLINE: | ||||
| 				setText(String.format( | ||||
| 						"<html><p style=\"color:#03fc20\"><b><small>%s</b></small><br><p style=\"color:white\">%s</html>", | ||||
| 						"<html><p style=\"color:#03fc20\"><b><small>%s</b></small><br><p style=\"color:%s\">%s</html>", | ||||
| 						status, | ||||
| 						textColor, | ||||
| 						name)); | ||||
| 				break; | ||||
|  | ||||
| 			case OFFLINE: | ||||
| 				setText(String.format( | ||||
| 						"<html><p style=\"color:#fc0303\"><b><small>%s</b></small><br><p style=\"color:white\">%s</html>", | ||||
| 						"<html><p style=\"color:#fc0303\"><b><small>%s</b></small><br><p style=\"color:%s\">%s</html>", | ||||
| 						status, | ||||
| 						textColor, | ||||
| 						name)); | ||||
| 				break; | ||||
| 			case AFK: | ||||
| 				break; | ||||
| 			case DO_NOT_DISTURB: | ||||
| 				break; | ||||
| 			default: | ||||
| 				break; | ||||
| 		} | ||||
|  | ||||
| 		 | ||||
|  | ||||
| 		return this; | ||||
| 	} | ||||
|  | ||||
| 	public String toHex(Color c) { | ||||
| 		int		r	= c.getRed(); | ||||
| 		int		g	= c.getGreen(); | ||||
| 		int		b	= c.getBlue(); | ||||
| 		String	hex	= String.format("#%02x%02x%02x", r, g, b); | ||||
| 		return hex; | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 DieGurke
					DieGurke