Defined theme specific icon folders, renamed icon loading method
| @@ -25,7 +25,7 @@ import envoy.util.SerializationUtils; | ||||
| public class Settings { | ||||
|  | ||||
| 	// Actual settings accessible by the rest of the application | ||||
| 	private Map<String, SettingsItem<?>>	items; | ||||
| 	private Map<String, SettingsItem<?>> items; | ||||
|  | ||||
| 	/** | ||||
| 	 * Settings are stored in this file. | ||||
| @@ -93,6 +93,15 @@ public class Settings { | ||||
| 	 */ | ||||
| 	public void setCurrentTheme(String themeName) { ((SettingsItem<String>) items.get("currentTheme")).set(themeName); } | ||||
|  | ||||
| 	/** | ||||
| 	 * @return true if the currently used theme is one of the default themes | ||||
| 	 * @since Envoy Client v0.1-beta | ||||
| 	 */ | ||||
| 	public boolean isUsingDefaultTheme() { | ||||
| 		final var theme = getCurrentTheme(); | ||||
| 		return theme.equals("dark") || theme.equals("light"); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * @return {@code true}, if pressing the {@code Enter} key suffices to send a | ||||
| 	 *         message. Otherwise it has to be pressed in conjunction with the | ||||
|   | ||||
| @@ -47,7 +47,7 @@ public class ClearableTextField extends GridPane { | ||||
| 	public ClearableTextField(String text, int size) { | ||||
| 		// initializing the textField and the button | ||||
| 		textField	= new TextField(text); | ||||
| 		clearButton	= new Button("", new ImageView(IconUtil.loadDefaultThemeSensitive("clear_button_", size))); | ||||
| 		clearButton	= new Button("", new ImageView(IconUtil.loadIconThemeSensitive("clear_button", size))); | ||||
| 		clearButton.setOnAction(e -> textField.clear()); | ||||
| 		clearButton.setFocusTraversable(false); | ||||
| 		clearButton.getStyleClass().clear(); | ||||
|   | ||||
| @@ -66,23 +66,23 @@ public class IconUtil { | ||||
| 	 * folder and scales it to 16px.<br> | ||||
| 	 * The suffix {@code .png} is automatically appended. | ||||
| 	 * | ||||
| 	 * @param name the image name without the .png - suffix | ||||
| 	 * @param name the image name without the .png suffix | ||||
| 	 * @return the loaded image | ||||
| 	 * @since Envoy Client v0.1-beta | ||||
| 	 * @apiNote let's take a sample image {@code abc.png} in the folder | ||||
| 	 *          {@code /icons/}. | ||||
| 	 *          <br> | ||||
| 	 *          To do that, we only have to call | ||||
| 	 *          {@code IconUtil.loadDefault("abc")} | ||||
| 	 *          {@code IconUtil.loadIcon("abc")} | ||||
| 	 */ | ||||
| 	public static Image loadDefault(String name) { return load("/icons/" + name + ".png"); } | ||||
| 	public static Image loadIcon(String name) { return load("/icons/" + name + ".png"); } | ||||
|  | ||||
| 	/** | ||||
| 	 * Loads a {@code .png} icon from the sub-folder {@code /icons/} of the resource | ||||
| 	 * folder and scales it to a given size.<br> | ||||
| 	 * The suffix {@code .png} is automatically appended. | ||||
| 	 * | ||||
| 	 * @param name the image name without the .png - suffix | ||||
| 	 * @param name the image name without the .png suffix | ||||
| 	 * @param size the size of the image to scale to | ||||
| 	 * @return the loaded image | ||||
| 	 * @since Envoy Client v0.1-beta | ||||
| @@ -90,9 +90,9 @@ public class IconUtil { | ||||
| 	 *          {@code /icons/} and load it in size 16. | ||||
| 	 *          <br> | ||||
| 	 *          To do that, we only have to call | ||||
| 	 *          {@code IconUtil.loadDefault("abc", 16)} | ||||
| 	 *          {@code IconUtil.loadIcon("abc", 16)} | ||||
| 	 */ | ||||
| 	public static Image loadDefault(String name, int size) { return load("/icons/" + name + ".png", size); } | ||||
| 	public static Image loadIcon(String name, int size) { return load("/icons/" + name + ".png", size); } | ||||
|  | ||||
| 	/** | ||||
| 	 * Loads a {@code .png} icon whose design depends on the currently active theme | ||||
| @@ -104,16 +104,16 @@ public class IconUtil { | ||||
| 	 * The suffix {@code .png} is automatically appended. | ||||
| 	 * | ||||
| 	 * @param name the image name without the "black" or "white" suffix and without | ||||
| 	 *             the .png - suffix | ||||
| 	 *             the .png suffix | ||||
| 	 * @return the loaded image | ||||
| 	 * @since Envoy Client v0.1-beta | ||||
| 	 * @apiNote let's take two sample images {@code abc_black.png} and | ||||
| 	 *          {@code abc_white.png} in the folder {@code /icons/} and load them. | ||||
| 	 *          <br> | ||||
| 	 *          To do that theme sensitve, we only have to call | ||||
| 	 *          {@code IconUtil.loadDefaultThemeSensitive("abc_")} | ||||
| 	 *          {@code IconUtil.loadIconThemeSensitive("abc_")} | ||||
| 	 */ | ||||
| 	public static Image loadDefaultThemeSensitive(String name) { return loadDefault(name + themeSpecificSuffix()); } | ||||
| 	public static Image loadIconThemeSensitive(String name) { return loadIcon(themeSpecificSubFolder() + name); } | ||||
|  | ||||
| 	/** | ||||
| 	 * Loads a {@code .png} icon whose design depends on the currently active theme | ||||
| @@ -125,7 +125,7 @@ public class IconUtil { | ||||
| 	 * <p> | ||||
| 	 * The suffix {@code .png} is automatically appended. | ||||
| 	 * | ||||
| 	 * @param name the image name without the .png - suffix | ||||
| 	 * @param name the image name without the .png suffix | ||||
| 	 * @param size the size of the image to scale to | ||||
| 	 * @return the loaded image | ||||
| 	 * @since Envoy Client v0.1-beta | ||||
| @@ -134,9 +134,9 @@ public class IconUtil { | ||||
| 	 *          size 16. | ||||
| 	 *          <br> | ||||
| 	 *          To do that theme sensitve, we only have to call | ||||
| 	 *          {@code IconUtil.loadDefaultThemeSensitive("abc_", 16)} | ||||
| 	 *          {@code IconUtil.loadIconThemeSensitive("abc_", 16)} | ||||
| 	 */ | ||||
| 	public static Image loadDefaultThemeSensitive(String name, int size) { return loadDefault(name + themeSpecificSuffix(), size); } | ||||
| 	public static Image loadIconThemeSensitive(String name, int size) { return loadIcon(themeSpecificSubFolder() + name, size); } | ||||
|  | ||||
| 	/** | ||||
| 	 * | ||||
| @@ -163,11 +163,13 @@ public class IconUtil { | ||||
| 	/** | ||||
| 	 * This method should be called if the display of an icon depends upon the | ||||
| 	 * currently active theme.<br> | ||||
| 	 * In case of the dark theme, the suffix {@code "white"} will be appended, else | ||||
| 	 * the suffix {@code "black"} will be appended. | ||||
| 	 * In case of a default theme, the string returned will be | ||||
| 	 * returned ({@code dark/} or {@code light/}), else it will be empty. | ||||
| 	 * | ||||
| 	 * @return the theme specific suffix | ||||
| 	 * @return the theme specific folder | ||||
| 	 * @since Envoy Client v0.1-beta | ||||
| 	 */ | ||||
| 	public static String themeSpecificSuffix() { return Settings.getInstance().getCurrentTheme().equals("dark") ? "white" : "black"; } | ||||
| 	public static String themeSpecificSubFolder() { | ||||
| 		return Settings.getInstance().isUsingDefaultTheme() ? Settings.getInstance().getCurrentTheme() + "/" : ""; | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -102,7 +102,7 @@ public final class Startup extends Application { | ||||
| 		messageStatusCache	= new Cache<>(); | ||||
|  | ||||
| 		stage.setTitle("Envoy"); | ||||
| 		stage.getIcons().add(IconUtil.loadDefault("envoy_logo")); | ||||
| 		stage.getIcons().add(IconUtil.loadIcon("envoy_logo")); | ||||
|  | ||||
| 		final var sceneContext = new SceneContext(stage); | ||||
| 		sceneContext.load(SceneInfo.LOGIN_SCENE); | ||||
|   | ||||
| @@ -110,8 +110,8 @@ public final class ChatScene implements Restorable { | ||||
| 		messageList.setCellFactory(MessageListCellFactory::new); | ||||
| 		userList.setCellFactory(ContactListCellFactory::new); | ||||
|  | ||||
| 		settingsButton.setGraphic(new ImageView(IconUtil.loadDefault("settings", 16))); | ||||
| 		voiceButton.setGraphic(new ImageView(IconUtil.loadDefaultThemeSensitive("", 24))); | ||||
| 		settingsButton.setGraphic(new ImageView(IconUtil.loadIconThemeSensitive("settings", 16))); | ||||
| 		voiceButton.setGraphic(new ImageView(IconUtil.loadIconThemeSensitive("microphone", 20))); | ||||
|  | ||||
| 		// Listen to received messages | ||||
| 		eventBus.register(MessageCreationEvent.class, e -> { | ||||
| @@ -265,17 +265,17 @@ public final class ChatScene implements Restorable { | ||||
| 					recording = true; | ||||
| 					Platform.runLater(() -> { | ||||
| 						voiceButton.setText("Recording"); | ||||
| 						voiceButton.setGraphic(new ImageView(IconUtil.loadDefault("microphone_recording", 24))); | ||||
| 						voiceButton.setGraphic(new ImageView(IconUtil.loadIcon("microphone_recording", 24))); | ||||
| 					}); | ||||
| 					recorder.start(); | ||||
| 				} else { | ||||
| 					pendingAttachment	= new Attachment(recorder.finish(), AttachmentType.VOICE); | ||||
| 					recording			= false; | ||||
| 					Platform.runLater(() -> { | ||||
| 						voiceButton.setGraphic(new ImageView(IconUtil.loadDefaultThemeSensitive("microphone_", 24))); | ||||
| 						voiceButton.setGraphic(new ImageView(IconUtil.loadIconThemeSensitive("microphone", 20))); | ||||
| 						voiceButton.setText(null); | ||||
| 						checkPostConditions(false); | ||||
| 						attachmentView.setImage(IconUtil.loadDefaultThemeSensitive("attachment_present_", 20)); | ||||
| 						attachmentView.setImage(IconUtil.loadIconThemeSensitive("attachment_present", 20)); | ||||
| 						attachmentView.setVisible(true); | ||||
| 					}); | ||||
| 				} | ||||
|   | ||||
| Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB | 
| Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB | 
| Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB | 
| Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB | 
| Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB | 
| Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB | 
| Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB | 
| Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB | 
| Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB | 
| Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB | 
| Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB | 
| Before Width: | Height: | Size: 28 KiB | 
 delvh
					delvh