From 8ddcb9743ee4a81a78fdefc1027e4b59917c6c09 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Wed, 24 Feb 2021 14:22:14 +0100 Subject: [PATCH] Add themes --- README.md | 6 ++-- src/main/java/app/Main.java | 10 +++---- src/main/java/app/MainController.java | 27 +++++++++-------- .../app/controllers/MenubarController.java | 8 +++++ .../java/app/events/ThemeChangedEvent.java | 15 ++++++++++ .../resources/fxml/components/Menubar.fxml | 29 +++++++++++++++++-- .../resources/styling/languages/empty.css | 0 .../styling/{language => languages}/java.css | 0 .../{language => languages}/markdown.css | 0 9 files changed, 71 insertions(+), 24 deletions(-) create mode 100644 src/main/java/app/events/ThemeChangedEvent.java create mode 100644 src/main/resources/styling/languages/empty.css rename src/main/resources/styling/{language => languages}/java.css (100%) rename src/main/resources/styling/{language => languages}/markdown.css (100%) diff --git a/README.md b/README.md index 725fcf3..7a1b1e0 100644 --- a/README.md +++ b/README.md @@ -20,10 +20,10 @@ Probably tastes better than any Apple editor and NetBeans combined. - [X] Shortcuts - [X] Change languages - [X] Toggle line comment -- [ ] Soft wrap -- [ ] Darkmode/Lightmode or color themes +- [X] Soft wrap +- [X] Darkmode/Lightmode or color themes - [ ] Add icons for files/folders in filetree -- [ ] Add [code coverage check](https://docs.gitlab.com/ee/user/project/merge_requests/test_coverage_visualization.html) to verify quality of unit tests +- [X] Add [code coverage check](https://docs.gitlab.com/ee/user/project/merge_requests/test_coverage_visualization.html) to verify quality of unit tests ## Maybe TODO? - [ ] List Chooser diff --git a/src/main/java/app/Main.java b/src/main/java/app/Main.java index 6b6f3a2..f342938 100644 --- a/src/main/java/app/Main.java +++ b/src/main/java/app/Main.java @@ -10,6 +10,7 @@ import javafx.scene.image.Image; import javafx.stage.Stage; import app.events.FileSaveStateChangedEvent; import app.events.LanguageChangedEvent; +import app.events.ThemeChangedEvent; import app.model.Model; public class Main extends Application { @@ -46,17 +47,15 @@ public class Main extends Application { Model.setScene(scene); } - private void applyCSS() { - scene.getStylesheets().add( - getClass().getResource("/styling/themes/monokai.css").toExternalForm()); - } - /** * Set up default values and settings for the editor. */ private void setupDefaults() { + scene.getStylesheets().setAll("", ""); + MainController mainController = fxmlLoader.getController(); mainController.getEventBus().post(new LanguageChangedEvent("Java")); + mainController.getEventBus().post(new ThemeChangedEvent("Monokai")); mainController.getEventBus().post(new FileSaveStateChangedEvent(true)); mainController.setHostServices(getHostServices()); } @@ -71,7 +70,6 @@ public class Main extends Application { setupWindow(window); loadFXML(); createScene(); - applyCSS(); setupDefaults(); window.setScene(scene); diff --git a/src/main/java/app/MainController.java b/src/main/java/app/MainController.java index b9c8466..7809375 100644 --- a/src/main/java/app/MainController.java +++ b/src/main/java/app/MainController.java @@ -11,6 +11,7 @@ import app.controllers.*; import app.events.ExitApplicationEvent; import app.events.LanguageChangedEvent; import app.events.OpenLinkInBrowserEvent; +import app.events.ThemeChangedEvent; import app.model.Model; import javafx.application.HostServices; import javafx.application.Platform; @@ -65,26 +66,28 @@ public class MainController implements Initializable { this.hostServices = hostServices; } + private void setCSSAt(int position, String cssPath) { + String nextStyleSheet = + getClass() + .getResource(cssPath) + .toExternalForm(); + + Model.getScene().getStylesheets().set(position, nextStyleSheet); + } + /** * Change the CSS according to which language is being used. * @param event */ @Subscribe private void handle(LanguageChangedEvent event) { - - boolean containsSeveralStylesheets = Model.getScene().getStylesheets().size() != 1; - - if (containsSeveralStylesheets) - Model.getScene().getStylesheets().remove(1); - - String nextStyleSheet = - getClass() - .getResource("/styling/language/" + event.getLanguage().toLowerCase() + ".css") - .toExternalForm(); - - Model.getScene().getStylesheets().add(nextStyleSheet); + this.setCSSAt(1, "/styling/languages/" + event.getLanguage().toLowerCase() + ".css"); } + @Subscribe + private void handle(ThemeChangedEvent event) { + this.setCSSAt(0, "/styling/themes/" + event.getTheme().toLowerCase().replace(" ", "-") + ".css"); + } @Subscribe private void handle(OpenLinkInBrowserEvent event) { diff --git a/src/main/java/app/controllers/MenubarController.java b/src/main/java/app/controllers/MenubarController.java index 89c2790..a7ce617 100644 --- a/src/main/java/app/controllers/MenubarController.java +++ b/src/main/java/app/controllers/MenubarController.java @@ -10,6 +10,7 @@ import com.google.common.eventbus.Subscribe; import app.events.ExitApplicationEvent; import app.events.LanguageChangedEvent; import app.events.OpenLinkInBrowserEvent; +import app.events.ThemeChangedEvent; import app.events.ToggleCommentEvent; import app.events.ToggleWrapTextEvent; import javafx.event.ActionEvent; @@ -107,6 +108,13 @@ public class MenubarController implements Initializable, Controller { this.eventBus.post(new ToggleWrapTextEvent(isSelected)); } + @FXML + private void handleThemeChange(ActionEvent event) { + this.eventBus.post( + new ThemeChangedEvent( + ((RadioMenuItem) event.getSource()).getText())); + } + /** * Handles the event where there was an exit request from the menu. * @param event diff --git a/src/main/java/app/events/ThemeChangedEvent.java b/src/main/java/app/events/ThemeChangedEvent.java new file mode 100644 index 0000000..b3452ee --- /dev/null +++ b/src/main/java/app/events/ThemeChangedEvent.java @@ -0,0 +1,15 @@ +package app.events; + +public class ThemeChangedEvent { + + private String theme; + + public ThemeChangedEvent(String theme) { + this.theme = theme; + } + + public String getTheme() { + return theme; + } + +} diff --git a/src/main/resources/fxml/components/Menubar.fxml b/src/main/resources/fxml/components/Menubar.fxml index d6a24b4..b5ed590 100644 --- a/src/main/resources/fxml/components/Menubar.fxml +++ b/src/main/resources/fxml/components/Menubar.fxml @@ -7,6 +7,7 @@ + - + - + - + @@ -44,6 +45,28 @@ toggleGroup="$languageToggleGroup"/> + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/styling/languages/empty.css b/src/main/resources/styling/languages/empty.css new file mode 100644 index 0000000..e69de29 diff --git a/src/main/resources/styling/language/java.css b/src/main/resources/styling/languages/java.css similarity index 100% rename from src/main/resources/styling/language/java.css rename to src/main/resources/styling/languages/java.css diff --git a/src/main/resources/styling/language/markdown.css b/src/main/resources/styling/languages/markdown.css similarity index 100% rename from src/main/resources/styling/language/markdown.css rename to src/main/resources/styling/languages/markdown.css