added fundamental css files, theoretically added css support
This commit is contained in:
parent
d8e006f051
commit
067cbbdcf8
@ -27,8 +27,8 @@ import envoy.util.SerializationUtils;
|
|||||||
public class Settings {
|
public class Settings {
|
||||||
|
|
||||||
// Actual settings accessible by the rest of the application
|
// Actual settings accessible by the rest of the application
|
||||||
private Map<String, SettingsItem<?>> items;
|
private Map<String, SettingsItem<?>> items;
|
||||||
private Map<String, Theme> themes;
|
private Map<String, Theme> themes;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Settings are stored in this file.
|
* Settings are stored in this file.
|
||||||
@ -46,8 +46,8 @@ public class Settings {
|
|||||||
private static Settings settings = new Settings();
|
private static Settings settings = new Settings();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The way to instantiate the settings.
|
* The way to instantiate the settings. Is set to private to deny other
|
||||||
* Is set to private to deny other instances of that object.
|
* instances of that object.
|
||||||
*
|
*
|
||||||
* @since Envoy Client v0.2-alpha
|
* @since Envoy Client v0.2-alpha
|
||||||
*/
|
*/
|
||||||
@ -69,12 +69,10 @@ public class Settings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Load standard themes not defined in the themes file
|
// Load standard themes not defined in the themes file
|
||||||
themes.put("dark",
|
themes.put("dark", new Theme("dark", Color.black, Color.darkGray, Color.white, new Color(165, 60, 232),
|
||||||
new Theme("dark", Color.black, Color.darkGray, Color.white, new Color(165, 60, 232), Color.white, Color.orange, Color.blue,
|
Color.white, Color.orange, Color.blue, Color.white, Color.white));
|
||||||
Color.white, Color.white));
|
themes.put("light", new Theme("light", new Color(235, 235, 235), Color.white, Color.white, Color.darkGray,
|
||||||
themes.put("light",
|
Color.black, Color.orange, Color.darkGray, Color.black, Color.black));
|
||||||
new Theme("light", new Color(235, 235, 235), Color.white, Color.white, Color.darkGray, Color.black, Color.orange, Color.darkGray,
|
|
||||||
Color.black, Color.black));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -83,7 +81,9 @@ public class Settings {
|
|||||||
* @return the instance of Settings
|
* @return the instance of Settings
|
||||||
* @since Envoy Client v0.2-alpha
|
* @since Envoy Client v0.2-alpha
|
||||||
*/
|
*/
|
||||||
public static Settings getInstance() { return settings; }
|
public static Settings getInstance() {
|
||||||
|
return settings;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates the preferences when the save button is clicked.
|
* Updates the preferences when the save button is clicked.
|
||||||
@ -101,9 +101,12 @@ public class Settings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void supplementDefaults() {
|
private void supplementDefaults() {
|
||||||
items.putIfAbsent("enterToSend", new SettingsItem<>(true, "Enter to send", "Sends a message by pressing the enter key."));
|
items.putIfAbsent("enterToSend",
|
||||||
items.putIfAbsent("onCloseMode", new SettingsItem<>(true, "Hide on close", "Hides the chat window when it is closed."));
|
new SettingsItem<>(true, "Enter to send", "Sends a message by pressing the enter key."));
|
||||||
items.putIfAbsent("currentTheme", new SettingsItem<>("dark", "Current Theme Name", "The name of the currently selected theme."));
|
items.putIfAbsent("onCloseMode",
|
||||||
|
new SettingsItem<>(true, "Hide on close", "Hides the chat window when it is closed."));
|
||||||
|
items.putIfAbsent("currentTheme",
|
||||||
|
new SettingsItem<>("dark", "Current Theme Name", "The name of the currently selected theme."));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -112,19 +115,25 @@ public class Settings {
|
|||||||
* @param theme the {@link Theme} to add
|
* @param theme the {@link Theme} to add
|
||||||
* @since Envoy Client v0.2-alpha
|
* @since Envoy Client v0.2-alpha
|
||||||
*/
|
*/
|
||||||
public void addNewThemeToMap(Theme theme) { getThemes().put(theme.getThemeName(), theme); }
|
public void addNewThemeToMap(Theme theme) {
|
||||||
|
getThemes().put(theme.getThemeName(), theme);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the name of the currently active {@link Theme}
|
* @return the name of the currently active {@link Theme}
|
||||||
* @since Envoy Client v0.2-alpha
|
* @since Envoy Client v0.2-alpha
|
||||||
*/
|
*/
|
||||||
public String getCurrentThemeName() { return (String) items.get("currentTheme").get(); }
|
public String getCurrentThemeName() {
|
||||||
|
return (String) items.get("currentTheme").get();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the currently active {@link Theme}
|
* @return the currently active {@link Theme}
|
||||||
* @since Envoy Client v0.1-beta
|
* @since Envoy Client v0.1-beta
|
||||||
*/
|
*/
|
||||||
public Theme getCurrentTheme() { return getTheme(getCurrentThemeName()); }
|
public Theme getCurrentTheme() {
|
||||||
|
return getTheme(getCurrentThemeName());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the name of the current {@link Theme}.
|
* Sets the name of the current {@link Theme}.
|
||||||
@ -132,7 +141,18 @@ public class Settings {
|
|||||||
* @param themeName the name to set
|
* @param themeName the name to set
|
||||||
* @since Envoy Client v0.2-alpha
|
* @since Envoy Client v0.2-alpha
|
||||||
*/
|
*/
|
||||||
public void setCurrentTheme(String themeName) { ((SettingsItem<String>) items.get("currentTheme")).set(themeName); }
|
public void setCurrentTheme(String themeName) {
|
||||||
|
((SettingsItem<String>) items.get("currentTheme")).set(themeName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return whether the current {@link Theme} is one of the default themes.
|
||||||
|
* Currently checks for dark and light theme.
|
||||||
|
* @since Envoy Client v0.1-beta
|
||||||
|
*/
|
||||||
|
public boolean isUsingDefaultTheme() {
|
||||||
|
return getCurrentThemeName().equals("dark") || getCurrentThemeName().equals("light");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return {@code true}, if pressing the {@code Enter} key suffices to send a
|
* @return {@code true}, if pressing the {@code Enter} key suffices to send a
|
||||||
@ -140,7 +160,9 @@ public class Settings {
|
|||||||
* {@code Control} key.
|
* {@code Control} key.
|
||||||
* @since Envoy Client v0.2-alpha
|
* @since Envoy Client v0.2-alpha
|
||||||
*/
|
*/
|
||||||
public Boolean isEnterToSend() { return (Boolean) items.get("enterToSend").get(); }
|
public Boolean isEnterToSend() {
|
||||||
|
return (Boolean) items.get("enterToSend").get();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Changes the keystrokes performed by the user to send a message.
|
* Changes the keystrokes performed by the user to send a message.
|
||||||
@ -150,13 +172,17 @@ public class Settings {
|
|||||||
* conjunction with the {@code Control} key.
|
* conjunction with the {@code Control} key.
|
||||||
* @since Envoy Client v0.2-alpha
|
* @since Envoy Client v0.2-alpha
|
||||||
*/
|
*/
|
||||||
public void setEnterToSend(boolean enterToSend) { ((SettingsItem<Boolean>) items.get("enterToSend")).set(enterToSend); }
|
public void setEnterToSend(boolean enterToSend) {
|
||||||
|
((SettingsItem<Boolean>) items.get("enterToSend")).set(enterToSend);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the current on close mode.
|
* @return the current on close mode.
|
||||||
* @since Envoy Client v0.3-alpha
|
* @since Envoy Client v0.3-alpha
|
||||||
*/
|
*/
|
||||||
public Boolean getCurrentOnCloseMode() { return (Boolean) items.get("onCloseMode").get(); }
|
public Boolean getCurrentOnCloseMode() {
|
||||||
|
return (Boolean) items.get("onCloseMode").get();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the current on close mode.
|
* Sets the current on close mode.
|
||||||
@ -164,23 +190,31 @@ public class Settings {
|
|||||||
* @param currentOnCloseMode the on close mode that should be set.
|
* @param currentOnCloseMode the on close mode that should be set.
|
||||||
* @since Envoy Client v0.3-alpha
|
* @since Envoy Client v0.3-alpha
|
||||||
*/
|
*/
|
||||||
public void setCurrentOnCloseMode(boolean currentOnCloseMode) { ((SettingsItem<Boolean>) items.get("onCloseMode")).set(currentOnCloseMode); }
|
public void setCurrentOnCloseMode(boolean currentOnCloseMode) {
|
||||||
|
((SettingsItem<Boolean>) items.get("onCloseMode")).set(currentOnCloseMode);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the items
|
* @return the items
|
||||||
*/
|
*/
|
||||||
public Map<String, SettingsItem<?>> getItems() { return items; }
|
public Map<String, SettingsItem<?>> getItems() {
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param items the items to set
|
* @param items the items to set
|
||||||
*/
|
*/
|
||||||
public void setItems(Map<String, SettingsItem<?>> items) { this.items = items; }
|
public void setItems(Map<String, SettingsItem<?>> items) {
|
||||||
|
this.items = items;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return a {@code Map<String, Theme>} of all themes with their names as keys
|
* @return a {@code Map<String, Theme>} of all themes with their names as keys
|
||||||
* @since Envoy Client v0.2-alpha
|
* @since Envoy Client v0.2-alpha
|
||||||
*/
|
*/
|
||||||
public Map<String, Theme> getThemes() { return themes; }
|
public Map<String, Theme> getThemes() {
|
||||||
|
return themes;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the {@code Map<String, Theme>} of all themes with their names as keys
|
* Sets the {@code Map<String, Theme>} of all themes with their names as keys
|
||||||
@ -188,12 +222,16 @@ public class Settings {
|
|||||||
* @param themes the theme map to set
|
* @param themes the theme map to set
|
||||||
* @since Envoy Client v0.2-alpha
|
* @since Envoy Client v0.2-alpha
|
||||||
*/
|
*/
|
||||||
public void setThemes(Map<String, Theme> themes) { this.themes = themes; }
|
public void setThemes(Map<String, Theme> themes) {
|
||||||
|
this.themes = themes;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param themeName the name of the {@link Theme} to get
|
* @param themeName the name of the {@link Theme} to get
|
||||||
* @return the {@link Theme} with the specified name
|
* @return the {@link Theme} with the specified name
|
||||||
* @since Envoy Client v0.3-alpha
|
* @since Envoy Client v0.3-alpha
|
||||||
*/
|
*/
|
||||||
public Theme getTheme(String themeName) { return themes.get(themeName); }
|
public Theme getTheme(String themeName) {
|
||||||
|
return themes.get(themeName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package envoy.client.ui;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Paths;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
@ -44,11 +45,14 @@ public final class Startup extends Application {
|
|||||||
|
|
||||||
private FXMLLoader loader = new FXMLLoader();
|
private FXMLLoader loader = new FXMLLoader();
|
||||||
private Stage stage;
|
private Stage stage;
|
||||||
|
private Scene previousScene;
|
||||||
|
|
||||||
private Scene previousScene;
|
private final String[] CSSPaths = { "file://./src/main/resources/fxml/themes/base.css",
|
||||||
|
"file://./src/main/resources/fxml/themes/" + (settings.isUsingDefaultTheme() ? settings.getCurrentThemeName() : "custom") + ".css" };
|
||||||
|
|
||||||
private static final ClientConfig config = ClientConfig.getInstance();
|
private static final Settings settings = Settings.getInstance();
|
||||||
private static final Logger logger = EnvoyLog.getLogger(Startup.class);
|
private static final ClientConfig config = ClientConfig.getInstance();
|
||||||
|
private static final Logger logger = EnvoyLog.getLogger(Startup.class);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
@ -150,7 +154,8 @@ public final class Startup extends Application {
|
|||||||
* @param fxmlLocation the location of the fxml file
|
* @param fxmlLocation the location of the fxml file
|
||||||
* @param layout the layout to use
|
* @param layout the layout to use
|
||||||
* @param savePrevious if true, the previous stage will be stored in this
|
* @param savePrevious if true, the previous stage will be stored in this
|
||||||
* instance of Startup, else the variable storing it will be
|
* instance of Startup, else the variable storing it will
|
||||||
|
* be
|
||||||
* set to null
|
* set to null
|
||||||
* @since Envoy Client v0.1-beta
|
* @since Envoy Client v0.1-beta
|
||||||
*/
|
*/
|
||||||
@ -160,13 +165,17 @@ public final class Startup extends Application {
|
|||||||
// Clearing the loader so that a new Scene can be initialised
|
// Clearing the loader so that a new Scene can be initialised
|
||||||
loader = new FXMLLoader();
|
loader = new FXMLLoader();
|
||||||
var rootNode = loader.<T>load(getClass().getResourceAsStream(fxmlLocation));
|
var rootNode = loader.<T>load(getClass().getResourceAsStream(fxmlLocation));
|
||||||
var chatScene = new Scene(rootNode);
|
var scene = new Scene(rootNode);
|
||||||
previousScene = (savePrevious) ? stage.getScene() : null;
|
previousScene = savePrevious ? stage.getScene() : null;
|
||||||
stage.setScene(chatScene);
|
// Setting the visual appearance
|
||||||
|
scene.getStylesheets().addAll(CSSPaths);
|
||||||
|
System.out.println(Paths.get(".").toAbsolutePath().normalize().toString());
|
||||||
|
stage.setScene(scene);
|
||||||
stage.show();
|
stage.show();
|
||||||
// return loader.getController();
|
// return loader.getController();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
new Alert(AlertType.ERROR, "The screen could not be updated due to reasons. (...bad programming...)");
|
new Alert(AlertType.ERROR, "The screen could not be updated due to reasons. (...bad programming...)");
|
||||||
|
System.err.println("input: FXMLLocation: " + fxmlLocation + ", CSS paths: " + CSSPaths);
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
logger.severe("Something happened (while loading the new scene from " + fxmlLocation + ")");
|
logger.severe("Something happened (while loading the new scene from " + fxmlLocation + ")");
|
||||||
}
|
}
|
||||||
@ -175,7 +184,7 @@ public final class Startup extends Application {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Changes the visual scene back to the saved value. The currently active scene
|
* Changes the visual scene back to the saved value. The currently active scene
|
||||||
* can be saved.
|
* can be saved, but must not be.
|
||||||
*
|
*
|
||||||
* @param storeCurrent the old scene to store, if wanted. Can be null
|
* @param storeCurrent the old scene to store, if wanted. Can be null
|
||||||
* @since Envoy Client v0.1-beta
|
* @since Envoy Client v0.1-beta
|
||||||
@ -185,7 +194,7 @@ public final class Startup extends Application {
|
|||||||
if (previousScene == null) throw new IllegalStateException("Someone tried restoring a null scene. (Something happened)");
|
if (previousScene == null) throw new IllegalStateException("Someone tried restoring a null scene. (Something happened)");
|
||||||
else {
|
else {
|
||||||
// switching previous and current
|
// switching previous and current
|
||||||
var temp = (storeCurrent) ? stage.getScene() : null;
|
var temp = storeCurrent ? stage.getScene() : null;
|
||||||
stage.setScene(previousScene);
|
stage.setScene(previousScene);
|
||||||
previousScene = temp;
|
previousScene = temp;
|
||||||
stage.show();
|
stage.show();
|
||||||
@ -224,4 +233,23 @@ public final class Startup extends Application {
|
|||||||
if (loader.getController() == null) throw new NullPointerException("Cannot deliver current controller as its undefined (duh!)");
|
if (loader.getController() == null) throw new NullPointerException("Cannot deliver current controller as its undefined (duh!)");
|
||||||
else return loader.getController();
|
else return loader.getController();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the CSSPaths
|
||||||
|
* @since Envoy Client v0.1-beta
|
||||||
|
*/
|
||||||
|
public String[] getCSSPaths() { return CSSPaths; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Changes the currently displayed theme
|
||||||
|
*
|
||||||
|
* @since Envoy Client v0.1-beta
|
||||||
|
*/
|
||||||
|
public void changeTheme() {
|
||||||
|
// the base.css file should never be changed during runtime
|
||||||
|
CSSPaths[1] = "file://.fxml/themes/" + (settings.isUsingDefaultTheme() ? settings.getCurrentThemeName() : "custom") + ".css";
|
||||||
|
var styleSheets = stage.getScene().getStylesheets();
|
||||||
|
styleSheets.remove(styleSheets.size() - 1);
|
||||||
|
styleSheets.add(CSSPaths[1]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
5
src/main/resources/fxml/themes/base.css
Normal file
5
src/main/resources/fxml/themes/base.css
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
.root{
|
||||||
|
-fx-font: 200pt "Serif";
|
||||||
|
--background=#00FF00;
|
||||||
|
background: var(--background);
|
||||||
|
}
|
0
src/main/resources/fxml/themes/custom.css
Normal file
0
src/main/resources/fxml/themes/custom.css
Normal file
7
src/main/resources/fxml/themes/dark.css
Normal file
7
src/main/resources/fxml/themes/dark.css
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
.root{
|
||||||
|
--background=#000000;
|
||||||
|
background: var(--background);
|
||||||
|
}
|
||||||
|
.button{
|
||||||
|
color: rgb(105,0,153);
|
||||||
|
}
|
0
src/main/resources/fxml/themes/light.css
Normal file
0
src/main/resources/fxml/themes/light.css
Normal file
Reference in New Issue
Block a user