From e95fd7b9e23e83b65877ebf6859521f044630835 Mon Sep 17 00:00:00 2001 From: sirjonasxx <36828922+sirjonasxx@users.noreply.github.com> Date: Tue, 15 Feb 2022 04:13:10 +0100 Subject: [PATCH] style stuff --- G-Earth/src/main/java/gearth/GEarth.java | 49 ++++++++--- .../main/java/gearth/misc/AdminValidator.java | 43 ++-------- .../uilogger/UiLoggerLauncher.java | 9 +++ .../main/java/gearth/ui/GEarthController.java | 1 + .../extensions/logger/ExtensionLogger.java | 3 +- .../ui/subforms/info/InfoController.java | 23 ++++-- .../ui/titlebar/DefaultTitleBarConfig.java | 40 ++++++--- .../titlebar/GEarthThemedTitleBarConfig.java | 21 +++++ .../gearth/ui/titlebar/TitleBarConfig.java | 2 + .../ui/titlebar/TitleBarController.java | 81 +++++++++++++++---- .../src/main/resources/gearth/ui/G-Earth.fxml | 4 +- .../gearth/ui/titlebar/Titlebar.fxml | 6 +- 12 files changed, 195 insertions(+), 87 deletions(-) create mode 100644 G-Earth/src/main/java/gearth/ui/titlebar/GEarthThemedTitleBarConfig.java diff --git a/G-Earth/src/main/java/gearth/GEarth.java b/G-Earth/src/main/java/gearth/GEarth.java index 8b9537a..2327186 100644 --- a/G-Earth/src/main/java/gearth/GEarth.java +++ b/G-Earth/src/main/java/gearth/GEarth.java @@ -3,7 +3,9 @@ package gearth; import gearth.misc.AdminValidator; import gearth.misc.Cacher; import gearth.misc.UpdateChecker; +import gearth.misc.listenerpattern.Observable; import gearth.ui.GEarthController; +import gearth.ui.subforms.logger.loggerdisplays.PacketLogger; import gearth.ui.themes.Theme; import gearth.ui.themes.ThemeFactory; import gearth.ui.titlebar.TitleBarConfig; @@ -17,12 +19,15 @@ import javafx.scene.image.Image; import javafx.stage.Stage; import javafx.stage.StageStyle; +import java.util.function.Consumer; + public class GEarth extends Application { public static GEarth main; public static String version = "1.5.1"; public static String gitApi = "https://api.github.com/repos/sirjonasxx/G-Earth/releases/latest"; public static Theme theme; + public static Observable> themeObservable = new Observable<>(); private Stage stage; private GEarthController controller; @@ -54,6 +59,16 @@ public class GEarth extends Application { return true; } + @Override + public boolean displayMinimizeButton() { + return true; + } + +// @Override +// public boolean allowResizing() { +// return false; +// } + @Override public void onCloseClicked() { closeGEarth(); @@ -80,7 +95,7 @@ public class GEarth extends Application { setGearthTheme(theme); primaryStage.show(); - primaryStage.setOnCloseRequest( event -> closeGEarth()); + primaryStage.setOnCloseRequest(event -> closeGEarth()); AdminValidator.validate(); UpdateChecker.checkForUpdates(); @@ -94,23 +109,27 @@ public class GEarth extends Application { } private void setGearthTheme(Theme theme) { + themeObservable.fireEvent(t -> t.accept(theme)); GEarth.theme = theme; Theme defaultTheme = ThemeFactory.getDefaultTheme(); - stage.getScene().getStylesheets().clear(); - stage.getScene().getStylesheets().add(GEarth.class.getResource(String.format("/gearth/ui/themes/%s/styling.css", theme.internalName())).toExternalForm()); +// Platform.runLater(() -> { + stage.getScene().getStylesheets().clear(); + stage.getScene().getStylesheets().add(GEarth.class.getResource(String.format("/gearth/ui/themes/%s/styling.css", theme.internalName())).toExternalForm()); - stage.getIcons().clear(); - stage.getIcons().add(new Image(GEarth.class.getResourceAsStream(String.format("/gearth/ui/themes/%s/logoSmall.png", theme.overridesLogo() ? theme.internalName() : defaultTheme.internalName())))); - stage.setTitle((theme.overridesTitle() ? theme.title() : defaultTheme.title()) + " " + GEarth.version); + stage.getIcons().clear(); + stage.getIcons().add(new Image(GEarth.class.getResourceAsStream(String.format("/gearth/ui/themes/%s/logoSmall.png", theme.overridesLogo() ? theme.internalName() : defaultTheme.internalName())))); + stage.setTitle((theme.overridesTitle() ? theme.title() : defaultTheme.title()) + " " + GEarth.version); + + controller.infoController.img_logo.setImage(new Image(GEarth.class.getResourceAsStream( + String.format( + "/gearth/ui/themes/%s/logo.png", + theme.overridesLogo() ? theme.internalName() : defaultTheme.internalName() + ) + ))); + controller.infoController.version.setText(stage.getTitle()); +// }); - controller.infoController.img_logo.setImage(new Image(GEarth.class.getResourceAsStream( - String.format( - "/gearth/ui/themes/%s/logo.png", - theme.overridesLogo() ? theme.internalName() : defaultTheme.internalName() - ) - ))); - controller.infoController.version.setText(stage.getTitle()); } public static String[] args; @@ -139,4 +158,8 @@ public class GEarth extends Application { } return null; } + + public static Observable> getThemeObservable() { + return themeObservable; + } } diff --git a/G-Earth/src/main/java/gearth/misc/AdminValidator.java b/G-Earth/src/main/java/gearth/misc/AdminValidator.java index 9f9eb74..7a96735 100644 --- a/G-Earth/src/main/java/gearth/misc/AdminValidator.java +++ b/G-Earth/src/main/java/gearth/misc/AdminValidator.java @@ -1,16 +1,11 @@ package gearth.misc; -import gearth.GEarth; -import gearth.ui.titlebar.DefaultTitleBarConfig; import gearth.ui.titlebar.TitleBarController; import javafx.application.Platform; -import javafx.beans.InvalidationListener; -import javafx.beans.Observable; import javafx.scene.control.Alert; import javafx.scene.control.ButtonType; -import javafx.scene.image.Image; +import javafx.scene.control.Label; import javafx.scene.layout.Region; -import javafx.stage.Stage; import java.io.IOException; import java.io.PrintStream; @@ -51,35 +46,13 @@ public class AdminValidator { new Thread(() -> { if (!AdminValidator.isAdmin()) { Platform.runLater(() -> { - Alert alert = new Alert(Alert.AlertType.WARNING, "G-Earth needs admin privileges in order to work on Flash, please restart G-Earth with admin permissions unless you're using Unity", ButtonType.OK); - Stage stage = (Stage) alert.getDialogPane().getScene().getWindow(); - stage.getIcons().add(new Image(GEarth.class.getResourceAsStream("/gearth/ui/themes/G-Earth/logoSmall.png"))); - stage.getScene().getStylesheets().add(GEarth.class.getResource(String.format("/gearth/ui/themes/%s/styling.css", GEarth.theme.internalName())).toExternalForm()); -// try { -// TitleBarController.create(stage, new DefaultTitleBarConfig(stage)); -// } catch (IOException e) { -// e.printStackTrace(); -// } -// alert.getDialogPane().setMaxHeight(-1); -// alert.getDialogPane().setMinHeight(200); -// alert.getDialogPane() -// -// -// boolean[] once = new boolean[]{false}; -// stage.heightProperty().addListener(observable -> { -// if (!once[0]) { -// once[0] = true; -// stage.setMinHeight(alert.getDialogPane().getHeight() + 25); -// stage.setHeight(alert.getDialogPane().getHeight() + 25); -// stage.setMaxHeight(alert.getDialogPane().getHeight() + 25); -// } -// -// }); - -// stage.setHeight(stage.getHeight() + 25); -// stage.setResizable(false); -// stage.sizeToScene();x - stage.show(); + Alert alert = new Alert(Alert.AlertType.WARNING, "", ButtonType.OK); + alert.getDialogPane().setContent(new Label("G-Earth needs admin privileges in order to work on Flash,\nplease restart G-Earth with admin permissions unless\nyou're using Unity")); + try { + TitleBarController.create(alert).showAlert(); + } catch (IOException e) { + e.printStackTrace(); + } }); } diff --git a/G-Earth/src/main/java/gearth/services/internal_extensions/uilogger/UiLoggerLauncher.java b/G-Earth/src/main/java/gearth/services/internal_extensions/uilogger/UiLoggerLauncher.java index bf3f0e5..0048ce2 100644 --- a/G-Earth/src/main/java/gearth/services/internal_extensions/uilogger/UiLoggerLauncher.java +++ b/G-Earth/src/main/java/gearth/services/internal_extensions/uilogger/UiLoggerLauncher.java @@ -2,6 +2,8 @@ package gearth.services.internal_extensions.uilogger; import gearth.GEarth; import gearth.extensions.InternalExtensionFormLauncher; +import gearth.ui.titlebar.DefaultTitleBarConfig; +import gearth.ui.titlebar.TitleBarController; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; @@ -30,6 +32,13 @@ public class UiLoggerLauncher extends InternalExtensionFormLauncher { controller.setStage(stage); stage.setScene(scene); +// TitleBarController.create(stage, new DefaultTitleBarConfig(stage) { +// @Override +// public void onCloseClicked() { +// stage.hide(); +//// uiLogger.onHide(); +// } +// }); return uiLogger; } } diff --git a/G-Earth/src/main/java/gearth/ui/GEarthController.java b/G-Earth/src/main/java/gearth/ui/GEarthController.java index a7725a1..557295b 100644 --- a/G-Earth/src/main/java/gearth/ui/GEarthController.java +++ b/G-Earth/src/main/java/gearth/ui/GEarthController.java @@ -4,6 +4,7 @@ import gearth.protocol.connection.proxy.ProxyProviderFactory; import gearth.protocol.connection.proxy.SocksConfiguration; import gearth.ui.subforms.logger.loggerdisplays.PacketLoggerFactory; import javafx.scene.control.*; +import javafx.scene.input.MouseEvent; import javafx.stage.Stage; import gearth.protocol.HConnection; import gearth.ui.subforms.connection.ConnectionController; diff --git a/G-Earth/src/main/java/gearth/ui/subforms/extensions/logger/ExtensionLogger.java b/G-Earth/src/main/java/gearth/ui/subforms/extensions/logger/ExtensionLogger.java index e548b17..bba6600 100644 --- a/G-Earth/src/main/java/gearth/ui/subforms/extensions/logger/ExtensionLogger.java +++ b/G-Earth/src/main/java/gearth/ui/subforms/extensions/logger/ExtensionLogger.java @@ -2,6 +2,7 @@ package gearth.ui.subforms.extensions.logger; import gearth.GEarth; import gearth.ui.titlebar.DefaultTitleBarConfig; +import gearth.ui.titlebar.GEarthThemedTitleBarConfig; import gearth.ui.titlebar.TitleBarController; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; @@ -49,7 +50,7 @@ public class ExtensionLogger { controller.setStage(stage); stage.setScene(scene); - TitleBarController.create(stage, new DefaultTitleBarConfig(stage) { + TitleBarController.create(stage, new GEarthThemedTitleBarConfig(stage) { @Override public void onCloseClicked() { stage.hide(); diff --git a/G-Earth/src/main/java/gearth/ui/subforms/info/InfoController.java b/G-Earth/src/main/java/gearth/ui/subforms/info/InfoController.java index dcefbc3..81e8e07 100644 --- a/G-Earth/src/main/java/gearth/ui/subforms/info/InfoController.java +++ b/G-Earth/src/main/java/gearth/ui/subforms/info/InfoController.java @@ -1,13 +1,17 @@ package gearth.ui.subforms.info; import gearth.GEarth; +import gearth.ui.titlebar.TitleBarController; import javafx.event.ActionEvent; import javafx.scene.control.*; import gearth.ui.SubForm; import javafx.scene.image.ImageView; import javafx.scene.layout.Region; +import javafx.scene.layout.VBox; import javafx.scene.web.WebView; +import java.io.IOException; + /** * Created by Jonas on 06/04/18. */ @@ -53,15 +57,20 @@ public class InfoController extends SubForm { Alert alert = new Alert(Alert.AlertType.INFORMATION, "Donate Bitcoins", ButtonType.OK); alert.setHeaderText("Donate Bitcoins"); - WebView webView = new WebView(); - webView.getEngine().loadContent("Bitcoin public address:

" + - "" + - ""); - webView.setPrefSize(200, 100); + VBox test = new VBox(); + test.getChildren().add(new Label("Bitcoin public address:")); + TextArea pubText = new TextArea(pubkey); + pubText.setPrefHeight(28); + pubText.setMaxWidth(250); + test.getChildren().add(pubText); alert.setResizable(false); alert.getDialogPane().setMinHeight(Region.USE_PREF_SIZE); - alert.getDialogPane().setContent(webView); - alert.show(); + alert.getDialogPane().setContent(test); + try { + TitleBarController.create(alert).showAlert(); + } catch (IOException e) { + e.printStackTrace(); + } } } diff --git a/G-Earth/src/main/java/gearth/ui/titlebar/DefaultTitleBarConfig.java b/G-Earth/src/main/java/gearth/ui/titlebar/DefaultTitleBarConfig.java index 60703c0..ff91776 100644 --- a/G-Earth/src/main/java/gearth/ui/titlebar/DefaultTitleBarConfig.java +++ b/G-Earth/src/main/java/gearth/ui/titlebar/DefaultTitleBarConfig.java @@ -3,6 +3,7 @@ package gearth.ui.titlebar; import gearth.GEarth; import gearth.ui.themes.Theme; import gearth.ui.themes.ThemeFactory; +import javafx.application.Platform; import javafx.scene.image.Image; import javafx.stage.Stage; @@ -15,16 +16,30 @@ public class DefaultTitleBarConfig implements TitleBarConfig { public DefaultTitleBarConfig(Stage stage) { + this(stage, ThemeFactory.getDefaultTheme()); + } + + public DefaultTitleBarConfig(Stage stage, Theme theme) { this.stage = stage; - currentTheme = ThemeFactory.getDefaultTheme(); - setTheme(currentTheme); + currentTheme = theme; + setTheme(theme); } @Override public boolean displayThemePicker() { - return false; + return true; } + @Override + public boolean displayMinimizeButton() { + return true; + } + +// @Override +// public boolean allowResizing() { +// return false; +// } + @Override public void onCloseClicked() { stage.close(); @@ -38,15 +53,18 @@ public class DefaultTitleBarConfig implements TitleBarConfig { @Override public void setTheme(Theme theme) { currentTheme = theme; - Theme defaultTheme = ThemeFactory.getDefaultTheme(); - if (currentStylesheet != null) { - stage.getScene().getStylesheets().remove(currentStylesheet); - } - currentStylesheet = GEarth.class.getResource(String.format("/gearth/ui/themes/%s/styling.css", theme.internalName())).toExternalForm(); - stage.getScene().getStylesheets().add(currentStylesheet); + Platform.runLater(() -> { + Theme defaultTheme = ThemeFactory.getDefaultTheme(); + if (currentStylesheet != null) { + stage.getScene().getStylesheets().remove(currentStylesheet); + } + currentStylesheet = GEarth.class.getResource(String.format("/gearth/ui/themes/%s/styling.css", theme.internalName())).toExternalForm(); + stage.getScene().getStylesheets().add(currentStylesheet); - stage.getIcons().clear(); - stage.getIcons().add(new Image(GEarth.class.getResourceAsStream(String.format("/gearth/ui/themes/%s/logoSmall.png", theme.overridesLogo() ? theme.internalName() : defaultTheme.internalName())))); + stage.getIcons().clear(); + stage.getIcons().add(new Image(GEarth.class.getResourceAsStream(String.format("/gearth/ui/themes/%s/logoSmall.png", theme.overridesLogo() ? theme.internalName() : defaultTheme.internalName())))); + + }); } @Override diff --git a/G-Earth/src/main/java/gearth/ui/titlebar/GEarthThemedTitleBarConfig.java b/G-Earth/src/main/java/gearth/ui/titlebar/GEarthThemedTitleBarConfig.java new file mode 100644 index 0000000..ffa2d8e --- /dev/null +++ b/G-Earth/src/main/java/gearth/ui/titlebar/GEarthThemedTitleBarConfig.java @@ -0,0 +1,21 @@ +package gearth.ui.titlebar; + +import gearth.GEarth; +import gearth.ui.themes.Theme; +import javafx.stage.Stage; + +import java.util.function.Consumer; + +public class GEarthThemedTitleBarConfig extends DefaultTitleBarConfig { + + public GEarthThemedTitleBarConfig(Stage stage) { + super(stage, GEarth.theme); + GEarth.themeObservable.addListener(this::setTheme); + } + + @Override + public boolean displayThemePicker() { + return false; + } + +} diff --git a/G-Earth/src/main/java/gearth/ui/titlebar/TitleBarConfig.java b/G-Earth/src/main/java/gearth/ui/titlebar/TitleBarConfig.java index 6186284..a83eaa9 100644 --- a/G-Earth/src/main/java/gearth/ui/titlebar/TitleBarConfig.java +++ b/G-Earth/src/main/java/gearth/ui/titlebar/TitleBarConfig.java @@ -5,6 +5,8 @@ import gearth.ui.themes.Theme; public interface TitleBarConfig { boolean displayThemePicker(); + boolean displayMinimizeButton(); +// boolean allowResizing(); void onCloseClicked(); void onMinimizeClicked(); diff --git a/G-Earth/src/main/java/gearth/ui/titlebar/TitleBarController.java b/G-Earth/src/main/java/gearth/ui/titlebar/TitleBarController.java index cd654ae..9553f58 100644 --- a/G-Earth/src/main/java/gearth/ui/titlebar/TitleBarController.java +++ b/G-Earth/src/main/java/gearth/ui/titlebar/TitleBarController.java @@ -1,16 +1,20 @@ package gearth.ui.titlebar; import gearth.GEarth; -import gearth.ui.themes.Theme; import gearth.ui.themes.ThemeFactory; +import javafx.application.Platform; import javafx.beans.InvalidationListener; import javafx.beans.Observable; import javafx.fxml.FXMLLoader; +import javafx.scene.Cursor; import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.scene.control.Alert; import javafx.scene.control.Label; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.input.MouseEvent; +import javafx.scene.layout.GridPane; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; @@ -24,24 +28,54 @@ public class TitleBarController { public Label titleLabel; public Pane titleBar; public ImageView titleIcon; + public ImageView themeBtn; + public ImageView minimizeBtn; private Stage stage; private TitleBarConfig config; public static TitleBarController create(Stage stage, TitleBarConfig config) throws IOException { FXMLLoader loader = new FXMLLoader(TitleBarController.class.getResource("Titlebar.fxml")); - Parent root = loader.load(); + Parent titleBar = loader.load(); + TitleBarController controller = initNewController(loader, stage, config); + + VBox newParent = new VBox(titleBar, stage.getScene().getRoot()); + newParent.setId("titlebar-main-container"); + stage.getScene().setRoot(newParent); + + return controller; + } + + public static TitleBarController create(Alert alert) throws IOException { + + FXMLLoader loader = new FXMLLoader(TitleBarController.class.getResource("Titlebar.fxml")); + Parent titleBar = loader.load(); + Stage stage = (Stage) alert.getDialogPane().getScene().getWindow(); + + TitleBarConfig config = new GEarthThemedTitleBarConfig(stage) { + @Override + public boolean displayMinimizeButton() { + return false; + } + }; + TitleBarController controller = initNewController(loader, stage, config); + + Parent parent = alert.getDialogPane().getScene().getRoot(); + VBox newParent = new VBox(titleBar, parent); + newParent.setId("titlebar-main-container"); + stage.setScene(new Scene(newParent)); + stage.getScene().setFill(Color.TRANSPARENT); + + return controller; + } + + private static TitleBarController initNewController(FXMLLoader loader, Stage stage, TitleBarConfig config) throws IOException { TitleBarController controller = loader.getController(); + controller.stage = stage; controller.config = config; stage.initStyle(StageStyle.TRANSPARENT); - - Parent parent = stage.getScene().getRoot(); - - VBox newParent = new VBox(root, parent); - newParent.setId("titlebar-main-container"); - stage.getScene().setRoot(newParent); - parent.getScene().setFill(Color.TRANSPARENT); + stage.getScene().setFill(Color.TRANSPARENT); stage.titleProperty().addListener((i) -> controller.setTitle(stage.getTitle())); controller.setTitle(stage.getTitle()); @@ -49,17 +83,23 @@ public class TitleBarController { stage.getIcons().addListener((InvalidationListener) observable -> controller.updateIcon()); controller.updateIcon(); + Platform.runLater(() -> { + controller.themeBtn.setVisible(config.displayThemePicker()); + if (!config.displayMinimizeButton()) { + ((GridPane) controller.minimizeBtn.getParent()).getChildren().remove(controller.minimizeBtn); + } + }); return controller; } public void updateIcon() { - titleIcon.setImage(stage.getIcons().size() > 0 ? stage.getIcons().get(0) : + Platform.runLater(() -> titleIcon.setImage(stage.getIcons().size() > 0 ? stage.getIcons().get(0) : new Image(GEarth.class.getResourceAsStream( - String.format("/gearth/ui/themes/%s/logoSmall.png", ThemeFactory.getDefaultTheme().internalName())))); + String.format("/gearth/ui/themes/%s/logoSmall.png", ThemeFactory.getDefaultTheme().internalName()))))); } public void setTitle(String title) { - titleLabel.setText(title); + Platform.runLater(() -> titleLabel.setText(title)); } @@ -72,15 +112,23 @@ public class TitleBarController { } private double xOffset, yOffset; + private boolean isMoving = false; public void handleClickAction(MouseEvent event) { xOffset = event.getSceneX(); yOffset = event.getSceneY(); + isMoving = true; } public void handleMovementAction(MouseEvent event) { - stage.setX(event.getScreenX() - xOffset); - stage.setY(event.getScreenY() - yOffset); + if (isMoving) { + stage.setX(event.getScreenX() - xOffset); + stage.setY(event.getScreenY() - yOffset); + } + } + + public void handleClickReleaseAction(MouseEvent mouseEvent) { + isMoving = false; } public void toggleTheme(MouseEvent event) { @@ -88,4 +136,9 @@ public class TitleBarController { config.setTheme(ThemeFactory.allThemes().get((themeIndex + 1) % ThemeFactory.allThemes().size())); } + public void showAlert() { + stage.show(); + Platform.runLater(() -> stage.sizeToScene()); + } + } diff --git a/G-Earth/src/main/resources/gearth/ui/G-Earth.fxml b/G-Earth/src/main/resources/gearth/ui/G-Earth.fxml index 8976b77..549ec24 100644 --- a/G-Earth/src/main/resources/gearth/ui/G-Earth.fxml +++ b/G-Earth/src/main/resources/gearth/ui/G-Earth.fxml @@ -1,13 +1,11 @@ - - - + diff --git a/G-Earth/src/main/resources/gearth/ui/titlebar/Titlebar.fxml b/G-Earth/src/main/resources/gearth/ui/titlebar/Titlebar.fxml index cdf7ae1..d5c4bf6 100644 --- a/G-Earth/src/main/resources/gearth/ui/titlebar/Titlebar.fxml +++ b/G-Earth/src/main/resources/gearth/ui/titlebar/Titlebar.fxml @@ -15,7 +15,7 @@ - + @@ -25,7 +25,7 @@ - + @@ -47,7 +47,7 @@ - +