From ebbbb0c2263825998b606b7aa7ee847049ce5034 Mon Sep 17 00:00:00 2001 From: Ziad Ashraf <155207557+ziad-ashraf7@users.noreply.github.com> Date: Wed, 26 Jun 2024 13:38:31 +0300 Subject: [PATCH] feat: Added Settings menu to Drifty GUI (#544) * added the Settings.java file - done with Auto-Paste box * added the Settings.java file - done with Auto-Paste box * ended the page , added heading , added dark theme CSS , added dark theme choiceBox * added the btnSave/Start png , added the banner Dark png , added the splash dark png and make the dark theme apply on them * testing the splash * ended the select directory feat. , edited the labels styles * Fromating code * Fromating code * Fromating code 2 * solved most of the AI bots errors * Solved an About-stage bug * Added the applyTheme() method in Settings.java * modified the handelDirectory method , added messageBroker getter * Done the bidirectionally bind between tow checbox (Settign , Main) * modifing the autoPaste main , Settings Logic * Fixed an Save/Start icons bug , improved the icons methods readablty * removed the unsafe getClass().getResources() * Refactoring the Settings code * fix: Fixed duplicate code, linter issues, redundant method calls and removed spelling mistakes * fix: Fixed a method spacing issue * fix: Fixed a minor linter issue * Add: Added the Theme.java Class , migrating the theme logic into it * Removing unused imports and the Arralist declaration * fix: Fixed linter issues and applied all CodeRabbitAI reviews * fix: Fixed a minor linter issue * Refactoring the code * Solving some of linter errors * fix: Implemented all of the reviews except one * fix: Fixed linter issue * fix: implemented all the reviews * added the dark theme to info window * fix: solved the lint error * fix: sovlving the ai reveiws * fix: linter error fixed * fix: Fixed failure to initialise About scene in Drifty GUI native image --------- Co-authored-by: Ziad Ashraf Co-authored-by: Saptarshi Sarkar --- .idea/inspectionProfiles/Project_Default.xml | 1 + GUI/src/main/java/gui/preferences/Clear.java | 4 + GUI/src/main/java/gui/preferences/Get.java | 5 + GUI/src/main/java/gui/preferences/Labels.java | 2 +- GUI/src/main/java/gui/preferences/Set.java | 8 +- GUI/src/main/java/gui/support/Constants.java | 52 +++-- .../java/gui/utils/UIComponentBuilder.java | 72 +++++++ GUI/src/main/java/main/Drifty_GUI.java | 76 +++---- GUI/src/main/java/ui/About.java | 103 ++++++++++ GUI/src/main/java/ui/ConfirmationDialog.java | 31 ++- GUI/src/main/java/ui/MainGridPane.java | 74 ++----- GUI/src/main/java/ui/Settings.java | 185 ++++++++++++++++++ GUI/src/main/java/ui/Theme.java | 134 +++++++++++++ GUI/src/main/java/ui/UIController.java | 122 ++++++------ .../resources/Backgrounds/DriftyMainDark.png | Bin 0 -> 67874 bytes .../{DriftyMain.png => DriftyMainLight.png} | Bin .../resources/Buttons/Save/SaveDownDark.png | Bin 0 -> 19080 bytes .../Save/{SaveDown.png => SaveDownLight.png} | Bin .../resources/Buttons/Save/SaveUpDark.png | Bin 0 -> 22266 bytes .../Save/{SaveUp.png => SaveUpLight.png} | Bin .../resources/Buttons/Start/StartDownDark.png | Bin 0 -> 18433 bytes .../{StartDown.png => StartDownLight.png} | Bin .../resources/Buttons/Start/StartUpDark.png | Bin 0 -> 23443 bytes .../Start/{StartUp.png => StartUpLight.png} | Bin GUI/src/main/resources/CSS/Button.css | 3 +- GUI/src/main/resources/CSS/DarkTheme.css | 33 ++++ .../CSS/{Scene.css => LightTheme.css} | 2 +- .../META-INF/native-image/jni-config.json | 20 +- .../META-INF/native-image/reflect-config.json | 15 +- .../native-image/resource-config.json | 84 ++++++-- GUI/src/main/resources/SplashDark.png | Bin 0 -> 56978 bytes .../resources/{Splash.png => SplashLight.png} | Bin 32 files changed, 810 insertions(+), 216 deletions(-) create mode 100644 GUI/src/main/java/gui/utils/UIComponentBuilder.java create mode 100644 GUI/src/main/java/ui/About.java create mode 100644 GUI/src/main/java/ui/Settings.java create mode 100644 GUI/src/main/java/ui/Theme.java create mode 100644 GUI/src/main/resources/Backgrounds/DriftyMainDark.png rename GUI/src/main/resources/Backgrounds/{DriftyMain.png => DriftyMainLight.png} (100%) create mode 100644 GUI/src/main/resources/Buttons/Save/SaveDownDark.png rename GUI/src/main/resources/Buttons/Save/{SaveDown.png => SaveDownLight.png} (100%) create mode 100644 GUI/src/main/resources/Buttons/Save/SaveUpDark.png rename GUI/src/main/resources/Buttons/Save/{SaveUp.png => SaveUpLight.png} (100%) create mode 100644 GUI/src/main/resources/Buttons/Start/StartDownDark.png rename GUI/src/main/resources/Buttons/Start/{StartDown.png => StartDownLight.png} (100%) create mode 100644 GUI/src/main/resources/Buttons/Start/StartUpDark.png rename GUI/src/main/resources/Buttons/Start/{StartUp.png => StartUpLight.png} (100%) create mode 100644 GUI/src/main/resources/CSS/DarkTheme.css rename GUI/src/main/resources/CSS/{Scene.css => LightTheme.css} (51%) create mode 100644 GUI/src/main/resources/SplashDark.png rename GUI/src/main/resources/{Splash.png => SplashLight.png} (100%) diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml index c6d927e7e..7e62176b7 100644 --- a/.idea/inspectionProfiles/Project_Default.xml +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -6,5 +6,6 @@ + \ No newline at end of file diff --git a/GUI/src/main/java/gui/preferences/Clear.java b/GUI/src/main/java/gui/preferences/Clear.java index f8a5357f1..0daa6d612 100644 --- a/GUI/src/main/java/gui/preferences/Clear.java +++ b/GUI/src/main/java/gui/preferences/Clear.java @@ -20,6 +20,10 @@ public void mainAutoPaste() { preferences.remove(MAIN_AUTO_PASTE.toString()); } + public void mainTheme() { + preferences.remove(MAIN_THEME.toString()); + } + public void jobs() { preferences.remove(JOBS.toString()); } diff --git a/GUI/src/main/java/gui/preferences/Get.java b/GUI/src/main/java/gui/preferences/Get.java index 5b3072bdb..befec1b5f 100644 --- a/GUI/src/main/java/gui/preferences/Get.java +++ b/GUI/src/main/java/gui/preferences/Get.java @@ -25,6 +25,7 @@ static Get getInstance() { return INSTANCE; } + public Folders folders() { GsonBuilder gsonBuilder = new GsonBuilder(); Gson gson = FxGson.addFxSupport(gsonBuilder).setPrettyPrinting().create(); @@ -41,6 +42,10 @@ public boolean mainAutoPaste() { return preferences.getBoolean(MAIN_AUTO_PASTE.toString(), false); } + public String mainTheme() { + return preferences.get(MAIN_THEME.toString(), "Light"); + } + public Jobs jobs() { GsonBuilder gsonBuilder = new GsonBuilder(); Gson gson = FxGson.addFxSupport(gsonBuilder).setPrettyPrinting().create(); diff --git a/GUI/src/main/java/gui/preferences/Labels.java b/GUI/src/main/java/gui/preferences/Labels.java index 7f15ce99a..8fc0541d7 100644 --- a/GUI/src/main/java/gui/preferences/Labels.java +++ b/GUI/src/main/java/gui/preferences/Labels.java @@ -1,5 +1,5 @@ package gui.preferences; public enum Labels implements preferences.Labels { - FOLDERS, MAIN_AUTO_PASTE, JOBS, ALWAYS_AUTO_PASTE + FOLDERS, MAIN_AUTO_PASTE, JOBS, ALWAYS_AUTO_PASTE, MAIN_THEME } diff --git a/GUI/src/main/java/gui/preferences/Set.java b/GUI/src/main/java/gui/preferences/Set.java index 5ec37f027..862a6c4f3 100644 --- a/GUI/src/main/java/gui/preferences/Set.java +++ b/GUI/src/main/java/gui/preferences/Set.java @@ -14,8 +14,7 @@ import java.nio.file.Paths; import java.util.prefs.Preferences; -import static gui.preferences.Labels.FOLDERS; -import static gui.preferences.Labels.MAIN_AUTO_PASTE; +import static gui.preferences.Labels.*; import static properties.Program.JOB_FILE; public final class Set extends preferences.Set { @@ -42,6 +41,11 @@ public void mainAutoPaste(boolean isMainAutoPasteEnabled) { preferences.putBoolean(MAIN_AUTO_PASTE.toString(), isMainAutoPasteEnabled); } + public void mainTheme(String theme) { + AppSettings.CLEAR.mainTheme(); + preferences.put(MAIN_THEME.toString(), theme); + } + public void jobs(Jobs jobs) { GsonBuilder gsonBuilder = new GsonBuilder(); Gson gson = FxGson.addFxSupport(gsonBuilder).setPrettyPrinting().create(); diff --git a/GUI/src/main/java/gui/support/Constants.java b/GUI/src/main/java/gui/support/Constants.java index 2e7590e50..00e1307fd 100644 --- a/GUI/src/main/java/gui/support/Constants.java +++ b/GUI/src/main/java/gui/support/Constants.java @@ -1,6 +1,8 @@ package gui.support; import gui.init.Environment; +import gui.preferences.AppSettings; +import gui.utils.UIComponentBuilder; import javafx.geometry.Rectangle2D; import javafx.scene.Parent; import javafx.scene.Scene; @@ -13,6 +15,17 @@ import java.util.Objects; public class Constants extends support.Constants { + public static final UIComponentBuilder UI_COMPONENT_BUILDER_INSTANCE = UIComponentBuilder.getInstance(); + public static final String BUTTON_RELEASED = + "-fx-text-fill: white;" + + "-fx-font-weight: Bold;" + + "-fx-background-color: linear-gradient(rgb(0, 53, 105) 20%, rgb(26, 21, 129) 65%, rgb(0, 0, 65) 100%);" + + "-fx-border-color: white;"; + public static final String BUTTON_PRESSED = + "-fx-text-fill: white;" + + "-fx-font-weight: Bold;" + + " -fx-background-color: linear-gradient(rgb(11, 118, 220) 20%, rgb(33, 31, 131) 65%, rgb(2, 2, 168) 100%);\n" + + "-fx-border-color: white;"; public static final String GUI_APPLICATION_TERMINATED = "Drifty GUI (Graphical User Interface) Application Terminated!"; public static final String TRYING_TO_DOWNLOAD_F = "Trying to download \"%s\" ..."; public static final String WRITE_ACCESS_DENIED_F = "Write Access To \"%s\" DENIED!"; @@ -22,20 +35,25 @@ public class Constants extends support.Constants { public static final double SCREEN_HEIGHT = SCREEN_SIZE.getHeight(); // Graphics Files - public static final URL DRIFTY_MAIN_PNG = Constants.class.getResource("/Backgrounds/DriftyMain.png"); - public static final URL SAVE_UP_PNG = Constants.class.getResource("/Buttons/Save/SaveUp.png"); - public static final URL SAVE_DOWN_PNG = Constants.class.getResource("/Buttons/Save/SaveDown.png"); - public static final URL START_UP_PNG = Constants.class.getResource("/Buttons/Start/StartUp.png"); - public static final URL START_DOWN_PNG = Constants.class.getResource("/Buttons/Start/StartDown.png"); + public static final URL DRIFTY_MAIN_PNG = AppSettings.GET.mainTheme().equals("Dark") ? Constants.class.getResource("/Backgrounds/DriftyMainDark.png") : Constants.class.getResource("/Backgrounds/DriftyMainLight.png"); + public static final URL SAVE_UP_LIGHT_PNG = Constants.class.getResource("/Buttons/Save/SaveUpLight.png"); + public static final URL SAVE_UP_DARK_PNG = Constants.class.getResource("/Buttons/Save/SaveUpDark.png"); + public static final URL SAVE_DOWN_LIGHT_PNG = Constants.class.getResource("/Buttons/Save/SaveDownLight.png"); + public static final URL SAVE_DOWN_DARK_PNG = Constants.class.getResource("/Buttons/Save/SaveDownDark.png"); + public static final URL START_UP_LIGHT_PNG = Constants.class.getResource("/Buttons/Start/StartUpLight.png"); + public static final URL START_UP_DARK_PNG = Constants.class.getResource("/Buttons/Start/StartUpDark.png"); + public static final URL START_DOWN_LIGHT_PNG = Constants.class.getResource("/Buttons/Start/StartDownLight.png"); + public static final URL START_DOWN_DARK_PNG = Constants.class.getResource("/Buttons/Start/StartDownDark.png"); public static final URL LINK_PNG = Constants.class.getResource("/Labels/Link.png"); public static final URL AUTO_PASTE_PNG = Constants.class.getResource("/Labels/AutoPaste.png"); public static final URL DIRECTORY_PNG = Constants.class.getResource("/Labels/Directory.png"); public static final URL FILENAME_PNG = Constants.class.getResource("/Labels/Filename.png"); public static final URL DRIFTY_ICON = Constants.class.getResource("/Icons/AppIcon.png"); - public static final URL SPLASH = Constants.class.getResource("/Splash.png"); + public static final URL SPLASH = AppSettings.GET.mainTheme().equals("Dark") ? Constants.class.getResource("/SplashDark.png") : Constants.class.getResource("/SplashLight.png"); // Stylesheets - public static final URL SCENE_CSS = Constants.class.getResource("/CSS/Scene.css"); + public static final URL LIGHT_THEME_CSS = Constants.class.getResource("/CSS/LightTheme.css"); + public static final URL DARK_THEME_CSS = Constants.class.getResource("/CSS/DarkTheme.css"); public static final URL LIST_VIEW_CSS = Constants.class.getResource("/CSS/ListView.css"); public static final URL TEXT_FIELD_CSS = Constants.class.getResource("/CSS/TextField.css"); public static final URL CONTEXT_MENU_CSS = Constants.class.getResource("/CSS/ContextMenu.css"); @@ -51,18 +69,22 @@ public class Constants extends support.Constants { public static final URL MONACO_TTF = Constants.class.getResource("/Fonts/Monaco.ttf"); // JavaFX Image Objects - public static final Image IMG_MAIN_GUI_BANNER = new Image(Objects.requireNonNull(DRIFTY_MAIN_PNG).toExternalForm()); - public static final Image IMG_SPLASH = new Image(Objects.requireNonNull(SPLASH).toExternalForm()); + public static Image imgMainGuiBanner = new Image(Objects.requireNonNull(DRIFTY_MAIN_PNG).toExternalForm()); + public static Image imgSplash = new Image(Objects.requireNonNull(SPLASH).toExternalForm()); public static final Image IMG_LINK_LABEL = new Image(Objects.requireNonNull(LINK_PNG).toExternalForm()); public static final Image IMG_DIR_LABEL = new Image(Objects.requireNonNull(DIRECTORY_PNG).toExternalForm()); public static final Image IMG_FILENAME_LABEL = new Image(Objects.requireNonNull(FILENAME_PNG).toExternalForm()); public static final Image IMG_AUTO_PASTE_LABEL = new Image(Objects.requireNonNull(AUTO_PASTE_PNG).toExternalForm()); - public static final Image IMG_START_UP = new Image(Objects.requireNonNull(START_UP_PNG).toExternalForm()); - public static final Image IMG_START_DOWN = new Image(Objects.requireNonNull(START_DOWN_PNG).toExternalForm()); - public static final Image IMG_SAVE_UP = new Image(Objects.requireNonNull(SAVE_UP_PNG).toExternalForm()); - public static final Image IMG_SAVE_DOWN = new Image(Objects.requireNonNull(SAVE_DOWN_PNG).toExternalForm()); + public static final Image IMG_START_UP_LIGHT = new Image(Objects.requireNonNull(START_UP_LIGHT_PNG).toExternalForm()); + public static final Image IMG_START_UP_DARK = new Image(Objects.requireNonNull(START_UP_DARK_PNG).toExternalForm()); + public static final Image IMG_START_DOWN_LIGHT = new Image(Objects.requireNonNull(START_DOWN_LIGHT_PNG).toExternalForm()); + public static final Image IMG_START_DOWN_DARK = new Image(Objects.requireNonNull(START_DOWN_DARK_PNG).toExternalForm()); + public static final Image IMG_SAVE_UP_LIGHT = new Image(Objects.requireNonNull(SAVE_UP_LIGHT_PNG).toExternalForm()); + public static final Image IMG_SAVE_UP_DARK = new Image(Objects.requireNonNull(SAVE_UP_DARK_PNG).toExternalForm()); + public static final Image IMG_SAVE_DOWN_LIGHT = new Image(Objects.requireNonNull(SAVE_DOWN_LIGHT_PNG).toExternalForm()); + public static final Image IMG_SAVE_DOWN_DARK = new Image(Objects.requireNonNull(SAVE_DOWN_DARK_PNG).toExternalForm()); - // Methods for obtaining consistent Stages and Scenes + // Methods for getting consistent Stages and Scenes public static Stage getStage(String title, boolean isPrimaryStage) { Stage stage = new Stage(); Image icon = new Image(Objects.requireNonNull(DRIFTY_ICON).toExternalForm()); @@ -82,7 +104,7 @@ public static Stage getStage(String title, boolean isPrimaryStage) { public static Scene getScene(Parent root) { Scene scene = new Scene(root); - addCSS(scene, CHECK_BOX_CSS, CONTEXT_MENU_CSS, LABEL_CSS, LIST_VIEW_CSS, MENU_CSS, PROGRESS_BAR_CSS, SCENE_CSS, SCROLL_PANE_CSS, TEXT_FIELD_CSS, V_BOX_CSS, BUTTON_CSS); + addCSS(scene, CHECK_BOX_CSS, CONTEXT_MENU_CSS, LABEL_CSS, LIST_VIEW_CSS, MENU_CSS, LIGHT_THEME_CSS, PROGRESS_BAR_CSS, SCROLL_PANE_CSS, TEXT_FIELD_CSS, V_BOX_CSS, BUTTON_CSS); return scene; } diff --git a/GUI/src/main/java/gui/utils/UIComponentBuilder.java b/GUI/src/main/java/gui/utils/UIComponentBuilder.java new file mode 100644 index 000000000..66be5f215 --- /dev/null +++ b/GUI/src/main/java/gui/utils/UIComponentBuilder.java @@ -0,0 +1,72 @@ +package gui.utils; + +import javafx.geometry.Pos; +import javafx.scene.Node; +import javafx.scene.control.Hyperlink; +import javafx.scene.control.Label; +import javafx.scene.control.TextField; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.HBox; +import javafx.scene.paint.LinearGradient; +import javafx.scene.paint.Paint; +import javafx.scene.text.Font; +import main.Drifty_GUI; + +import java.util.Objects; + +import static gui.support.Constants.MONACO_TTF; + +public class UIComponentBuilder { + private static UIComponentBuilder instance; + + public static UIComponentBuilder getInstance() { + if (instance == null) { + instance = new UIComponentBuilder(); + } + return instance; + } + + public Label buildLabel() { + Label label = new Label(""); + label.setFont(new Font(Objects.requireNonNull(MONACO_TTF).toExternalForm(), 20 * .75)); + label.prefWidth(Double.MAX_VALUE); + label.setAlignment(Pos.CENTER); + return label; + } + + public Label buildLabel(String text, Font font, Paint textFill) { + Label label = new Label(text); + label.setAlignment(Pos.TOP_CENTER); + label.setFont(font); + label.setTextFill(textFill); + return label; + } + + public HBox buildHBox(Node node) { + HBox hbox = new HBox(node); + hbox.setAlignment(Pos.CENTER); + return hbox; + } + + public ImageView buildImageView(Image image, double scale) { + ImageView imageView = new ImageView(image); + imageView.setPreserveRatio(true); + imageView.setFitWidth(image.getWidth() * scale); + return imageView; + } + + public TextField buildTextField() { + TextField tf = new TextField(""); + tf.setPrefWidth(Double.MAX_VALUE); + return tf; + } + + public Hyperlink buildHyperlink(String text, Font font, LinearGradient fill, String url) { + Hyperlink link = new Hyperlink(text); + link.setFont(font); + link.setTextFill(fill); + link.setOnAction(e -> Drifty_GUI.INSTANCE.openWebsite(url)); + return link; + } +} \ No newline at end of file diff --git a/GUI/src/main/java/main/Drifty_GUI.java b/GUI/src/main/java/main/Drifty_GUI.java index 6f6ad07d4..13402802b 100644 --- a/GUI/src/main/java/main/Drifty_GUI.java +++ b/GUI/src/main/java/main/Drifty_GUI.java @@ -6,18 +6,14 @@ import gui.utils.MessageBroker; import javafx.application.Application; import javafx.application.Preloader; -import javafx.geometry.Insets; -import javafx.geometry.Pos; import javafx.scene.Node; import javafx.scene.Scene; -import javafx.scene.control.*; -import javafx.scene.image.ImageView; +import javafx.scene.control.ContextMenu; +import javafx.scene.control.Menu; +import javafx.scene.control.MenuBar; +import javafx.scene.control.MenuItem; import javafx.scene.input.Clipboard; import javafx.scene.layout.AnchorPane; -import javafx.scene.layout.VBox; -import javafx.scene.paint.LinearGradient; -import javafx.scene.text.Font; -import javafx.scene.text.FontWeight; import javafx.stage.Stage; import properties.Mode; import ui.*; @@ -26,12 +22,14 @@ import static gui.support.Constants.GUI_APPLICATION_TERMINATED; import static javafx.scene.layout.AnchorPane.*; import static support.Constants.DRIFTY_WEBSITE_URL; -import static support.Constants.VERSION_NUMBER; public class Drifty_GUI extends Application { + public static final Drifty_GUI INSTANCE = new Drifty_GUI(); private static MessageBroker msgBroker; + private static Scene scene; + private final Settings settingsInstance = new Settings(); + private About aboutInstance; private Stage primaryStage; - private Scene scene; public static void main(String[] args) { System.setProperty("javafx.preloader", Splash.class.getCanonicalName()); @@ -65,9 +63,13 @@ private void createScene() { MenuBar menu = menuBar(getMenuItemsOfMenu(), getEditMenu(), getWindowMenu(), getHelpMenu()); ap.getChildren().add(gridPane); ap.getChildren().add(menu); + placeControl(gridPane, 40, 40, 40, 40); placeControl(menu, 0, 0, 0, -1); scene = Constants.getScene(ap); + if (AppSettings.GET.mainTheme().equals("Dark")) { + Constants.addCSS(scene, Constants.DARK_THEME_CSS); + } scene.setOnContextMenuRequested(e -> getRightClickContextMenu().show(scene.getWindow(), e.getScreenX(), e.getScreenY())); menu.setUseSystemMenuBar(true); UIController.initLogic(gridPane); @@ -116,6 +118,10 @@ private MenuBar menuBar(Menu... menus) { return new MenuBar(menus); } + public static Scene getScene() { + return scene; + } + private Menu getWindowMenu() { Menu menu = new Menu("Window"); MenuItem fullScreen = new MenuItem("Toggle Full Screen"); @@ -138,48 +144,10 @@ private Menu getHelpMenu() { securityVulnerability.setOnAction(e -> openWebsite("https://github.com/SaptarshiSarkar12/Drifty/security/advisories/new")); feature.setOnAction(e -> openWebsite("https://github.com/SaptarshiSarkar12/Drifty/issues/new?assignees=&labels=feature+%E2%9C%A8%2CApp+%F0%9F%92%BB&projects=&template=feature-request-application.yaml&title=%5BFEATURE%5D+")); about.setOnAction(event -> { - Stage stage = Constants.getStage("About Drifty", false); - VBox root = new VBox(10); - root.setPadding(new Insets(10)); - root.setAlignment(Pos.TOP_CENTER); - ImageView appIcon = new ImageView(Constants.IMG_SPLASH); - appIcon.setFitWidth(Constants.SCREEN_WIDTH * .2); - appIcon.setFitHeight(Constants.SCREEN_HEIGHT * .2); - appIcon.setPreserveRatio(true); - Label lblDescription = new Label("An Open-Source Interactive File Downloader System"); - lblDescription.setFont(Font.font("Arial", FontWeight.BOLD, 24)); - lblDescription.setTextFill(LinearGradient.valueOf("linear-gradient(to right, #8e2de2, #4a00e0)")); - Label lblDriftyVersion = new Label("Drifty " + VERSION_NUMBER); - Label lblYtDlpVersion = new Label("yt-dlp version: " + AppSettings.GET.ytDlpVersion()); - lblDriftyVersion.setFont(Font.font("Arial", FontWeight.BOLD, 20)); - lblDriftyVersion.setTextFill(LinearGradient.valueOf("linear-gradient(to right, #0f0c29, #302b63, #24243e)")); - lblYtDlpVersion.setFont(Font.font("Arial", FontWeight.BOLD, 14)); - lblYtDlpVersion.setTextFill(LinearGradient.valueOf("linear-gradient(to right, #0f0c29, #302b63, #24243e)")); - Hyperlink websiteLink = new Hyperlink("Website"); - websiteLink.setFont(Font.font("Arial", FontWeight.BOLD, 18)); - websiteLink.setTextFill(LinearGradient.valueOf("linear-gradient(to right, #fc466b, #3f5efb)")); - websiteLink.setOnAction(e -> openWebsite("https://saptarshisarkar12.github.io/Drifty")); - Hyperlink discordLink = new Hyperlink("Join Discord"); - discordLink.setFont(Font.font("Arial", FontWeight.BOLD, 18)); - discordLink.setTextFill(LinearGradient.valueOf("linear-gradient(to right, #00d956, #0575e6)")); - discordLink.setOnAction(e -> openWebsite("https://discord.gg/DeT4jXPfkG")); - Hyperlink githubLink = new Hyperlink("Contribute to Drifty"); - githubLink.setFont(Font.font("Arial", FontWeight.BOLD, 18)); - githubLink.setTextFill(LinearGradient.valueOf("linear-gradient(to right, #009fff, #ec2f4b)")); - githubLink.setOnAction(e -> openWebsite("https://github.com/SaptarshiSarkar12/Drifty")); - root.getChildren().addAll(appIcon, lblDescription, lblDriftyVersion, lblYtDlpVersion); - if (AppSettings.GET.isFfmpegWorking() && AppSettings.GET.ffmpegVersion() != null && !AppSettings.GET.ffmpegVersion().isEmpty()) { - Label lblFfmpegVersion = new Label("FFMPEG version: " + AppSettings.GET.ffmpegVersion()); - lblFfmpegVersion.setFont(Font.font("Arial", FontWeight.BOLD, 14)); - lblFfmpegVersion.setTextFill(LinearGradient.valueOf("linear-gradient(to right, #0f0c29, #302b63, #24243e)")); - root.getChildren().add(lblFfmpegVersion); + if (aboutInstance == null) { + aboutInstance = new About(); } - root.getChildren().addAll(websiteLink, discordLink, githubLink); - Scene aboutScene = Constants.getScene(root); - stage.setMinHeight(Constants.SCREEN_HEIGHT * .55); - stage.setMinWidth(Constants.SCREEN_WIDTH * .5); - stage.setScene(aboutScene); - stage.show(); + aboutInstance.show(); }); menu.getItems().setAll(contactUs, contribute, bug, securityVulnerability, feature, about); return menu; @@ -188,13 +156,15 @@ private Menu getHelpMenu() { private Menu getEditMenu() { Menu menu = new Menu("Edit"); MenuItem wipeHistory = new MenuItem("Clear Download History"); + MenuItem settings = new MenuItem("Settings"); wipeHistory.setOnAction(e -> { ConfirmationDialog ask = new ConfirmationDialog("Clear Download History", "Are you sure you wish to wipe out all of your download history?\n(This will NOT delete any downloaded files)", false); if (ask.getResponse().isYes()) { UIController.clearJobHistory(); } }); - menu.getItems().addAll(wipeHistory); + settings.setOnAction(e -> settingsInstance.show()); + menu.getItems().addAll(wipeHistory, settings); return menu; } @@ -212,7 +182,7 @@ private ContextMenu getRightClickContextMenu() { return contextMenu; } - protected void openWebsite(String websiteURL) { + public void openWebsite(String websiteURL) { getHostServices().showDocument(websiteURL); } diff --git a/GUI/src/main/java/ui/About.java b/GUI/src/main/java/ui/About.java new file mode 100644 index 000000000..2d156d84a --- /dev/null +++ b/GUI/src/main/java/ui/About.java @@ -0,0 +1,103 @@ +package ui; + +import gui.preferences.AppSettings; +import gui.support.Constants; +import javafx.geometry.Insets; +import javafx.geometry.Pos; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.control.Hyperlink; +import javafx.scene.control.Label; +import javafx.scene.image.ImageView; +import javafx.scene.layout.VBox; +import javafx.scene.paint.Color; +import javafx.scene.paint.LinearGradient; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.stage.Stage; + +import static gui.support.Constants.UI_COMPONENT_BUILDER_INSTANCE; +import static support.Constants.VERSION_NUMBER; + +public class About { + private static Scene aboutScene; + private static final ImageView IV_SPLASH = new ImageView(Constants.imgSplash); + private Label lblDescription; + private Label lblDriftyVersion; + private Label lblYtDlpVersion; + private Hyperlink websiteLink; + private Hyperlink discordLink; + private Hyperlink githubLink; + private Stage stage; + + private void setupLayout() { + VBox aboutRoot = new VBox(10); + aboutRoot.setPadding(new Insets(10)); + aboutRoot.setAlignment(Pos.TOP_CENTER); + setupImageView(); + createLabels(); + createHyperlinks(); + setupStage(); + aboutRoot.getChildren().addAll(IV_SPLASH, lblDescription, lblDriftyVersion, lblYtDlpVersion); + if (AppSettings.GET.isFfmpegWorking() && AppSettings.GET.ffmpegVersion() != null && !AppSettings.GET.ffmpegVersion().isEmpty()) { + Label lblFfmpegVersion = UI_COMPONENT_BUILDER_INSTANCE.buildLabel("FFMPEG version: " + AppSettings.GET.ffmpegVersion(), Font.font("Arial", FontWeight.BOLD, 14), LinearGradient.valueOf("linear-gradient(to right, #0f0c29, #302b63, #24243e)")); + aboutRoot.getChildren().add(lblFfmpegVersion); + } + aboutRoot.getChildren().addAll(websiteLink, discordLink, githubLink); + aboutScene = Constants.getScene(aboutRoot); + applyThemeSettings(aboutRoot); + } + + private void setupImageView() { + IV_SPLASH.setFitWidth(Constants.SCREEN_WIDTH * .2); + IV_SPLASH.setFitHeight(Constants.SCREEN_HEIGHT * .2); + IV_SPLASH.setPreserveRatio(true); + } + + private void setupStage() { + stage = Constants.getStage("About Drifty", false); + stage.setMinHeight(Constants.SCREEN_HEIGHT * .55); + stage.setMinWidth(Constants.SCREEN_WIDTH * .5); + } + + private void applyThemeSettings(VBox aboutRoot) { + if (AppSettings.GET.mainTheme().equals("Dark")) { + Constants.addCSS(aboutScene, Constants.DARK_THEME_CSS); + for (Node node : aboutRoot.getChildren()) { + if (node instanceof Label) { + ((Label) node).setTextFill(Color.WHITE); + } + } + } + } + + public void show() { + if (stage != null && stage.isShowing()) { + stage.toFront(); + } else { + setupLayout(); + stage.setScene(aboutScene); + stage.showAndWait(); + } + } + + private void createLabels() { + lblDescription = UI_COMPONENT_BUILDER_INSTANCE.buildLabel("An Open-Source Interactive File Downloader System", Font.font("Arial", FontWeight.BOLD, 24), LinearGradient.valueOf("linear-gradient(to right, #8e2de2, #4a00e0)")); + lblDriftyVersion = UI_COMPONENT_BUILDER_INSTANCE.buildLabel("Drifty " + VERSION_NUMBER, Font.font("Arial", FontWeight.BOLD, 20), LinearGradient.valueOf("linear-gradient(to right, #0f0c29, #302b63, #24243e)")); + lblYtDlpVersion = UI_COMPONENT_BUILDER_INSTANCE.buildLabel("yt-dlp version: " + AppSettings.GET.ytDlpVersion(), Font.font("Arial", FontWeight.BOLD, 14), LinearGradient.valueOf("linear-gradient(to right, #0f0c29, #302b63, #24243e)")); + } + + private void createHyperlinks() { + websiteLink = UI_COMPONENT_BUILDER_INSTANCE.buildHyperlink("Website", Font.font("Arial", FontWeight.BOLD, 18), LinearGradient.valueOf("linear-gradient(to right, #fc466b, #3f5efb)"), "https://saptarshisarkar12.github.io/Drifty"); + discordLink = UI_COMPONENT_BUILDER_INSTANCE.buildHyperlink("Join Discord", Font.font("Arial", FontWeight.BOLD, 18), LinearGradient.valueOf("linear-gradient(to right, #00d956, #0575e6)"), "https://discord.gg/DeT4jXPfkG"); + githubLink = UI_COMPONENT_BUILDER_INSTANCE.buildHyperlink("Contribute to Drifty", Font.font("Arial", FontWeight.BOLD, 18), LinearGradient.valueOf("linear-gradient(to right, #009fff, #ec2f4b)"), "https://github.com/SaptarshiSarkar12/Drifty"); + } + + public static Scene getScene() { + return aboutScene; + } + + public static ImageView getIvSplash() { + return IV_SPLASH; + } +} diff --git a/GUI/src/main/java/ui/ConfirmationDialog.java b/GUI/src/main/java/ui/ConfirmationDialog.java index a0a3c33db..52ba5589d 100644 --- a/GUI/src/main/java/ui/ConfirmationDialog.java +++ b/GUI/src/main/java/ui/ConfirmationDialog.java @@ -1,6 +1,8 @@ package ui; import gui.init.Environment; + +import gui.preferences.AppSettings; import gui.support.Constants; import javafx.application.Platform; import javafx.event.ActionEvent; @@ -24,8 +26,11 @@ enum State { YES_NO, OK, FILENAME } + private static Scene scene; private final State state; private final String lf = System.lineSeparator(); + private static Button btnNo; + private static Button btnYes; private double width = 200; private double height = 150; private Stage stage; @@ -78,7 +83,6 @@ private void finish() { private Button newButton(String text, EventHandler event) { Button button = new Button(text); - button.setFont(Constants.getMonaco(17)); button.setMinWidth(80); button.setMaxWidth(80); button.setPrefWidth(80); @@ -101,11 +105,11 @@ private void createControls() { message.setWrapText(true); message.setTextAlignment(TextAlignment.CENTER); } - Button btnYes = newButton("Yes", e -> { + btnYes = newButton("Yes", e -> { answer.setAnswer(true); stage.close(); }); - Button btnNo = newButton("No", e -> { + btnNo = newButton("No", e -> { answer.setAnswer(false); stage.close(); }); @@ -146,7 +150,14 @@ public GetConfirmationDialogResponse getResponse() { private void showScene() { stage = Constants.getStage(windowTitle, false); - Scene scene = Constants.getScene(vbox); + scene = Constants.getScene(vbox); + if (AppSettings.GET.mainTheme().equals("Dark")) { + Theme.applyTheme("Dark", scene); + Theme.changeButtonStyle(true, btnYes); + Theme.changeButtonStyle(true, btnNo); + } else { + Theme.applyTheme("Light", scene); + } stage.setWidth(width); stage.setHeight(height); stage.setScene(scene); @@ -163,4 +174,16 @@ private void showScene() { public String getFilename() { return filename; } + + static Button getBtnNo() { + return btnNo; + } + + static Scene getScene() { + return scene; + } + + static Button getBtnYes() { + return btnYes; + } } diff --git a/GUI/src/main/java/ui/MainGridPane.java b/GUI/src/main/java/ui/MainGridPane.java index 4e930ae8e..a2e47d566 100644 --- a/GUI/src/main/java/ui/MainGridPane.java +++ b/GUI/src/main/java/ui/MainGridPane.java @@ -1,10 +1,10 @@ package ui; +import gui.preferences.AppSettings; import gui.support.Constants; import javafx.application.Platform; import javafx.geometry.Insets; import javafx.geometry.Pos; -import javafx.scene.Node; import javafx.scene.control.*; import javafx.scene.image.Image; import javafx.scene.image.ImageView; @@ -12,33 +12,30 @@ import javafx.scene.layout.GridPane; import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; -import javafx.scene.text.Font; import support.Job; -import java.util.Objects; - -import static gui.support.Constants.MONACO_TTF; +import static gui.support.Constants.UI_COMPONENT_BUILDER_INSTANCE; public class MainGridPane extends GridPane { - public final ImageView ivLogo = newImageView(Constants.IMG_MAIN_GUI_BANNER, .45); + public static ImageView ivLogo = UI_COMPONENT_BUILDER_INSTANCE.buildImageView(Constants.imgMainGuiBanner, .45); public final ProgressBar pBar = pBar(); public final ListView listView = listView(); - public final ImageView ivLink = newImageView(Constants.IMG_LINK_LABEL, .7); - public final ImageView ivDir = newImageView(Constants.IMG_DIR_LABEL, .7); - public final ImageView ivFilename = newImageView(Constants.IMG_FILENAME_LABEL, .7); - public final ImageView ivAutoPaste = newImageView(Constants.IMG_AUTO_PASTE_LABEL, .7); - public final Button btnStart = newButton(Constants.IMG_START_UP, Constants.IMG_START_DOWN); - public final Button btnSave = newButton(Constants.IMG_SAVE_UP, Constants.IMG_SAVE_DOWN); + public final ImageView ivLink = UI_COMPONENT_BUILDER_INSTANCE.buildImageView(Constants.IMG_LINK_LABEL, .7); + public final ImageView ivDir = UI_COMPONENT_BUILDER_INSTANCE.buildImageView(Constants.IMG_DIR_LABEL, .7); + public final ImageView ivFilename = UI_COMPONENT_BUILDER_INSTANCE.buildImageView(Constants.IMG_FILENAME_LABEL, .7); + public final ImageView ivAutoPaste = UI_COMPONENT_BUILDER_INSTANCE.buildImageView(Constants.IMG_AUTO_PASTE_LABEL, .7); + public final Button btnStart = AppSettings.GET.mainTheme().equals("Dark") ? newButton(Constants.IMG_START_UP_DARK, Constants.IMG_START_DOWN_DARK) : newButton(Constants.IMG_START_UP_LIGHT, Constants.IMG_START_DOWN_LIGHT); + public final Button btnSave = AppSettings.GET.mainTheme().equals("Dark") ? newButton(Constants.IMG_SAVE_UP_DARK, Constants.IMG_SAVE_DOWN_DARK) : newButton(Constants.IMG_SAVE_UP_LIGHT, Constants.IMG_SAVE_DOWN_LIGHT); public final CheckBox cbAutoPaste = new CheckBox(); private final HBox boxAutoPaste = boxAutoPaste(); - private final HBox boxLogo = newHBox(ivLogo); - public final Label lblLinkOut = newLabel(); - public final Label lblDirOut = newLabel(); - public final Label lblFilenameOut = newLabel(); - public final Label lblDownloadInfo = newLabel(); - public final TextField tfLink = newTextField(); - public final TextField tfDir = newTextField(); - public final TextField tfFilename = newTextField(); + public static HBox boxLogo = UI_COMPONENT_BUILDER_INSTANCE.buildHBox(ivLogo); + public final Label lblLinkOut = UI_COMPONENT_BUILDER_INSTANCE.buildLabel(); + public final Label lblDirOut = UI_COMPONENT_BUILDER_INSTANCE.buildLabel(); + public final Label lblFilenameOut = UI_COMPONENT_BUILDER_INSTANCE.buildLabel(); + public final Label lblDownloadInfo = UI_COMPONENT_BUILDER_INSTANCE.buildLabel(); + public final TextField tfLink = UI_COMPONENT_BUILDER_INSTANCE.buildTextField(); + public final TextField tfDir = UI_COMPONENT_BUILDER_INSTANCE.buildTextField(); + public final TextField tfFilename = UI_COMPONENT_BUILDER_INSTANCE.buildTextField(); public MainGridPane() { super(); @@ -127,20 +124,6 @@ protected void updateItem(Job item, boolean empty) { return listView; } - private Label newLabel() { - Label label = new Label(""); - label.setFont(new Font(Objects.requireNonNull(MONACO_TTF).toExternalForm(), 20 * .75)); - label.setPrefWidth(Double.MAX_VALUE); - label.getStyleClass().add("outline"); - return label; - } - - private TextField newTextField() { - TextField tf = new TextField(""); - tf.setPrefWidth(Double.MAX_VALUE); - return tf; - } - private ProgressBar pBar() { ProgressBar pb = new ProgressBar(0.0); pb.setPrefWidth(Double.MAX_VALUE); @@ -148,35 +131,16 @@ private ProgressBar pBar() { return pb; } - private HBox newHBox(Node node) { - HBox box = new HBox(node); - box.setAlignment(Pos.CENTER); - return box; - } - private HBox boxAutoPaste() { HBox box = new HBox(10, ivAutoPaste, cbAutoPaste); box.setAlignment(Pos.CENTER_RIGHT); return box; } - private ImageView newImageView(Image image, double scale) { - ImageView iv = new ImageView(image); - double width = image.getWidth(); - iv.setPreserveRatio(true); - iv.setFitWidth(width * scale); - return iv; - } - private Button newButton(Image imageUp, Image imageDown) { Button button = new Button(); - ImageView imageViewUp = new ImageView(imageUp); - ImageView imageViewDn = new ImageView(imageDown); - double width = imageUp.getWidth(); - imageViewUp.setPreserveRatio(true); - imageViewUp.setFitWidth(width * 0.45); - imageViewDn.setPreserveRatio(true); - imageViewDn.setFitWidth(width * 0.45); + ImageView imageViewUp = UI_COMPONENT_BUILDER_INSTANCE.buildImageView(imageUp, 0.45); + ImageView imageViewDn = UI_COMPONENT_BUILDER_INSTANCE.buildImageView(imageDown, 0.45); button.setOnMousePressed(e -> button.setGraphic(imageViewDn)); button.setOnMouseReleased(e -> button.setGraphic(imageViewUp)); button.setGraphic(imageViewUp); diff --git a/GUI/src/main/java/ui/Settings.java b/GUI/src/main/java/ui/Settings.java new file mode 100644 index 000000000..1439b9a8e --- /dev/null +++ b/GUI/src/main/java/ui/Settings.java @@ -0,0 +1,185 @@ +package ui; + +import gui.preferences.AppSettings; +import gui.support.Constants; +import javafx.geometry.HPos; +import javafx.geometry.Insets; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.control.*; +import javafx.scene.layout.ColumnConstraints; +import javafx.scene.layout.GridPane; +import javafx.scene.layout.Priority; +import javafx.scene.paint.Color; +import javafx.scene.paint.LinearGradient; +import javafx.scene.paint.Paint; +import javafx.scene.text.Font; +import javafx.scene.text.FontWeight; +import javafx.stage.DirectoryChooser; +import javafx.stage.Stage; +import main.Drifty_GUI; + +import java.io.File; + +import static gui.support.Constants.UI_COMPONENT_BUILDER_INSTANCE; + +public class Settings { + private static Button selectDirectoryButton; + private static Scene settingsScene; + private static TextField tfCurrentDirectory; + private CheckBox autoPasteCheckbox; + private Label lblDefaultDownloadDir; + private Label lblTheme; + private Label lblSettingsHeading; + private Label lblAutoPaste; + private ChoiceBox themeChoiceBox; + private Stage stage; + private GridPane root; + + private void initializeComponents() { + initializeUIComponents(); + configureScene(); + } + + private void initializeUIComponents() { + setupThemeChoice(); + createTfDirectory(); + createLabels(); + createAutoPasteCheck(); + createDirectoryButton(); + } + + private void configureScene() { + stage = Constants.getStage("Settings", false); + stage.setMinHeight(Constants.SCREEN_HEIGHT * .55); + stage.setMinWidth(Constants.SCREEN_WIDTH * .5); + stage.setMaxHeight(Constants.SCREEN_HEIGHT * .6); + stage.setMaxWidth(Constants.SCREEN_WIDTH * .6); + configureLayout(); + settingsScene = Constants.getScene(root); + Constants.addCSS(settingsScene, Constants.LIGHT_THEME_CSS); + setInitialTheme(AppSettings.GET.mainTheme()); + } + + private void configureLayout() { + root = new GridPane(); + ColumnConstraints column1 = new ColumnConstraints(); // For the first column, it will take 50% the width of the window + column1.setPercentWidth(50); + ColumnConstraints column2 = new ColumnConstraints(); // For the second column, it will take 50% the width of the window + column2.setPercentWidth(50); + root.getColumnConstraints().addAll(column1, column2); + root.setHgap(20); + root.setVgap(10); + root.setPadding(new Insets(10, 20, 20, 20)); + addComponents(); + setHAlignments(); + setHGrowsAlways(lblSettingsHeading, lblAutoPaste, autoPasteCheckbox, lblTheme, themeChoiceBox, lblDefaultDownloadDir, tfCurrentDirectory, selectDirectoryButton); + } + + public void show() { + if (stage != null && stage.isShowing()) { + stage.toFront(); + } else { + initializeComponents(); + stage.setScene(settingsScene); + stage.showAndWait(); + } + } + + private void setHAlignments() { + GridPane.setHalignment(lblSettingsHeading, HPos.CENTER); + GridPane.setHalignment(lblAutoPaste, HPos.RIGHT); + GridPane.setHalignment(lblTheme, HPos.RIGHT); + GridPane.setHalignment(lblDefaultDownloadDir, HPos.RIGHT); + GridPane.setHalignment(selectDirectoryButton, HPos.CENTER); + } + + private void setHGrowsAlways(Node... nodes) { + for (Node node : nodes) { + GridPane.setHgrow(node, Priority.ALWAYS); + } + } + + private void addComponents() { + root.add(lblSettingsHeading, 0, 0, 2, 1); + root.add(lblAutoPaste, 0, 1); + root.add(autoPasteCheckbox, 1, 1); + root.add(lblTheme, 0, 2); + root.add(themeChoiceBox, 1, 2); + root.add(lblDefaultDownloadDir, 0, 3); + root.add(tfCurrentDirectory, 1, 3); + root.add(selectDirectoryButton, 1, 4, 2, 1); + } + + private void setInitialTheme(String theme) { + boolean isDark = theme.equals("Dark"); + Constants.addCSS(settingsScene, isDark ? Constants.DARK_THEME_CSS : Constants.LIGHT_THEME_CSS); + applyStyleToLabels(isDark, lblTheme, lblAutoPaste, lblDefaultDownloadDir, lblSettingsHeading); + tfCurrentDirectory.setStyle("-fx-text-fill: " + (isDark ? "white" : "black") + " ; -fx-font-weight: Bold"); + } + + private void applyStyleToLabels(boolean isDark, Label... labels) { + Color darkThemeTextFill = Color.WHITE; + LinearGradient lightThemeTextFill = LinearGradient.valueOf("linear-gradient(to right, #0f0c29, #302b63, #24243e)"); + for (Label label : labels) { + label.setTextFill(isDark ? darkThemeTextFill : lightThemeTextFill); + } + } + + private void setupThemeChoice() { + themeChoiceBox = new ChoiceBox<>(); + themeChoiceBox.getItems().addAll("Dark Theme", "Light Theme"); + themeChoiceBox.setValue(AppSettings.GET.mainTheme().equals("Dark") ? "Dark Theme" : "Light Theme"); + themeChoiceBox.setOnAction(e -> Theme.applyTheme(themeChoiceBox.getValue().equals("Dark Theme") ? "Dark" : "Light", settingsScene, Drifty_GUI.getScene(), About.getScene(), UIController.getInfoScene(), ConfirmationDialog.getScene())); + } + + private void createAutoPasteCheck() { + autoPasteCheckbox = new CheckBox(); + autoPasteCheckbox.setSelected(AppSettings.GET.mainAutoPaste()); + autoPasteCheckbox.setMaxWidth(5.0); + autoPasteCheckbox.selectedProperty().addListener(((observable, oldValue, newValue) -> AppSettings.SET.mainAutoPaste(newValue))); + } + + private void createLabels() { + Paint textFill = LinearGradient.valueOf("linear-gradient(to right, #0f0c29, #302b63, #24243e)"); + lblSettingsHeading = UI_COMPONENT_BUILDER_INSTANCE.buildLabel("Settings", Font.font("monospace", FontWeight.EXTRA_BOLD, 100), textFill); + lblAutoPaste = UI_COMPONENT_BUILDER_INSTANCE.buildLabel("Auto-Paste", Font.font("Arial", FontWeight.EXTRA_BOLD, 20), textFill); + lblTheme = UI_COMPONENT_BUILDER_INSTANCE.buildLabel("Theme", Font.font("Arial", FontWeight.EXTRA_BOLD, 20), textFill); + lblDefaultDownloadDir = UI_COMPONENT_BUILDER_INSTANCE.buildLabel("Default Download Directory", Font.font("Arial", FontWeight.BOLD, 20), textFill); + } + + private void createTfDirectory() { + tfCurrentDirectory = new TextField(UIController.form.tfDir.getText()); + tfCurrentDirectory.setMaxWidth(Double.MAX_VALUE); + tfCurrentDirectory.setEditable(false); + } + + private void createDirectoryButton() { + selectDirectoryButton = new Button("Select Directory"); + if (AppSettings.GET.mainTheme().equals("Dark")) { + selectDirectoryButton.setStyle(Constants.BUTTON_RELEASED); + selectDirectoryButton.setOnMousePressed(e -> selectDirectoryButton.setStyle(Constants.BUTTON_PRESSED)); + selectDirectoryButton.setOnMouseReleased(e -> selectDirectoryButton.setStyle(Constants.BUTTON_RELEASED)); + } else { + selectDirectoryButton.getStyleClass().add("button"); + } + selectDirectoryButton.setOnAction(e -> handleDirectorySelection()); + } + + private void handleDirectorySelection() { + DirectoryChooser chooser = new DirectoryChooser(); + chooser.setInitialDirectory(new File(System.getProperty("user.home"))); + File selectedDirectory = chooser.showDialog(this.stage); + String directoryPath = (selectedDirectory != null ? selectedDirectory.getAbsolutePath() : AppSettings.GET.lastDownloadFolder()); + UIController.form.tfDir.setText(directoryPath); + tfCurrentDirectory.setText(directoryPath); + } + + public static TextField getTfCurrentDirectory() { + return tfCurrentDirectory; + } + + public static Button getSelectDirectoryButton() { + return selectDirectoryButton; + } +} diff --git a/GUI/src/main/java/ui/Theme.java b/GUI/src/main/java/ui/Theme.java new file mode 100644 index 000000000..7b5240f0d --- /dev/null +++ b/GUI/src/main/java/ui/Theme.java @@ -0,0 +1,134 @@ +package ui; + +import gui.preferences.AppSettings; +import gui.support.Constants; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.paint.Color; +import javafx.scene.paint.LinearGradient; +import javafx.scene.paint.Paint; +import javafx.scene.text.Text; + +import java.util.Objects; + +import static gui.support.Constants.UI_COMPONENT_BUILDER_INSTANCE; + +public class Theme { + public static void applyTheme(String theme, Scene... scenes) { + boolean isDark = theme.equals("Dark"); + AppSettings.SET.mainTheme(theme); + updateCSS(isDark, scenes); + updateTextColors(isDark, scenes); + changeImages(theme); + updateButtonStyles(isDark, theme); + } + + private static void setupButton(Image imageUp, Image imageDown, Button button) { + ImageView imageViewUp = UI_COMPONENT_BUILDER_INSTANCE.buildImageView(imageUp, 0.45); + ImageView imageViewDown = UI_COMPONENT_BUILDER_INSTANCE.buildImageView(imageDown, 0.45); + button.setOnMousePressed(ev -> button.setGraphic(imageViewDown)); + button.setOnMouseReleased(ev -> button.setGraphic(imageViewUp)); + button.setGraphic(imageViewUp); + } + + private static void setupButtonGraphics(String theme) { + Image imageStartUp = getImageForButton(theme, "Start", "StartUp"); + Image imageStartDown = getImageForButton(theme, "Start", "StartDown"); + setupButton(imageStartUp, imageStartDown, UIController.form.btnStart); + + Image imageSaveUp = getImageForButton(theme, "Save", "SaveUp"); + Image imageSaveDown = getImageForButton(theme, "Save", "SaveDown"); + setupButton(imageSaveUp, imageSaveDown, UIController.form.btnSave); + } + + private static Image getImageForButton(String theme, String buttonCategory, String buttonType) { + String imagePath = "/Buttons/" + buttonCategory + "/" + buttonType + theme + ".png"; + return new Image(Objects.requireNonNull(Constants.class.getResource(imagePath)).toExternalForm()); + } + + private static void changeImages(String theme) { + String bannerPath = "/Backgrounds/DriftyMain" + theme + ".png"; + String splashPath = "/Splash" + theme + ".png"; + Constants.imgMainGuiBanner = new Image(Objects.requireNonNull(Constants.class.getResource(bannerPath)).toExternalForm()); + MainGridPane.ivLogo.setImage(Constants.imgMainGuiBanner); + Constants.imgSplash = new Image(Objects.requireNonNull(Constants.class.getResource(splashPath)).toExternalForm()); + About.getIvSplash().setImage(Constants.imgSplash); + } + + private static void updateTextColors(boolean isDark, Scene... scenes) { + // Labels + Paint color = isDark ? Color.WHITE : LinearGradient.valueOf("linear-gradient(to right, #0f0c29, #302b63, #24243e)"); + for (Scene scene : scenes) { + if (scene != null) { + for (Node node : scene.getRoot().getChildrenUnmodifiable()) { + if (node instanceof Label) { + ((Label) node).setTextFill(color); + } else if (node instanceof Text) { + ((Text) node).setFill(color); + } + } + } + } + changeInfoTextFlow(color); + // TextFields + String style = isDark ? "-fx-text-fill: White;" : "-fx-text-fill: Black;"; + UIController.form.tfDir.setStyle(style); + UIController.form.tfFilename.setStyle(style); + UIController.form.tfLink.setStyle(style); + if (Settings.getTfCurrentDirectory() != null) { + Settings.getTfCurrentDirectory().setStyle(style + "-fx-font-weight: Bold"); + } + } + + private static void changeInfoTextFlow(Paint color) { + Color headingsColor = AppSettings.GET.mainTheme().equals("Dark") ? Color.LIGHTGREEN : Color.DARKBLUE; + for (int i = 0; i < UIController.getInfoTf().getChildren().size(); i++) { + if (UIController.getInfoTf().getChildren().get(i) instanceof Text) { + Text text = (Text) UIController.getInfoTf().getChildren().get(i); + if (text.getFont().getSize() == 16) { + ((Text) UIController.getInfoTf().getChildren().get(i)).setFill(color); + } else { + ((Text) UIController.getInfoTf().getChildren().get(i)).setFill(headingsColor); + + } + } + } + } + + private static void updateButtonStyles(boolean isDark, String theme) { + changeButtonStyle(isDark, Settings.getSelectDirectoryButton()); + changeButtonStyle(isDark, ConfirmationDialog.getBtnYes()); + changeButtonStyle(isDark, ConfirmationDialog.getBtnNo()); + setupButtonGraphics(theme); + } + + static void changeButtonStyle(boolean isDark, Button button) { + if (button != null) { + if (isDark) { + button.setStyle(Constants.BUTTON_RELEASED); + button.setOnMousePressed(ev -> button.setStyle(Constants.BUTTON_PRESSED)); + button.setOnMouseReleased(ev -> button.setStyle(Constants.BUTTON_RELEASED)); + } else { + String style = "-fx-text-fill: Black;"; + String backColorReleased = "-fx-background-color: linear-gradient(rgb(54,151,225) 18%, rgb(121,218,232) 90%, rgb(126,223,255) 95%);"; + String backColorPressed = "-fx-background-color: linear-gradient(rgb(126,223,255) 20%, rgb(121,218,232) 20%, rgb(54,151,225) 100%);"; + button.setStyle(style + backColorReleased); + button.setOnMousePressed(ev -> button.setStyle(style + backColorPressed)); + button.setOnMouseReleased(ev -> button.setStyle(style + backColorReleased)); + } + } + } + + private static void updateCSS(boolean isDark, Scene... scenes) { + for (Scene scene : scenes) { + if (scene != null) { + Constants.addCSS(scene, isDark ? Constants.DARK_THEME_CSS : Constants.LIGHT_THEME_CSS); + scene.getStylesheets().remove(isDark ? Objects.requireNonNull(Constants.LIGHT_THEME_CSS).toExternalForm() : Objects.requireNonNull(Constants.DARK_THEME_CSS).toExternalForm()); + } + } + } +} \ No newline at end of file diff --git a/GUI/src/main/java/ui/UIController.java b/GUI/src/main/java/ui/UIController.java index d4bf73bca..e9dccc1b8 100644 --- a/GUI/src/main/java/ui/UIController.java +++ b/GUI/src/main/java/ui/UIController.java @@ -42,10 +42,8 @@ import java.util.concurrent.ConcurrentLinkedDeque; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.stream.Collectors; import static gui.support.Colors.*; -import static gui.support.Constants.MONACO_TTF; import static utils.Utility.*; public final class UIController { @@ -59,15 +57,25 @@ public final class UIController { private final String nl = System.lineSeparator(); private int speedValueUpdateCount; private int speedValue; + private static final TextFlow INFO_TF = new TextFlow(); + private static Scene infoScene; private String songMetadataJson; private String filename; private String songLink; private Folders folders; private Job selectedJob; + public static Scene getInfoScene() { + return infoScene; + } + + public static TextFlow getInfoTf() { + return INFO_TF; + } + /* - Single instance model only constructor - */ + Single instance model-only constructor + */ private UIController() { folders = AppSettings.GET.folders(); } @@ -89,15 +97,19 @@ private void setControlProperties() { BooleanBinding disableStartButton = form.listView.itemsProperty().isNotNull().not().or(PROCESSING_BATCH).or(DIRECTORY_EXISTS.not()).or(VERIFYING_LINKS); BooleanBinding disableInputs = PROCESSING_BATCH.or(VERIFYING_LINKS); - form.btnSave.visibleProperty().bind(UPDATING_BATCH); form.btnStart.disableProperty().bind(disableStartButton); form.tfDir.disableProperty().bind(disableInputs); form.tfFilename.disableProperty().bind(disableInputs); form.tfLink.disableProperty().bind(disableInputs); - form.listView.setContextMenu(getListMenu()); + if (AppSettings.GET.mainTheme().equals("Dark")) { + form.tfDir.setStyle("-fx-text-fill: White;"); + form.tfFilename.setStyle("-fx-text-fill: White;"); + form.tfLink.setStyle("-fx-text-fill: White;"); + } + Tooltip.install(form.cbAutoPaste, new Tooltip("When checked, will paste contents of clipboard into" + nl + "Link field when switching back to this screen.")); Tooltip.install(form.tfLink, new Tooltip("URL must be a valid URL without spaces." + nl + " Add multiple URLs by pasting them in from the clipboard and separating each URL with a space.")); Tooltip.install(form.tfFilename, new Tooltip("If the filename you enter already exists in the download folder, it will" + nl + "automatically be renamed to avoid file over-writes.")); @@ -110,7 +122,6 @@ private void setControlProperties() { selectJob(job); }); form.cbAutoPaste.setSelected(AppSettings.GET.mainAutoPaste()); - form.cbAutoPaste.selectedProperty().addListener(((observable, oldValue, newValue) -> AppSettings.SET.mainAutoPaste(newValue))); form.tfDir.textProperty().addListener(((observable, oldValue, newValue) -> { if (!newValue.equals(oldValue)) { DIRECTORY_EXISTS.setValue(false); @@ -280,13 +291,10 @@ private Runnable verifyLink(String link) { String folder = fileExists(filename); String windowTitle; if (!folder.isEmpty()) { - message = intro + "And the file exists in this download folder:" + nl + folder + nl.repeat(2) + - "If you wish to download it again, it will be given the name shown below, or you can change it as you wish." + nl.repeat(2) + - "YES will add the job to the list with new filename. NO will do nothing."; + message = intro + "The file already exists in the selected download folder:" + nl + folder + nl.repeat(2) + "Choose 'YES' to download and automatically rename the file to avoid overwriting the existing one. Alternatively, you can manually change the filename below to your preference." + nl.repeat(2) + "Choose 'NO' if you do not wish to download the file again."; windowTitle = "File Already Exists"; } else { - message = intro + "However, the file does not exist in any of your download folders." + nl.repeat(2) + - "Do you still wish to download this file?"; + message = intro + "The file does not exist in any of your designated download folders." + nl.repeat(2) + "This is a good opportunity to download it without concerns of duplicating existing files. Click 'YES' to proceed with the download, or 'NO' if you decide not to download."; windowTitle = "File Already Downloaded"; } ConfirmationDialog ask = new ConfirmationDialog(windowTitle, message, renameFile(filename, dir)); @@ -490,12 +498,8 @@ private void updateBatch() { private void checkHistoryAddJobs(Worker> worker) { String pastJobNoFile = "You have downloaded %s in the past, but the file does not exist in your download folder." + nl.repeat(2) + " Click Yes if you still wish to download this file. Otherwise, click No."; - String pastJobFileExists = "You have downloaded %s in the past, and the file exists in your download folder." + nl.repeat(2) + - "It will be renamed as shown here, or you may change the filename to your liking." + nl.repeat(2) + - "Clicking Yes will commit the job with the shown filename, while clicking No will not add this file to the job list."; - String fileExistsString = "This file:" + nl.repeat(2) + "%s" + nl.repeat(2) + "Exists in in the download folder." + nl.repeat(2) + - "It will be renamed as shown here, or you may change the filename to your liking." + nl.repeat(2) + - "Clicking Yes will commit the job with the shown filename, while clicking No will not add this file to the job list."; + String pastJobFileExists = "You have downloaded %s in the past, and the file exists in your download folder." + nl.repeat(2) + "It will be renamed as shown here, or you may change the filename to your liking." + nl.repeat(2) + "Clicking Yes will commit the job with the shown filename, while clicking No will not add this file to the job list."; + String fileExistsString = "This file:" + nl.repeat(2) + "%s" + nl.repeat(2) + "Exists in in the download folder." + nl.repeat(2) + "It will be renamed as shown here, or you may change the filename to your liking." + nl.repeat(2) + "Clicking Yes will commit the job with the shown filename, while clicking No will not add this file to the job list."; Platform.runLater(() -> { String message; ConfirmationDialog ask = new ConfirmationDialog("", ""); @@ -571,6 +575,7 @@ private ContextMenu getListMenu() { clearLink(); clearFilename(); form.listView.getItems().clear(); + form.listView.getItems(); M.msgLinkInfo(""); M.msgFilenameInfo(""); M.msgDirInfo(""); @@ -765,18 +770,10 @@ private void commitJobListToListView() { if (getJobs().isEmpty()) { form.listView.getItems().clear(); } else { - // Remove duplicate jobs if any - Set encounteredLinks = new HashSet<>(); - ConcurrentLinkedDeque duplicates = getJobs().jobList().stream() - .filter(job -> !encounteredLinks.add(job.getLink())) - .collect(Collectors.toCollection(ConcurrentLinkedDeque::new)); - for (Job job : duplicates) { - removeJobFromList(job); - } - // Sort the Job list - ArrayList sortList = new ArrayList<>(getJobs().jobList()); - sortList.sort(Comparator.comparing(Job::toString)); - getJobs().setList(new ConcurrentLinkedDeque<>(sortList)); + // Use TreeSet to remove duplicates and sort simultaneously + Set sortedJobs = new TreeSet<>(Comparator.comparing(Job::toString)); + sortedJobs.addAll(getJobs().jobList()); + getJobs().setList(new ConcurrentLinkedDeque<>(sortedJobs)); } // Assign the jobList to the ListView form.listView.getItems().setAll(getJobs().jobList()); @@ -785,32 +782,33 @@ private void commitJobListToListView() { } private void help() { + Color textColor = AppSettings.GET.mainTheme().equals("Dark") ? Color.WHITE : Color.BLACK; + Color headingsColor = AppSettings.GET.mainTheme().equals("Dark") ? Color.LIGHTGREEN : Color.DARKBLUE; double h = 20; double n = 16; - TextFlow tf = new TextFlow(); - tf.getChildren().add(text("Link:\n", true, BLUE, h)); - tf.getChildren().add(text("The Drifty GUI lets you easily create batches for downloading, or download a single file. You start by pasting your web links into the Link field. Once a link has been put into Link field, Drifty will start to process it where it will attempt to determine the name of the file being downloaded. Once it has done that, you will see the filename show up in the batch list on the left.\n\n", false, BLACK, n)); - tf.getChildren().add(text("The URLs you paste into the link field must be valid URLs or Drifty wont process them.\n\n", false, BLACK, n)); - tf.getChildren().add(text("Checking the ", false, BLACK, n)); - tf.getChildren().add(text("Auto Paste ", true, BLACK, n)); - tf.getChildren().add(text("option will let you go to another window and put a link in the clipboard then when you come back to Drifty, the link will be pasted into the Link field automatically and processed then added to the batch list.\n\n", false, BLACK, n)); - tf.getChildren().add(text("If you paste in a link that happens to extract multiple files for downloading, such as a Youtube play list, Drifty will first attempt to get the number of files in the list, then it will ask you if you would like it to obtain all of the filenames in the list. The progress bar will indicate how many filenames have been obtained and the batch list will populate with download jobs with each new filename discovered.\n\n", false, BLACK, n)); - tf.getChildren().add(text("Directory:\n", true, BLUE, h)); - tf.getChildren().add(text("Right clicking anywhere on the form brings up a menu where you can add directories to use as download folders. As you add more directories, they accumulate and persist between reloads. The last directory that you add last will be considered the current download directory. When you click start which begins the download process for all jobs in the batch list, Drifty will look through all of the added folders for a matching filenames and it will let you know when it finds duplicates and give you the option to not download them again.\n\n", false, BLACK, n)); - tf.getChildren().add(text("Right clicking on the form and choosing to edit the directory list pulls up a form with all of the directories you have added. Click on one to remove it if necessary.\n\n", false, BLACK, n)); - tf.getChildren().add(text("Filename:\n", true, BLUE, h)); - tf.getChildren().add(text("Drifty tries to get the name of the file from the link. This process can take a little time but not usually more than 10 to 20 seconds. By default, Drifty adds the extension of 'mp4' to video file downloads because these have the highest chance of success. If Drifty cannot determine the name of the file, you can type in whatever filename you'd like, then click on Save to commit that to the job in the list. You can also determine the download format of the file by setting the filename extension to one of these options: 3gp, aac, flv, m4a, mp3, mp4, ogg, wav, webm.\n\n", false, BLACK, n)); - tf.getChildren().add(text("Job list:\n", true, BLUE, h)); - tf.getChildren().add(text("Once the list box on the left has the jobs in it that you want, you can click on each one in turn and the link, download directory and filename will be placed into the related fields so you can edit them if you need to. Just click on Save when you're done editing.\n\n", false, BLACK, n)); - tf.getChildren().add(text("You can right click on any item in the list to remove it or clear out the job list completely.\n\n", false, BLACK, n)); - tf.getChildren().add(text("The Job list and the directory list will persist between program reloads. The job list will empty out one at a time as each file in the list is downloaded. You start the batch by clicking on the Start button. Any files that fail to download will get recycled back into the list on this form. I found that they will download usually after a second attempt.\n\n", false, BLACK, n)); - tf.getChildren().add(text("Auto Paste:\n", true, BLUE, h)); - tf.getChildren().add(text("The whole point of Auto Paste is to help speed things up. When you check the box, then go out to your browser and find links that you want to download, just copy them into your clip board then ALT+TAB back to Drifty or just click on it to make it the active window. Drifty will sense that it has been made the active screen and the contents of your clipboard will be analyzed to make sure it is a valid URL, then it will process it if so.\n\n", false, BLACK, n)); - tf.getChildren().add(text("Multi-link pasting:\n", true, BLUE, h)); - tf.getChildren().add(text("Another way to speed things up it to copy and paste links into a notepad of some kind, then just put a single space between each link so that all the links are on a single line, then paste that line into the Link field and Drifty will start processing them in turn and build up your batch for you.\n\n", false, BLACK, n)); - tf.getChildren().add(text("Youtube Playlists:\n", true, BLUE, h)); - tf.getChildren().add(text("Another thing you can do is grab a YouTube playlist and Drifty will extract all of the videos from the playlist and build a batch from the list (or add to your existing batch).\n\n", false, BLACK, n)); - tf.setStyle("-fx-background-color: transparent"); + INFO_TF.getChildren().add(text("Link:\n", true, headingsColor, h)); + INFO_TF.getChildren().add(text("The Drifty GUI lets you easily create batches for downloading, or download a single file. You start by pasting your web links into the Link field. Once a link has been put into Link field, Drifty will start to process it where it will attempt to determine the name of the file being downloaded. Once it has done that, you will see the filename show up in the batch list on the left.\n\n", false, textColor, n)); + INFO_TF.getChildren().add(text("The URLs you paste into the link field must be valid URLs or Drifty wont process them.\n\n", false, textColor, n)); + INFO_TF.getChildren().add(text("Checking the ", false, textColor, n)); + INFO_TF.getChildren().add(text("Auto Paste ", true, textColor, n)); + INFO_TF.getChildren().add(text("option will let you go to another window and put a link in the clipboard then when you come back to Drifty, the link will be pasted into the Link field automatically and processed then added to the batch list.\n\n", false, textColor, n)); + INFO_TF.getChildren().add(text("If you paste in a link that happens to extract multiple files for downloading, such as a Youtube play list, Drifty will first attempt to get the number of files in the list, then it will ask you if you would like it to obtain all of the filenames in the list. The progress bar will indicate how many filenames have been obtained and the batch list will populate with download jobs with each new filename discovered.\n\n", false, textColor, n)); + INFO_TF.getChildren().add(text("Directory:\n", true, headingsColor, h)); + INFO_TF.getChildren().add(text("Right clicking anywhere on the form brings up a menu where you can add directories to use as download folders. As you add more directories, they accumulate and persist between reloads. The last directory that you add last will be considered the current download directory. When you click start which begins the download process for all jobs in the batch list, Drifty will look through all of the added folders for a matching filenames and it will let you know when it finds duplicates and give you the option to not download them again.\n\n", false, textColor, n)); + INFO_TF.getChildren().add(text("Right clicking on the form and choosing to edit the directory list pulls up a form with all of the directories you have added. Click on one to remove it if necessary.\n\n", false, textColor, n)); + INFO_TF.getChildren().add(text("Filename:\n", true, headingsColor, h)); + INFO_TF.getChildren().add(text("Drifty tries to get the name of the file from the link. This process can take a little time but not usually more than 10 to 20 seconds. By default, Drifty adds the extension of 'mp4' to video file downloads because these have the highest chance of success. If Drifty cannot determine the name of the file, you can type in whatever filename you'd like, then click on Save to commit that to the job in the list. You can also determine the download format of the file by setting the filename extension to one of these options: 3gp, aac, flv, m4a, mp3, mp4, ogg, wav, webm.\n\n", false, textColor, n)); + INFO_TF.getChildren().add(text("Job list:\n", true, headingsColor, h)); + INFO_TF.getChildren().add(text("Once the list box on the left has the jobs in it that you want, you can click on each one in turn and the link, download directory and filename will be placed into the related fields so you can edit them if you need to. Just click on Save when you're done editing.\n\n", false, textColor, n)); + INFO_TF.getChildren().add(text("You can right click on any item in the list to remove it or clear out the job list completely.\n\n", false, textColor, n)); + INFO_TF.getChildren().add(text("The Job list and the directory list will persist between program reloads. The job list will empty out one at a time as each file in the list is downloaded. You start the batch by clicking on the Start button. Any files that fail to download will get recycled back into the list on this form. I found that they will download usually after a second attempt.\n\n", false, textColor, n)); + INFO_TF.getChildren().add(text("Auto Paste:\n", true, headingsColor, h)); + INFO_TF.getChildren().add(text("The whole point of Auto Paste is to help speed things up. When you check the box, then go out to your browser and find links that you want to download, just copy them into your clip board then ALT+TAB back to Drifty or just click on it to make it the active window. Drifty will sense that it has been made the active screen and the contents of your clipboard will be analyzed to make sure it is a valid URL, then it will process it if so.\n\n", false, textColor, n)); + INFO_TF.getChildren().add(text("Multi-link pasting:\n", true, headingsColor, h)); + INFO_TF.getChildren().add(text("Another way to speed things up it to copy and paste links into a notepad of some kind, then just put a single space between each link so that all the links are on a single line, then paste that line into the Link field and Drifty will start processing them in turn and build up your batch for you.\n\n", false, textColor, n)); + INFO_TF.getChildren().add(text("Youtube Playlists:\n", true, headingsColor, h)); + INFO_TF.getChildren().add(text("Another thing you can do is grab a YouTube playlist and Drifty will extract all of the videos from the playlist and build a batch from the list (or add to your existing batch).\n\n", false, textColor, n)); + INFO_TF.setStyle("-fx-background-color: transparent"); double width = 500; double height = 700; @@ -818,7 +816,7 @@ private void help() { Stage stage = Constants.getStage("Help", false); stage.setWidth(width); stage.setHeight(height + 100); - VBox vox = new VBox(20, tf); + VBox vox = new VBox(20, INFO_TF); vox.setPrefWidth(width - 35); vox.setPrefHeight(height - 75); vox.setPadding(new Insets(30)); @@ -830,14 +828,18 @@ private void help() { scrollPane.setPrefWidth(width); scrollPane.setPrefHeight(height); scrollPane.setFitToWidth(true); - Scene scene = Constants.getScene(scrollPane); - scene.setFill(Color.TRANSPARENT); - stage.setScene(scene); + infoScene = Constants.getScene(scrollPane); + if (AppSettings.GET.mainTheme().equals("Dark")) { + Theme.applyTheme("Dark", infoScene); + } + + infoScene.setFill(Color.TRANSPARENT); + stage.setScene(infoScene); stage.setAlwaysOnTop(true); stage.setTitle("Help"); stage.setOnCloseRequest(e -> stage.close()); VBox.setVgrow(vox, Priority.ALWAYS); - VBox.setVgrow(tf, Priority.ALWAYS); + VBox.setVgrow(INFO_TF, Priority.ALWAYS); btnOK.setOnAction(e -> stage.close()); scrollPane.setVvalue(0.0); stage.showAndWait(); @@ -846,7 +848,7 @@ private void help() { private Text text(String string, boolean bold, Color color, double size) { // This is used by the help() method for custom text formatting Text text = new Text(string); - text.setFont(new Font(Objects.requireNonNull(MONACO_TTF).toExternalForm(), size)); + text.setFont(new Font("monospace", size)); text.setFill(color); if (bold) { text.setStyle("-fx-font-weight: bold;"); diff --git a/GUI/src/main/resources/Backgrounds/DriftyMainDark.png b/GUI/src/main/resources/Backgrounds/DriftyMainDark.png new file mode 100644 index 0000000000000000000000000000000000000000..dc124f59d0c1036df8c86b696fb51dde3be89d4e GIT binary patch literal 67874 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̷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 YOEn#|R{G?(mjMVoUHx3vIVCg!0IbLNR{#J2 literal 0 HcmV?d00001 diff --git a/GUI/src/main/resources/Backgrounds/DriftyMain.png b/GUI/src/main/resources/Backgrounds/DriftyMainLight.png similarity index 100% rename from GUI/src/main/resources/Backgrounds/DriftyMain.png rename to GUI/src/main/resources/Backgrounds/DriftyMainLight.png diff --git a/GUI/src/main/resources/Buttons/Save/SaveDownDark.png b/GUI/src/main/resources/Buttons/Save/SaveDownDark.png new file mode 100644 index 0000000000000000000000000000000000000000..bd175531b89e359a99d84c203c0685bd3718b8b0 GIT binary patch literal 19080 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 literal 0 HcmV?d00001 diff --git a/GUI/src/main/resources/Buttons/Save/SaveDown.png b/GUI/src/main/resources/Buttons/Save/SaveDownLight.png similarity index 100% rename from GUI/src/main/resources/Buttons/Save/SaveDown.png rename to GUI/src/main/resources/Buttons/Save/SaveDownLight.png diff --git a/GUI/src/main/resources/Buttons/Save/SaveUpDark.png b/GUI/src/main/resources/Buttons/Save/SaveUpDark.png new file mode 100644 index 0000000000000000000000000000000000000000..2571866d0d3fd7fa7f918ba3e482ea28a0fae3ef GIT binary patch literal 22266 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 OY+X$wjRrNxsQ&}xtDph^ literal 0 HcmV?d00001 diff --git a/GUI/src/main/resources/Buttons/Start/StartUp.png b/GUI/src/main/resources/Buttons/Start/StartUpLight.png similarity index 100% rename from GUI/src/main/resources/Buttons/Start/StartUp.png rename to GUI/src/main/resources/Buttons/Start/StartUpLight.png diff --git a/GUI/src/main/resources/CSS/Button.css b/GUI/src/main/resources/CSS/Button.css index ccd49f6f3..77c05bb45 100644 --- a/GUI/src/main/resources/CSS/Button.css +++ b/GUI/src/main/resources/CSS/Button.css @@ -1,11 +1,12 @@ .button { -fx-background-color: linear-gradient(rgb(54,151,225) 18%, rgb(121,218,232) 90%, rgb(126,223,255) 95%); -fx-border-color: black; + -fx-font-weight: Bold; } .button:pressed { -fx-background-color: linear-gradient(rgb(126,223,255) 20%, rgb(121,218,232) 20%, rgb(54,151,225) 100%); - + -fx-font-weight: Bold; } .glassButton { diff --git a/GUI/src/main/resources/CSS/DarkTheme.css b/GUI/src/main/resources/CSS/DarkTheme.css new file mode 100644 index 000000000..0d2fe025a --- /dev/null +++ b/GUI/src/main/resources/CSS/DarkTheme.css @@ -0,0 +1,33 @@ +.root { + -fx-background-color: linear-gradient(rgb(0, 53, 105) 20%, rgb(26, 21, 129) 65%, rgb(0, 0, 65) 100%); + /*-fx-background-color: linear-gradient(rgba(54,151,225,1) 18%, rgba(121,218,232,1) 90%, rgba(126,223,255,1) 95%);*/ +} +.list-cell { + -fx-background-color: transparent; + -fx-text-fill: rgb(255, 255, 255); +} +.progress-bar .bar { + -fx-background-color: #17e500; + -fx-border-color: black; + -fx-border-width: 1.5px; +} +.normalLabel { + -fx-font-family: Arial; + -fx-font-weight: bold; + -fx-font-size: 20; + -fx-text-fill: ghostwhite +} +.check-box { + -fx-background-color: #22ff00; + -fx-border-width:2px; + -fx-padding: 0px; + -fx-font-size: 20; +} +.check-box:selected .box{ + -fx-background-color: #22ff00; +} +.check-box:selected .box .mark{ + -fx-background-color: white; + -fx-border-color: black; + -fx-border-width: 1px; +} diff --git a/GUI/src/main/resources/CSS/Scene.css b/GUI/src/main/resources/CSS/LightTheme.css similarity index 51% rename from GUI/src/main/resources/CSS/Scene.css rename to GUI/src/main/resources/CSS/LightTheme.css index fea1d934b..497a8a70e 100644 --- a/GUI/src/main/resources/CSS/Scene.css +++ b/GUI/src/main/resources/CSS/LightTheme.css @@ -1,4 +1,4 @@ .root { - /*-fx-background-color: linear-gradient(rgb(179, 182, 182) 20%, rgb(125, 130, 130) 65%, rgb(102, 106, 106) 100%);*/ + /*-fx-background-color: linear-gradient(rgb(0, 53, 105) 20%, rgb(26, 21, 129) 65%, rgb(0, 0, 65) 100%);*/ -fx-background-color: linear-gradient(rgba(54,151,225,1) 18%, rgba(121,218,232,1) 90%, rgba(126,223,255,1) 95%); } diff --git a/GUI/src/main/resources/META-INF/native-image/jni-config.json b/GUI/src/main/resources/META-INF/native-image/jni-config.json index 354fa6135..ebcad8ace 100644 --- a/GUI/src/main/resources/META-INF/native-image/jni-config.json +++ b/GUI/src/main/resources/META-INF/native-image/jni-config.json @@ -64,10 +64,18 @@ "name":"com.sun.javafx.geom.Path2D", "methods":[{"name":"","parameterTypes":["int","byte[]","int","float[]","int"] }] }, +{ + "name":"java.lang.Boolean", + "fields":[{"name":"FALSE"}, {"name":"TRUE"}] +}, { "name":"java.lang.Iterable", "methods":[{"name":"iterator","parameterTypes":[] }] }, +{ + "name":"java.lang.Object", + "methods":[{"name":"equals","parameterTypes":["java.lang.Object"] }] +}, { "name":"java.lang.Runnable", "methods":[{"name":"run","parameterTypes":[] }] @@ -84,9 +92,13 @@ "name":"java.util.ArrayList", "methods":[{"name":"","parameterTypes":[] }, {"name":"","parameterTypes":["int"] }, {"name":"add","parameterTypes":["java.lang.Object"] }, {"name":"get","parameterTypes":["int"] }] }, +{ + "name":"java.util.Collections", + "methods":[{"name":"unmodifiableMap","parameterTypes":["java.util.Map"] }] +}, { "name":"java.util.HashMap", - "methods":[{"name":"containsKey","parameterTypes":["java.lang.Object"] }, {"name":"get","parameterTypes":["java.lang.Object"] }, {"name":"put","parameterTypes":["java.lang.Object","java.lang.Object"] }] + "methods":[{"name":"","parameterTypes":[] }, {"name":"containsKey","parameterTypes":["java.lang.Object"] }, {"name":"get","parameterTypes":["java.lang.Object"] }, {"name":"put","parameterTypes":["java.lang.Object","java.lang.Object"] }] }, { "name":"java.util.HashSet", @@ -98,10 +110,14 @@ }, { "name":"java.util.Map", - "methods":[{"name":"containsKey","parameterTypes":["java.lang.Object"] }, {"name":"get","parameterTypes":["java.lang.Object"] }, {"name":"keySet","parameterTypes":[] }] + "methods":[{"name":"containsKey","parameterTypes":["java.lang.Object"] }, {"name":"get","parameterTypes":["java.lang.Object"] }, {"name":"keySet","parameterTypes":[] }, {"name":"put","parameterTypes":["java.lang.Object","java.lang.Object"] }] }, { "name":"java.util.Set", "methods":[{"name":"add","parameterTypes":["java.lang.Object"] }, {"name":"size","parameterTypes":[] }, {"name":"toArray","parameterTypes":["java.lang.Object[]"] }] +}, +{ + "name":"javafx.scene.paint.Color", + "methods":[{"name":"rgb","parameterTypes":["int","int","int","double"] }] } ] diff --git a/GUI/src/main/resources/META-INF/native-image/reflect-config.json b/GUI/src/main/resources/META-INF/native-image/reflect-config.json index 603c2a609..c5bae7363 100644 --- a/GUI/src/main/resources/META-INF/native-image/reflect-config.json +++ b/GUI/src/main/resources/META-INF/native-image/reflect-config.json @@ -107,6 +107,10 @@ "name":"com.sun.prism.shader.Mask_TextureSuper_Loader", "methods":[{"name":"loadShader","parameterTypes":["com.sun.prism.ps.ShaderFactory","java.io.InputStream"] }] }, +{ + "name":"com.sun.prism.shader.Solid_Color_Loader", + "methods":[{"name":"loadShader","parameterTypes":["com.sun.prism.ps.ShaderFactory","java.io.InputStream"] }] +}, { "name":"com.sun.prism.shader.Solid_TextureFirstPassLCD_Loader", "methods":[{"name":"loadShader","parameterTypes":["com.sun.prism.ps.ShaderFactory","java.io.InputStream"] }] @@ -131,6 +135,10 @@ "name":"com.sun.scenario.effect.impl.prism.PrRenderer", "methods":[{"name":"createRenderer","parameterTypes":["com.sun.scenario.effect.FilterContext"] }] }, +{ + "name":"com.sun.scenario.effect.impl.prism.ps.PPSBlend_SRC_INPeer", + "methods":[{"name":"","parameterTypes":["com.sun.scenario.effect.FilterContext","com.sun.scenario.effect.impl.Renderer","java.lang.String"] }] +}, { "name":"com.sun.scenario.effect.impl.prism.ps.PPSLinearConvolveShadowPeer", "methods":[{"name":"","parameterTypes":["com.sun.scenario.effect.FilterContext","com.sun.scenario.effect.impl.Renderer","java.lang.String"] }] @@ -264,6 +272,9 @@ { "name":"javafx.scene.control.Control" }, +{ + "name":"javafx.scene.control.Labeled" +}, { "name":"javafx.scene.effect.Effect" }, @@ -418,10 +429,6 @@ "name":"sun.security.rsa.RSASignature$SHA256withRSA", "methods":[{"name":"","parameterTypes":[] }] }, -{ - "name":"sun.security.rsa.RSASignature$SHA384withRSA", - "methods":[{"name":"","parameterTypes":[] }] -}, { "name":"sun.security.ssl.KeyManagerFactoryImpl$SunX509", "methods":[{"name":"","parameterTypes":[] }] diff --git a/GUI/src/main/resources/META-INF/native-image/resource-config.json b/GUI/src/main/resources/META-INF/native-image/resource-config.json index a4f938af8..0f645362a 100644 --- a/GUI/src/main/resources/META-INF/native-image/resource-config.json +++ b/GUI/src/main/resources/META-INF/native-image/resource-config.json @@ -1,31 +1,43 @@ { "resources":{ "includes":[{ - "pattern":"GUI:\\QBackgrounds/DriftyMain.png\\E" + "pattern":"GUI:\\QBackgrounds/DriftyMainDark.png\\E" }, { - "pattern":"GUI:\\QButtons/Save/SaveDown.png\\E" + "pattern":"GUI:\\QBackgrounds/DriftyMainLight.png\\E" }, { - "pattern":"GUI:\\QButtons/Save/SaveUp.png\\E" + "pattern":"GUI:\\QButtons/Save/SaveDownDark.png\\E" }, { - "pattern":"GUI:\\QButtons/Start/StartDown.png\\E" + "pattern":"GUI:\\QButtons/Save/SaveDownLight.png\\E" }, { - "pattern":"GUI:\\QButtons/Start/StartUp.png\\E" + "pattern":"GUI:\\QButtons/Save/SaveUpDark.png\\E" + }, { + "pattern":"GUI:\\QButtons/Save/SaveUpLight.png\\E" + }, { + "pattern":"GUI:\\QButtons/Start/StartDownDark.png\\E" + }, { + "pattern":"GUI:\\QButtons/Start/StartDownLight.png\\E" + }, { + "pattern":"GUI:\\QButtons/Start/StartUpDark.png\\E" + }, { + "pattern":"GUI:\\QButtons/Start/StartUpLight.png\\E" }, { "pattern":"GUI:\\QCSS/Button.css\\E" }, { "pattern":"GUI:\\QCSS/CheckBox.css\\E" }, { "pattern":"GUI:\\QCSS/ContextMenu.css\\E" + }, { + "pattern":"GUI:\\QCSS/DarkTheme.css\\E" }, { "pattern":"GUI:\\QCSS/Label.css\\E" + }, { + "pattern":"GUI:\\QCSS/LightTheme.css\\E" }, { "pattern":"GUI:\\QCSS/ListView.css\\E" }, { "pattern":"GUI:\\QCSS/Menu.css\\E" }, { "pattern":"GUI:\\QCSS/ProgressBar.css\\E" - }, { - "pattern":"GUI:\\QCSS/Scene.css\\E" }, { "pattern":"GUI:\\QCSS/ScrollPane.css\\E" }, { @@ -45,7 +57,9 @@ }, { "pattern":"GUI:\\QLabels/Link.png\\E" }, { - "pattern":"GUI:\\QSplash.png\\E" + "pattern":"GUI:\\QSplashDark.png\\E" + }, { + "pattern":"GUI:\\QSplashLight.png\\E" }, { "pattern":"\\QMETA-INF/fonts.mf\\E" }, { @@ -58,8 +72,6 @@ "pattern":"\\QMETA-INF/services/java.nio.channels.spi.SelectorProvider\\E" }, { "pattern":"\\QMETA-INF/services/java.nio.charset.spi.CharsetProvider\\E" - }, { - "pattern":"\\QMETA-INF/services/java.time.zone.ZoneRulesProvider\\E" }, { "pattern":"\\QMETA-INF/services/java.util.prefs.PreferencesFactory\\E" }, { @@ -67,21 +79,47 @@ }, { "pattern":"\\QMETA-INF/services/javax.xml.transform.TransformerFactory\\E" }, { - "pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt72b/nfkc.nrm\\E" + "pattern":"\\Qcom/sun/javafx/scene/control/skin/resources/controls_en.properties\\E" }, { - "pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt72b/ubidi.icu\\E" + "pattern":"\\Qcom/sun/javafx/scene/control/skin/resources/controls_en_US.properties\\E" }, { - "pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt72b/uprops.icu\\E" + "pattern":"\\Qcom/sun/javafx/tk/quantum/QuantumMessagesBundle_en.properties\\E" }, { - "pattern":"java.base:\\Qsun/net/idn/uidna.spp\\E" + "pattern":"\\Qcom/sun/javafx/tk/quantum/QuantumMessagesBundle_en_US.properties\\E" + }, { + "pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt74b/nfkc.nrm\\E" }, { - "pattern":"java.base:\\Qsun/text/resources/WordBreakIteratorData\\E" + "pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt74b/ubidi.icu\\E" + }, { + "pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt74b/uprops.icu\\E" + }, { + "pattern":"java.base:\\Qsun/net/idn/uidna.spp\\E" }, { "pattern":"java.xml:\\Qcom/sun/org/apache/xml/internal/serializer/Encodings.properties\\E" + }, { + "pattern":"java.xml:\\Qcom/sun/org/apache/xml/internal/serializer/XMLEntities.properties\\E" + }, { + "pattern":"java.xml:\\Qcom/sun/org/apache/xml/internal/serializer/XMLEntities_en.properties\\E" + }, { + "pattern":"java.xml:\\Qcom/sun/org/apache/xml/internal/serializer/XMLEntities_en_US.properties\\E" + }, { + "pattern":"java.xml:\\Qjdk/xml/internal/jdkcatalog/JDKCatalog.xml\\E" }, { "pattern":"javafx.controls:\\Qcom/sun/javafx/scene/control/skin/modena/modena.bss\\E" + }, { + "pattern":"javafx.controls:\\Qcom/sun/javafx/scene/control/skin/resources/controls.properties\\E" + }, { + "pattern":"javafx.controls:\\Qcom/sun/javafx/scene/control/skin/resources/controls_en.properties\\E" + }, { + "pattern":"javafx.controls:\\Qcom/sun/javafx/scene/control/skin/resources/controls_en_US.properties\\E" }, { "pattern":"javafx.graphics:\\Qcom/sun/glass/utils/NativeLibLoader.class\\E" + }, { + "pattern":"javafx.graphics:\\Qcom/sun/javafx/tk/quantum/QuantumMessagesBundle.properties\\E" + }, { + "pattern":"javafx.graphics:\\Qcom/sun/javafx/tk/quantum/QuantumMessagesBundle_en.properties\\E" + }, { + "pattern":"javafx.graphics:\\Qcom/sun/javafx/tk/quantum/QuantumMessagesBundle_en_US.properties\\E" }, { "pattern":"javafx.graphics:\\Qcom/sun/prism/es2/glsl/DrawPgram_Color.frag\\E" }, { @@ -92,6 +130,8 @@ "pattern":"javafx.graphics:\\Qcom/sun/prism/es2/glsl/FillRoundRect_Color.frag\\E" }, { "pattern":"javafx.graphics:\\Qcom/sun/prism/es2/glsl/Mask_TextureSuper.frag\\E" + }, { + "pattern":"javafx.graphics:\\Qcom/sun/prism/es2/glsl/Solid_Color.frag\\E" }, { "pattern":"javafx.graphics:\\Qcom/sun/prism/es2/glsl/Solid_TextureFirstPassLCD.frag\\E" }, { @@ -102,6 +142,8 @@ "pattern":"javafx.graphics:\\Qcom/sun/prism/es2/glsl/Texture_Color.frag\\E" }, { "pattern":"javafx.graphics:\\Qcom/sun/prism/es2/glsl/Texture_LinearGradient_PAD.frag\\E" + }, { + "pattern":"javafx.graphics:\\Qcom/sun/scenario/effect/impl/es2/glsl/Blend_SRC_IN.frag\\E" }, { "pattern":"javafx.graphics:\\Qcom/sun/scenario/effect/impl/es2/glsl/LinearConvolveShadow_20.frag\\E" }, { @@ -123,12 +165,18 @@ }]}, "bundles":[{ "name":"com.sun.javafx.tk.quantum.QuantumMessagesBundle", - "locales":[""] + "locales":["en-US"] }, { "name":"com.sun.org.apache.xml.internal.serializer.XMLEntities", - "locales":[""] + "locales":["en-US"] }, { "name":"com/sun/javafx/scene/control/skin/resources/controls", - "locales":[""] + "locales":["en-US"] + }, { + "name":"sun.text.resources.cldr.FormatData", + "locales":["en", "en-US", "und"] + }, { + "name":"sun.util.resources.cldr.CalendarData", + "locales":["und"] }] } diff --git a/GUI/src/main/resources/SplashDark.png b/GUI/src/main/resources/SplashDark.png new file mode 100644 index 0000000000000000000000000000000000000000..401c399378f2d0dfc55660bdeaca1bb54a8f8985 GIT binary patch literal 56978 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

k&{wv%`0c4su(T7|?_O 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 F@jsA