Added ThemeChangeEvent, improved EventHandler declaration
This commit is contained in:
		@@ -1,8 +1,8 @@
 | 
				
			|||||||
package envoy.client.event;
 | 
					package envoy.client.event;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Project: <strong>envoy-clientChess</strong><br>
 | 
					 * Project: <strong>envoy-client</strong><br>
 | 
				
			||||||
 * File: <strong>Event.javaEvent.java</strong><br>
 | 
					 * File: <strong>Event.java</strong><br>
 | 
				
			||||||
 * Created: <strong>04.12.2019</strong><br>
 | 
					 * Created: <strong>04.12.2019</strong><br>
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @author Kai S. K. Engelbart
 | 
					 * @author Kai S. K. Engelbart
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,9 @@
 | 
				
			|||||||
package envoy.client.event;
 | 
					package envoy.client.event;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
import java.util.Arrays;
 | 
					import java.util.HashMap;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * This class handles events by allowing {@link EventHandler} object to register
 | 
					 * This class handles events by allowing {@link EventHandler} object to register
 | 
				
			||||||
@@ -10,7 +11,8 @@ import java.util.List;
 | 
				
			|||||||
 * bus.<br>
 | 
					 * bus.<br>
 | 
				
			||||||
 * <br>
 | 
					 * <br>
 | 
				
			||||||
 * The event bus is a singleton and can be used across the entire application to
 | 
					 * The event bus is a singleton and can be used across the entire application to
 | 
				
			||||||
 * guarantee the propagation of events.
 | 
					 * guarantee the propagation of events.<br>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 * Project: <strong>envoy-client</strong><br>
 | 
					 * Project: <strong>envoy-client</strong><br>
 | 
				
			||||||
 * File: <strong>EventBus.java</strong><br>
 | 
					 * File: <strong>EventBus.java</strong><br>
 | 
				
			||||||
 * Created: <strong>04.12.2019</strong><br>
 | 
					 * Created: <strong>04.12.2019</strong><br>
 | 
				
			||||||
@@ -22,9 +24,10 @@ public class EventBus {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Contains all {@link EventHandler} instances registered at this
 | 
						 * Contains all {@link EventHandler} instances registered at this
 | 
				
			||||||
	 * {@link EventBus}.
 | 
						 * {@link EventBus} as values mapped to by their supported {@link Event}
 | 
				
			||||||
 | 
						 * classes.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	private List<EventHandler> handlers = new ArrayList<>();
 | 
						private Map<Class<? extends Event<?>>, List<EventHandler>> handlers = new HashMap<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * The singleton instance of this {@link EventBus} that is used across the
 | 
						 * The singleton instance of this {@link EventBus} that is used across the
 | 
				
			||||||
@@ -46,13 +49,17 @@ public class EventBus {
 | 
				
			|||||||
	public static EventBus getInstance() { return eventBus; }
 | 
						public static EventBus getInstance() { return eventBus; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Registers a list of {@link EventHandler} objects to be notified when a
 | 
						 * Registers an {@link EventHandler} to be notified when a
 | 
				
			||||||
	 * {@link Event} is dispatched that they are subscribed to.
 | 
						 * {@link Event} of a certain type is dispatched.
 | 
				
			||||||
	 *
 | 
						 *
 | 
				
			||||||
	 * @param handlers the {@link EventHandler} objects to register
 | 
						 * @param eventClass the class which the {@link EventHandler} is subscribed to
 | 
				
			||||||
 | 
						 * @param handler    the {@link EventHandler} to register
 | 
				
			||||||
	 * @since Envoy v0.2-alpha
 | 
						 * @since Envoy v0.2-alpha
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public void register(EventHandler... handlers) { this.handlers.addAll(Arrays.asList(handlers)); }
 | 
						public void register(Class<? extends Event<?>> eventClass, EventHandler handler) {
 | 
				
			||||||
 | 
							if (!handlers.containsKey(eventClass)) handlers.put(eventClass, new ArrayList<>());
 | 
				
			||||||
 | 
							handlers.get(eventClass).add(handler);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Dispatches a {@link Event} to every {@link EventHandler} subscribed to it.
 | 
						 * Dispatches a {@link Event} to every {@link EventHandler} subscribed to it.
 | 
				
			||||||
@@ -60,12 +67,15 @@ public class EventBus {
 | 
				
			|||||||
	 * @param event the {@link Event} to dispatch
 | 
						 * @param event the {@link Event} to dispatch
 | 
				
			||||||
	 * @since Envoy v0.2-alpha
 | 
						 * @since Envoy v0.2-alpha
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public void dispatch(Event<?> event) { handlers.stream().filter(h -> h.supports().contains(event.getClass())).forEach(h -> h.handle(event)); }
 | 
						public void dispatch(Event<?> event) {
 | 
				
			||||||
 | 
							handlers.keySet().stream().filter(event.getClass()::isAssignableFrom).map(handlers::get).flatMap(List::stream).forEach(h -> h.handle(event));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * @return a list of all {@link EventHandler} instances currently registered at
 | 
						 * @return a map of all {@link EventHandler} instances currently registered at
 | 
				
			||||||
	 *         this {@link EventBus}
 | 
						 *         this {@link EventBus} with the {@link Event} classes they are
 | 
				
			||||||
 | 
						 *         subscribed to as keys
 | 
				
			||||||
	 * @since Envoy v0.2-alpha
 | 
						 * @since Envoy v0.2-alpha
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public List<EventHandler> getHandlers() { return handlers; }
 | 
						public Map<Class<? extends Event<?>>, List<EventHandler>> getHandlers() { return handlers; }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,5 @@
 | 
				
			|||||||
package envoy.client.event;
 | 
					package envoy.client.event;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.Set;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Project: <strong>envoy-clientChess</strong><br>
 | 
					 * Project: <strong>envoy-clientChess</strong><br>
 | 
				
			||||||
 * File: <strong>EventHandler.javaEvent.java</strong><br>
 | 
					 * File: <strong>EventHandler.javaEvent.java</strong><br>
 | 
				
			||||||
@@ -17,9 +15,4 @@ public interface EventHandler {
 | 
				
			|||||||
	 * @param event The event dispatched by the event bus, only of supported type
 | 
						 * @param event The event dispatched by the event bus, only of supported type
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	void handle(Event<?> event);
 | 
						void handle(Event<?> event);
 | 
				
			||||||
 | 
					 | 
				
			||||||
	/**
 | 
					 | 
				
			||||||
	 * @return A set of classes this class is supposed to handle in events
 | 
					 | 
				
			||||||
	 */
 | 
					 | 
				
			||||||
	Set<Class<? extends Event<?>>> supports();
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										20
									
								
								src/main/java/envoy/client/event/ThemeChangeEvent.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								src/main/java/envoy/client/event/ThemeChangeEvent.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					package envoy.client.event;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import envoy.client.ui.Theme;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Project: <strong>envoy-client</strong><br>
 | 
				
			||||||
 | 
					 * File: <strong>ThemeChangeEvent.java</strong><br>
 | 
				
			||||||
 | 
					 * Created: <strong>15 Dec 2019</strong><br>
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author Kai S. K. Engelbart
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class ThemeChangeEvent implements Event<Theme> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private final Theme theme;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						public ThemeChangeEvent(Theme theme) { this.theme = theme; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public Theme get() { return theme; }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -30,6 +30,8 @@ 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.client.Settings;
 | 
				
			||||||
 | 
					import envoy.client.event.EventBus;
 | 
				
			||||||
 | 
					import envoy.client.event.ThemeChangeEvent;
 | 
				
			||||||
import envoy.schema.Message;
 | 
					import envoy.schema.Message;
 | 
				
			||||||
import envoy.schema.User;
 | 
					import envoy.schema.User;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -166,7 +168,6 @@ public class ChatWindow extends JFrame {
 | 
				
			|||||||
		settingsButton.addActionListener((evt) -> {
 | 
							settingsButton.addActionListener((evt) -> {
 | 
				
			||||||
			try {
 | 
								try {
 | 
				
			||||||
				SettingsScreen.open();
 | 
									SettingsScreen.open();
 | 
				
			||||||
				changeChatWindowColors(Settings.getInstance().getCurrentTheme());
 | 
					 | 
				
			||||||
			} catch (Exception e) {
 | 
								} catch (Exception e) {
 | 
				
			||||||
				SettingsScreen.open();
 | 
									SettingsScreen.open();
 | 
				
			||||||
				logger.log(Level.WARNING, "An error occured while opening the settings screen", e);
 | 
									logger.log(Level.WARNING, "An error occured while opening the settings screen", e);
 | 
				
			||||||
@@ -220,11 +221,13 @@ public class ChatWindow extends JFrame {
 | 
				
			|||||||
		gbc_userList.anchor	= GridBagConstraints.PAGE_START;
 | 
							gbc_userList.anchor	= GridBagConstraints.PAGE_START;
 | 
				
			||||||
		gbc_userList.insets	= new Insets(space, space, space, space);
 | 
							gbc_userList.insets	= new Insets(space, space, space, space);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		changeChatWindowColors(Settings.getInstance().getCurrentTheme());
 | 
							changeChatWindowColors(Settings.getInstance().getThemes().get(Settings.getInstance().getCurrentTheme()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		contentPane.add(userList, gbc_userList);
 | 
							contentPane.add(userList, gbc_userList);
 | 
				
			||||||
		contentPane.revalidate();
 | 
							contentPane.revalidate();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							EventBus.getInstance().register(ThemeChangeEvent.class, (evt) -> changeChatWindowColors((Theme) evt.get()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		loadUsersAndChats();
 | 
							loadUsersAndChats();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (client.isOnline()) startSyncThread(Config.getInstance().getSyncTimeout());
 | 
							if (client.isOnline()) startSyncThread(Config.getInstance().getSyncTimeout());
 | 
				
			||||||
@@ -237,9 +240,7 @@ public class ChatWindow extends JFrame {
 | 
				
			|||||||
	 *
 | 
						 *
 | 
				
			||||||
	 * @since Envoy v0.1-alpha
 | 
						 * @since Envoy v0.1-alpha
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	public void changeChatWindowColors(String key) {
 | 
						private void changeChatWindowColors(Theme theme) {
 | 
				
			||||||
		Theme theme = Settings.getInstance().getThemes().get(key);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		// contentPane
 | 
							// contentPane
 | 
				
			||||||
		contentPane.setBackground(theme.getBackgroundColor());
 | 
							contentPane.setBackground(theme.getBackgroundColor());
 | 
				
			||||||
		contentPane.setForeground(theme.getUserNameColor());
 | 
							contentPane.setForeground(theme.getUserNameColor());
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,6 +27,8 @@ import javax.swing.ListSelectionModel;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import envoy.client.LocalDB;
 | 
					import envoy.client.LocalDB;
 | 
				
			||||||
import envoy.client.Settings;
 | 
					import envoy.client.Settings;
 | 
				
			||||||
 | 
					import envoy.client.event.EventBus;
 | 
				
			||||||
 | 
					import envoy.client.event.ThemeChangeEvent;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * This class provides the GUI to change the user specific settings.
 | 
					 * This class provides the GUI to change the user specific settings.
 | 
				
			||||||
@@ -45,12 +47,12 @@ public class SettingsScreen extends JDialog {
 | 
				
			|||||||
	private final JPanel		contentPanel		= new JPanel();
 | 
						private final JPanel		contentPanel		= new JPanel();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private DefaultListModel<String>	optionsListModel	= new DefaultListModel<>();
 | 
						private DefaultListModel<String>	optionsListModel	= new DefaultListModel<>();
 | 
				
			||||||
	private final JList<String>			options				= new JList<String>();
 | 
						private final JList<String>			options				= new JList<>();
 | 
				
			||||||
	private JPanel						buttonPane			= new JPanel();
 | 
						private JPanel						buttonPane			= new JPanel();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private JPanel				themeContent	= new JPanel();
 | 
						private JPanel				themeContent	= new JPanel();
 | 
				
			||||||
	private String[]			themeArray		= Settings.getInstance().getThemes().keySet().toArray(new String[0]);
 | 
						private String[]			themeArray		= Settings.getInstance().getThemes().keySet().toArray(new String[0]);
 | 
				
			||||||
	private JComboBox<String>	themes			= new JComboBox<String>(themeArray);
 | 
						private JComboBox<String>	themes			= new JComboBox<>(themeArray);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private GridBagConstraints gbc_themeContent = new GridBagConstraints();
 | 
						private GridBagConstraints gbc_themeContent = new GridBagConstraints();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -63,8 +65,7 @@ public class SettingsScreen extends JDialog {
 | 
				
			|||||||
	private JButton		cancelButton	= new JButton("Cancel");
 | 
						private JButton		cancelButton	= new JButton("Cancel");
 | 
				
			||||||
	private static int	space			= 5;
 | 
						private static int	space			= 5;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private boolean	colorChanged	= false;
 | 
						private Theme temporaryTheme;
 | 
				
			||||||
	private Theme	temporaryTheme;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private static final Logger logger = Logger.getLogger(LocalDB.class.getSimpleName());
 | 
						private static final Logger logger = Logger.getLogger(LocalDB.class.getSimpleName());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -296,9 +297,10 @@ public class SettingsScreen extends JDialog {
 | 
				
			|||||||
						Settings.getInstance().setCurrentTheme(selectedTheme.getThemeName());
 | 
											Settings.getInstance().setCurrentTheme(selectedTheme.getThemeName());
 | 
				
			||||||
						System.out.println(selectedTheme.getThemeName());
 | 
											System.out.println(selectedTheme.getThemeName());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
						changeSettingsScreenColors(Settings.getInstance().getCurrentTheme());
 | 
											final Theme currentTheme = Settings.getInstance().getThemes().get(Settings.getInstance().getCurrentTheme());
 | 
				
			||||||
						updateColorVariables(Settings.getInstance().getCurrentTheme());
 | 
											changeSettingsScreenColors(currentTheme);
 | 
				
			||||||
 | 
											updateColorVariables(currentTheme);
 | 
				
			||||||
 | 
											EventBus.getInstance().dispatch(new ThemeChangeEvent(currentTheme));
 | 
				
			||||||
						Settings.getInstance().save();
 | 
											Settings.getInstance().save();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
						revalidate();
 | 
											revalidate();
 | 
				
			||||||
@@ -310,11 +312,10 @@ public class SettingsScreen extends JDialog {
 | 
				
			|||||||
				});
 | 
									});
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		changeSettingsScreenColors(Settings.getInstance().getCurrentTheme());
 | 
							changeSettingsScreenColors(Settings.getInstance().getThemes().get(Settings.getInstance().getCurrentTheme()));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private void changeSettingsScreenColors(String key) {
 | 
						private void changeSettingsScreenColors(Theme theme) {
 | 
				
			||||||
		Theme theme = Settings.getInstance().getThemes().get(key);
 | 
					 | 
				
			||||||
		// whole JDialog
 | 
							// whole JDialog
 | 
				
			||||||
		setBackground(theme.getBackgroundColor());
 | 
							setBackground(theme.getBackgroundColor());
 | 
				
			||||||
		// contentPanel
 | 
							// contentPanel
 | 
				
			||||||
@@ -345,19 +346,8 @@ public class SettingsScreen extends JDialog {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private void updateColorVariables(String key) {
 | 
						private void updateColorVariables(Theme theme) {
 | 
				
			||||||
		Theme theme = Settings.getInstance().getThemes().get(key);
 | 
							temporaryTheme = new Theme("temporaryTheme", theme);
 | 
				
			||||||
 | 
					 | 
				
			||||||
		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();
 | 
							colorsPanel.removeAll();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -462,7 +452,6 @@ public class SettingsScreen extends JDialog {
 | 
				
			|||||||
					// TODO: When Theme changed in same settings screen, color variable doesnt
 | 
										// TODO: When Theme changed in same settings screen, color variable doesnt
 | 
				
			||||||
					// update.
 | 
										// update.
 | 
				
			||||||
					temporaryTheme.setColor(yIndex, newColor);
 | 
										temporaryTheme.setColor(yIndex, newColor);
 | 
				
			||||||
					colorChanged = true;
 | 
					 | 
				
			||||||
					createNewThemeButton.setEnabled(true);
 | 
										createNewThemeButton.setEnabled(true);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				button.setBackground(newColor);
 | 
									button.setBackground(newColor);
 | 
				
			||||||
@@ -481,8 +470,5 @@ public class SettingsScreen extends JDialog {
 | 
				
			|||||||
		colorsPanel.add(panel);
 | 
							colorsPanel.add(panel);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	private Color getInvertedColor(Color color) {
 | 
						private Color getInvertedColor(Color color) { return new Color(255 - color.getRed(), 255 - color.getGreen(), 255 - color.getBlue()); }
 | 
				
			||||||
		return new Color(255 - color.getRed(), 255 - color.getGreen(), 255 - color.getBlue());
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,12 +11,8 @@ import java.awt.TrayIcon.MessageType;
 | 
				
			|||||||
import java.awt.Window;
 | 
					import java.awt.Window;
 | 
				
			||||||
import java.awt.event.WindowAdapter;
 | 
					import java.awt.event.WindowAdapter;
 | 
				
			||||||
import java.awt.event.WindowEvent;
 | 
					import java.awt.event.WindowEvent;
 | 
				
			||||||
import java.util.HashSet;
 | 
					 | 
				
			||||||
import java.util.Set;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
import envoy.client.event.Event;
 | 
					 | 
				
			||||||
import envoy.client.event.EventBus;
 | 
					import envoy.client.event.EventBus;
 | 
				
			||||||
import envoy.client.event.EventHandler;
 | 
					 | 
				
			||||||
import envoy.client.event.MessageCreationEvent;
 | 
					import envoy.client.event.MessageCreationEvent;
 | 
				
			||||||
import envoy.exception.EnvoyException;
 | 
					import envoy.exception.EnvoyException;
 | 
				
			||||||
import envoy.schema.Message;
 | 
					import envoy.schema.Message;
 | 
				
			||||||
@@ -29,7 +25,7 @@ import envoy.schema.Message;
 | 
				
			|||||||
 * @author Kai S. K. Engelbart
 | 
					 * @author Kai S. K. Engelbart
 | 
				
			||||||
 * @since Envoy v0.2-alpha
 | 
					 * @since Envoy v0.2-alpha
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
public class StatusTrayIcon implements EventHandler {
 | 
					public class StatusTrayIcon {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * The {@link TrayIcon} provided by the System Tray API for controlling the
 | 
						 * The {@link TrayIcon} provided by the System Tray API for controlling the
 | 
				
			||||||
@@ -85,7 +81,10 @@ public class StatusTrayIcon implements EventHandler {
 | 
				
			|||||||
		trayIcon.addActionListener((evt) -> { focusTarget.setVisible(true); focusTarget.requestFocus(); });
 | 
							trayIcon.addActionListener((evt) -> { focusTarget.setVisible(true); focusTarget.requestFocus(); });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Start processing message events
 | 
							// Start processing message events
 | 
				
			||||||
		EventBus.getInstance().register(this);
 | 
							EventBus.getInstance().register(MessageCreationEvent.class, (evt) -> {
 | 
				
			||||||
 | 
								if (displayMessages)
 | 
				
			||||||
 | 
									trayIcon.displayMessage("New message received", ((MessageCreationEvent) evt).get().getContent().get(0).getText(), MessageType.INFO);
 | 
				
			||||||
 | 
							});
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
@@ -102,31 +101,4 @@ public class StatusTrayIcon implements EventHandler {
 | 
				
			|||||||
			throw new EnvoyException("Could not attach Envoy tray icon to system tray.", e);
 | 
								throw new EnvoyException("Could not attach Envoy tray icon to system tray.", e);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					 | 
				
			||||||
	/**
 | 
					 | 
				
			||||||
	 * Notifies the user of a message by displaying a pop-up every time a new
 | 
					 | 
				
			||||||
	 * message is received.
 | 
					 | 
				
			||||||
	 *
 | 
					 | 
				
			||||||
	 * @since Envoy v0.2-alpha
 | 
					 | 
				
			||||||
	 */
 | 
					 | 
				
			||||||
	@Override
 | 
					 | 
				
			||||||
	public void handle(Event<?> event) {
 | 
					 | 
				
			||||||
		System.out.println("Message received. Displaying message: " + displayMessages);
 | 
					 | 
				
			||||||
		if (displayMessages)
 | 
					 | 
				
			||||||
			trayIcon.displayMessage("New message received", ((MessageCreationEvent) event).get().getContent().get(0).getText(), MessageType.INFO);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/**
 | 
					 | 
				
			||||||
	 * The {@link StatusTrayIcon} only reacts to {@link MessageCreationEvent}
 | 
					 | 
				
			||||||
	 * instances which signify newly received messages.
 | 
					 | 
				
			||||||
	 *
 | 
					 | 
				
			||||||
	 * @return A set with the single element {@code MessageCreationEvent.class}
 | 
					 | 
				
			||||||
	 * @since Envoy v0.2-alpha
 | 
					 | 
				
			||||||
	 */
 | 
					 | 
				
			||||||
	@Override
 | 
					 | 
				
			||||||
	public Set<Class<? extends Event<?>>> supports() {
 | 
					 | 
				
			||||||
		Set<Class<? extends Event<?>>> supportedEvents = new HashSet<>();
 | 
					 | 
				
			||||||
		supportedEvents.add(MessageCreationEvent.class);
 | 
					 | 
				
			||||||
		return supportedEvents;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user