diff --git a/G-Earth/src/main/java/gearth/Main.java b/G-Earth/src/main/java/gearth/Main.java index 736dc3a..133bfd3 100644 --- a/G-Earth/src/main/java/gearth/Main.java +++ b/G-Earth/src/main/java/gearth/Main.java @@ -1,49 +1,42 @@ package gearth; import gearth.misc.AdminValidator; +import gearth.misc.Cacher; +import gearth.misc.UpdateChecker; import gearth.ui.GEarthController; import javafx.application.Application; import javafx.application.Platform; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; -import javafx.scene.control.Alert; -import javafx.scene.control.ButtonType; -import javafx.scene.control.Hyperlink; -import javafx.scene.control.Label; import javafx.scene.image.Image; -import javafx.scene.layout.FlowPane; -import javafx.scene.layout.Region; -import javafx.scene.web.WebView; import javafx.stage.Stage; -import org.apache.commons.io.IOUtils; -import org.apache.maven.artifact.versioning.ComparableVersion; -import org.json.JSONObject; - -import java.io.IOException; -import java.net.URL; -import java.nio.charset.StandardCharsets; - -// run as root issue Invalid MIT-MAGIC-COOKIE-1 key fix: https://stackoverflow.com/questions/48139447/invalid-mit-magic-cookie-1-key public class Main extends Application { public static Application main; public static String version = "1.5"; - private static String gitApi = "https://api.github.com/repos/sirjonasxx/G-Earth/releases/latest"; + public static String gitApi = "https://api.github.com/repos/sirjonasxx/G-Earth/releases/latest"; + public static String theme = "G-Earth"; + + static { + if (Cacher.getCacheContents().has("theme")) { + theme = Cacher.getCacheContents().getString("theme"); + } + } @Override public void start(Stage primaryStage) throws Exception{ main = this; - FXMLLoader loader = new FXMLLoader(getClass().getResource("ui/G-Earth.fxml")); + FXMLLoader loader = new FXMLLoader(getClass().getResource("/gearth/ui/G-Earth.fxml")); Parent root = loader.load(); GEarthController companion = loader.getController(); companion.setStage(primaryStage); - primaryStage.getIcons().add(new Image(getClass().getResourceAsStream("G-EarthLogoSmaller.png"))); + primaryStage.getIcons().add(new Image(getClass().getResourceAsStream(String.format("/gearth/themes/%s/logoSmall.png", theme)))); - primaryStage.setTitle("G-Earth " + version); + primaryStage.setTitle(theme + " " + version); // https://stackoverflow.com/questions/20732100/javafx-why-does-stage-setresizablefalse-cause-additional-margins // primaryStage.setScene(new Scene(root, 650, 295)); primaryStage.setScene(new Scene(root)); @@ -51,7 +44,7 @@ public class Main extends Application { primaryStage.sizeToScene(); primaryStage.show(); - primaryStage.getScene().getStylesheets().add(getClass().getResource("ui/bootstrap3.css").toExternalForm()); + primaryStage.getScene().getStylesheets().add(getClass().getResource(String.format("/gearth/themes/%s/styling.css", theme)).toExternalForm()); primaryStage.setOnCloseRequest( event -> { companion.exit(); @@ -61,61 +54,8 @@ public class Main extends Application { System.exit(0); }); - 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); - alert.getDialogPane().setMinHeight(Region.USE_PREF_SIZE); - alert.setResizable(false); - alert.show(); - }); - - } - }).start(); - - new Thread(() -> { - try { - JSONObject object = new JSONObject(IOUtils.toString( - new URL(gitApi).openStream(), StandardCharsets.UTF_8)); - - String gitv = (String)object.get("tag_name"); - if (new ComparableVersion(version).compareTo(new ComparableVersion(gitv)) < 0) { - Platform.runLater(() -> { - String body = (String)object.get("body"); - boolean isForcedUpdate = body.contains("(!)"); - - Alert alert = new Alert(isForcedUpdate ? Alert.AlertType.ERROR : Alert.AlertType.INFORMATION, "G-Earth is outdated!", ButtonType.OK); - - FlowPane fp = new FlowPane(); - Label lbl = new Label("A new version of G-Earth has been found ("+gitv+")" + System.lineSeparator()+ System.lineSeparator() + "Update to the latest version:"); - Hyperlink link = new Hyperlink("https://github.com/sirjonasxx/G-Earth/releases"); - fp.getChildren().addAll( lbl, link); - link.setOnAction(event -> { - Main.main.getHostServices().showDocument(link.getText()); - event.consume(); - }); - - - - WebView webView = new WebView(); - webView.getEngine().loadContent("A new version of G-Earth has been found ("+gitv+")

Update to the latest version:
https://github.com/sirjonasxx/G-Earth/releases"); - webView.setPrefSize(500, 200); - - alert.setResizable(false); - alert.getDialogPane().setMinHeight(Region.USE_PREF_SIZE); - alert.getDialogPane().setContent(fp); - if (isForcedUpdate) { - alert.setOnCloseRequest(event -> System.exit(0)); - } - alert.show(); - - }); - } - - } catch (IOException e) { -// e.printStackTrace(); - } - }).start(); + AdminValidator.validate(); + UpdateChecker.checkForUpdates(); } @@ -146,15 +86,3 @@ public class Main extends Application { return null; } } - -// Hi -// I'm -// Lande -// I want -// The role -// Developer -// Pls -// You say : -// Change 10 lines -// I dit it. -// https://i.imgur.com/QEHV2NZ.png diff --git a/G-Earth/src/main/java/gearth/misc/AdminValidator.java b/G-Earth/src/main/java/gearth/misc/AdminValidator.java index ca31aab..04eac91 100644 --- a/G-Earth/src/main/java/gearth/misc/AdminValidator.java +++ b/G-Earth/src/main/java/gearth/misc/AdminValidator.java @@ -1,5 +1,10 @@ package gearth.misc; +import javafx.application.Platform; +import javafx.scene.control.Alert; +import javafx.scene.control.ButtonType; +import javafx.scene.layout.Region; + import java.io.PrintStream; import java.util.prefs.Preferences; @@ -34,4 +39,18 @@ public class AdminValidator { return isAdmin; } + public static void validate() { + 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); + alert.getDialogPane().setMinHeight(Region.USE_PREF_SIZE); + alert.setResizable(false); + alert.show(); + }); + + } + }).start(); + } + } diff --git a/G-Earth/src/main/java/gearth/misc/UpdateChecker.java b/G-Earth/src/main/java/gearth/misc/UpdateChecker.java new file mode 100644 index 0000000..47db3d5 --- /dev/null +++ b/G-Earth/src/main/java/gearth/misc/UpdateChecker.java @@ -0,0 +1,71 @@ +package gearth.misc; + +import gearth.Main; +import javafx.application.Platform; +import javafx.scene.control.Alert; +import javafx.scene.control.ButtonType; +import javafx.scene.control.Hyperlink; +import javafx.scene.control.Label; +import javafx.scene.layout.FlowPane; +import javafx.scene.layout.Region; +import javafx.scene.web.WebView; +import org.apache.commons.io.IOUtils; +import org.apache.maven.artifact.versioning.ComparableVersion; +import org.json.JSONObject; + +import java.io.IOException; +import java.net.URL; +import java.nio.charset.StandardCharsets; + +import static gearth.Main.gitApi; +import static gearth.Main.version; + +public class UpdateChecker { + + public static void checkForUpdates() { + new Thread(() -> { + try { + JSONObject object = new JSONObject(IOUtils.toString( + new URL(gitApi).openStream(), StandardCharsets.UTF_8)); + + String gitv = (String)object.get("tag_name"); + if (new ComparableVersion(version).compareTo(new ComparableVersion(gitv)) < 0) { + Platform.runLater(() -> { + String body = (String)object.get("body"); + boolean isForcedUpdate = body.contains("(!)"); + + Alert alert = new Alert(isForcedUpdate ? Alert.AlertType.ERROR : Alert.AlertType.INFORMATION, "G-Earth is outdated!", ButtonType.OK); + + FlowPane fp = new FlowPane(); + Label lbl = new Label("A new version of G-Earth has been found ("+gitv+")" + System.lineSeparator()+ System.lineSeparator() + "Update to the latest version:"); + Hyperlink link = new Hyperlink("https://github.com/sirjonasxx/G-Earth/releases"); + fp.getChildren().addAll( lbl, link); + link.setOnAction(event -> { + Main.main.getHostServices().showDocument(link.getText()); + event.consume(); + }); + + + + WebView webView = new WebView(); + webView.getEngine().loadContent("A new version of G-Earth has been found ("+gitv+")

Update to the latest version:
https://github.com/sirjonasxx/G-Earth/releases"); + webView.setPrefSize(500, 200); + + alert.setResizable(false); + alert.getDialogPane().setMinHeight(Region.USE_PREF_SIZE); + alert.getDialogPane().setContent(fp); + if (isForcedUpdate) { + alert.setOnCloseRequest(event -> System.exit(0)); + } + alert.show(); + + }); + } + + } catch (IOException e) { +// e.printStackTrace(); + } + }).start(); + } + +} diff --git a/G-Earth/src/main/java/gearth/services/internal_extensions/extensionstore/GExtensionStoreLauncher.java b/G-Earth/src/main/java/gearth/services/internal_extensions/extensionstore/GExtensionStoreLauncher.java index 9ed4fe3..5d78d27 100644 --- a/G-Earth/src/main/java/gearth/services/internal_extensions/extensionstore/GExtensionStoreLauncher.java +++ b/G-Earth/src/main/java/gearth/services/internal_extensions/extensionstore/GExtensionStoreLauncher.java @@ -26,8 +26,8 @@ public class GExtensionStoreLauncher extends InternalExtensionFormLauncher { FXMLLoader loader = new FXMLLoader(UiLogger.class.getResource("UiLogger.fxml")); Parent root = loader.load(); - stage.setTitle("G-Earth | Packet Logger"); + stage.setTitle(String.format("%s | Packet Logger", Main.theme)); stage.initModality(Modality.NONE); - stage.getIcons().add(new Image(getClass().getResourceAsStream("/gearth/G-EarthLogoSmaller.png"))); + stage.getIcons().add(new Image(getClass().getResourceAsStream(String.format("/gearth/themes/%s/logoSmall.png", Main.theme)))); Scene scene = new Scene(root); - scene.getStylesheets().add("/gearth/ui/bootstrap3.css"); + scene.getStylesheets().add(String.format("/gearth/themes/%s/styling.css", Main.theme)); scene.getStylesheets().add("/gearth/services/internal_extensions/uilogger/logger.css"); UiLoggerController controller = loader.getController(); diff --git a/G-Earth/src/main/java/gearth/services/unity_tools/GUnityFileServer.java b/G-Earth/src/main/java/gearth/services/unity_tools/GUnityFileServer.java index 50cab54..860545e 100644 --- a/G-Earth/src/main/java/gearth/services/unity_tools/GUnityFileServer.java +++ b/G-Earth/src/main/java/gearth/services/unity_tools/GUnityFileServer.java @@ -8,7 +8,6 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; -import java.net.MalformedURLException; import java.net.URL; import java.util.Random; @@ -133,7 +132,7 @@ public class GUnityFileServer extends HttpServlet private void getLogo(HttpServletResponse response) throws IOException { OutputStream out = response.getOutputStream(); - InputStream in = Main.class.getResourceAsStream("G-EarthLogo.png"); + InputStream in = Main.class.getResourceAsStream(String.format("/gearth/themes/%s/logo.png", Main.theme)); byte[] bytes = new byte[4096]; int bytesRead; diff --git a/G-Earth/src/main/java/gearth/ui/extensions/ExtensionItemContainer.java b/G-Earth/src/main/java/gearth/ui/extensions/ExtensionItemContainer.java index 86738f1..b6f6c24 100644 --- a/G-Earth/src/main/java/gearth/ui/extensions/ExtensionItemContainer.java +++ b/G-Earth/src/main/java/gearth/ui/extensions/ExtensionItemContainer.java @@ -144,7 +144,8 @@ public class ExtensionItemContainer extends GridPane { parent.getChildren().add(this); if (item.extensionType() == ExtensionType.INTERNAL) { - setBackground(new Background(new BackgroundFill(Paint.valueOf("F0FFFF"), CornerRadii.EMPTY, Insets.EMPTY))); + getStyleClass().clear(); + getStyleClass().add("internalExtension"); } @@ -176,7 +177,8 @@ public class ExtensionItemContainer extends GridPane { ExtensionItemContainer this2 = this; item.getDeletedObservable().addListener(() -> Platform.runLater(() -> { if (item.isInstalledExtension()) { - setBackground(new Background(new BackgroundFill(Paint.valueOf("#cccccc"),null, null))); + getStyleClass().clear(); + getStyleClass().add("disconnectedExtension"); getChildren().remove(buttonsBox); add(additionalButtonBox, 4, 0); reloadButton.setVisible(true); @@ -191,7 +193,8 @@ public class ExtensionItemContainer extends GridPane { item = extension; initExtension(); - setBackground(new Background(new BackgroundFill(Paint.valueOf("#ffffff"),null, null))); + getStyleClass().clear(); + getStyleClass().add("connectedExtension"); getChildren().remove(additionalButtonBox); if (buttonsBox != null) { add(buttonsBox, 4, 0); diff --git a/G-Earth/src/main/java/gearth/ui/extensions/logger/ExtensionLogger.java b/G-Earth/src/main/java/gearth/ui/extensions/logger/ExtensionLogger.java index ac49d83..b7ad0b0 100644 --- a/G-Earth/src/main/java/gearth/ui/extensions/logger/ExtensionLogger.java +++ b/G-Earth/src/main/java/gearth/ui/extensions/logger/ExtensionLogger.java @@ -1,5 +1,6 @@ package gearth.ui.extensions.logger; +import gearth.Main; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; @@ -34,15 +35,15 @@ public class ExtensionLogger { stage = new Stage(); - stage.setTitle("G-Earth | Extension Console"); + stage.setTitle(String.format("%s | Extension Console", Main.theme)); stage.initModality(Modality.NONE); - stage.getIcons().add(new Image(getClass().getResourceAsStream("/gearth/G-EarthLogoSmaller.png"))); + stage.getIcons().add(new Image(getClass().getResourceAsStream(String.format("/gearth/themes/%s/logoSmall.png", Main.theme)))); stage.setAlwaysOnTop(true); stage.setMinHeight(235); stage.setMinWidth(370); Scene scene = new Scene(root); - scene.getStylesheets().add("/gearth/ui/bootstrap3.css"); + scene.getStylesheets().add(String.format("/gearth/themes/%s/styling.css", Main.theme)); scene.getStylesheets().add("/gearth/ui/extensions/logger/logger.css"); ExtensionLoggerController controller = loader.getController(); controller.setStage(stage); diff --git a/G-Earth/src/main/java/gearth/ui/info/InfoController.java b/G-Earth/src/main/java/gearth/ui/info/InfoController.java index 59991b6..9cd30c4 100644 --- a/G-Earth/src/main/java/gearth/ui/info/InfoController.java +++ b/G-Earth/src/main/java/gearth/ui/info/InfoController.java @@ -6,7 +6,6 @@ import javafx.scene.control.*; import gearth.ui.SubForm; import javafx.scene.image.Image; import javafx.scene.image.ImageView; -import javafx.scene.layout.FlowPane; import javafx.scene.layout.Region; import javafx.scene.web.WebView; @@ -34,9 +33,10 @@ public class InfoController extends SubForm { } public void initialize() { + version.setText(version.getText().replace("$theme", Main.theme)); version.setText(version.getText().replace("$version", Main.version)); - img_logo.setImage(new Image("/gearth/G-EarthLogo.png")); + img_logo.setImage(new Image(String.format("/gearth/themes/%s/logo.png", Main.theme))); link_ase.setTooltip(new Tooltip("https://allseeingeye.to")); link_darkbox.setTooltip(new Tooltip("https://darkbox.nl")); diff --git a/G-Earth/src/main/resources/gearth/G-EarthLogo.ico b/G-Earth/src/main/resources/gearth/themes/G-Earth/logo.ico similarity index 100% rename from G-Earth/src/main/resources/gearth/G-EarthLogo.ico rename to G-Earth/src/main/resources/gearth/themes/G-Earth/logo.ico diff --git a/G-Earth/src/main/resources/gearth/G-EarthLogo.png b/G-Earth/src/main/resources/gearth/themes/G-Earth/logo.png similarity index 100% rename from G-Earth/src/main/resources/gearth/G-EarthLogo.png rename to G-Earth/src/main/resources/gearth/themes/G-Earth/logo.png diff --git a/G-Earth/src/main/resources/gearth/G-EarthLogoSmaller.png b/G-Earth/src/main/resources/gearth/themes/G-Earth/logoSmall.png similarity index 100% rename from G-Earth/src/main/resources/gearth/G-EarthLogoSmaller.png rename to G-Earth/src/main/resources/gearth/themes/G-Earth/logoSmall.png diff --git a/G-Earth/src/main/resources/gearth/ui/bootstrap3.css b/G-Earth/src/main/resources/gearth/themes/G-Earth/styling.css similarity index 99% rename from G-Earth/src/main/resources/gearth/ui/bootstrap3.css rename to G-Earth/src/main/resources/gearth/themes/G-Earth/styling.css index e09e83b..57a06a8 100644 --- a/G-Earth/src/main/resources/gearth/ui/bootstrap3.css +++ b/G-Earth/src/main/resources/gearth/themes/G-Earth/styling.css @@ -890,4 +890,23 @@ VBox > .split-menu-button.last > .arrow-button { .check-box:pressed > .box, .radio-button:pressed > .radio { -fx-background-color: #50c0e2; +} + + +/*g-earth stuff*/ + +.hyperlink { + -fx-text-fill: #0096c8; +} + +.internalExtension { + -fx-background-color: #F0FFFF; +} + +.disconnectedExtension { + -fx-background-color: #CCCCCC; +} + +.connectedExtension { + -fx-background-color: #FFFFFF; } \ No newline at end of file diff --git a/G-Earth/src/main/resources/gearth/themes/Tanji/logo.ico b/G-Earth/src/main/resources/gearth/themes/Tanji/logo.ico new file mode 100644 index 0000000..2f5815f Binary files /dev/null and b/G-Earth/src/main/resources/gearth/themes/Tanji/logo.ico differ diff --git a/G-Earth/src/main/resources/gearth/themes/Tanji/logo.png b/G-Earth/src/main/resources/gearth/themes/Tanji/logo.png new file mode 100644 index 0000000..6c93e4c Binary files /dev/null and b/G-Earth/src/main/resources/gearth/themes/Tanji/logo.png differ diff --git a/G-Earth/src/main/resources/gearth/themes/Tanji/logoSmall.png b/G-Earth/src/main/resources/gearth/themes/Tanji/logoSmall.png new file mode 100644 index 0000000..6c93e4c Binary files /dev/null and b/G-Earth/src/main/resources/gearth/themes/Tanji/logoSmall.png differ diff --git a/G-Earth/src/main/resources/gearth/themes/Tanji/styling.css b/G-Earth/src/main/resources/gearth/themes/Tanji/styling.css new file mode 100644 index 0000000..18a7cc1 --- /dev/null +++ b/G-Earth/src/main/resources/gearth/themes/Tanji/styling.css @@ -0,0 +1,910 @@ +.root { + -fx-body-color : #F5F5F5; + -fx-outer-border : #cecece; +} +.button,.menu-button,.toggle-button,.split-menu-button { + -fx-font-size: 14; + -fx-background-radius: 4; + -fx-border-radius: 4; + -fx-pref-height: 30; + -fx-min-width: 30; +} +.button,.menu-button,.split-menu-button,.toggle-button,.number-button { + -fx-background-insets: 0, 0, -1, 0; +} + +.split-menu-button > .label { + -fx-border-radius: 4 0 0 4; + -fx-background-radius: 3 0 0 3; +} + +.split-menu-button > .arrow-button { + -fx-border-radius: 0 4 4 0; + -fx-background-radius: 0 3 3 0; +} + +.lg { + -fx-min-height: 46; + -fx-max-height: 46; + -fx-font-size: 18; +} + +.sm { + -fx-min-height: 30; + -fx-max-height: 30; +} + +.xs { + -fx-min-height: 22; + -fx-max-height: 22; + -fx-font-size: 10; +} + +.primary .arrow, +.success .arrow, +.info .arrow, +.warning .arrow, +.danger .arrow { + -fx-background-color: transparent, white; +} + +.primary > .label, +.success > .label, +.info > .label, +.warning > .label, +.danger > .label { + -fx-text-fill: white; +} + +.action-btn { + -fx-min-width: 80; +} + +/*positions*/ +/*first*/ +.button.first, .menu-button.first, .toggle-button.first, .text-field.first, .text-area.first { + -fx-border-radius: 4 0 0 4; + -fx-background-radius: 4 0 0 4; +} + +.split-menu-button.first > .arrow-button, .split-menu-button.middle > .arrow-button { + -fx-border-radius: 0; + -fx-background-radius: 0; +} + +VBox > .button.first, +VBox > .menu-button.first, +VBox > .toggle-button.first, +VBox > .split-menu-button.first, +VBox > .text-field.first, +VBox > .text-area.first { + -fx-border-radius: 4 4 0 0; + -fx-background-radius: 4 4 0 0; +} + +VBox > .split-menu-button.first > .label { + -fx-border-radius: 4 0 0 0; + -fx-background-radius: 3 0 0 0; +} +VBox > .split-menu-button.first > .arrow-button { + -fx-border-radius: 0 4 0 0; + -fx-background-radius: 0 3 0 0; +} +/*middle*/ +.middle { + -fx-border-radius: 0; + -fx-background-radius: 0; +} + +/*last*/ +.split-menu-button.middle > .label, .split-menu-button.last > .label { + -fx-border-radius: 0; + -fx-background-radius: 0; +} + +.split-menu-button.last { + -fx-border-radius: 0 4 4 0; + -fx-background-radius: 0 4 4 0; +} + +.button.middle, .text-field.middle, .text-area.middle, .split-menu-button.middle, .toggle-button.middle { + -fx-border-radius: 0; + -fx-background-radius: 0; +} + +.button.last, .text-field.last, .text-area.last, .split-menu-button.last, .toggle-button.last, .menu-button.last { + -fx-border-radius: 0 4 4 0; + -fx-background-radius: 0 4 4 0; +} +VBox > .button.last, +VBox > .menu-button.last, +VBox > .toggle-button.last, +VBox > .split-menu-button.last, +VBox > .text-field.last, +VBox > .text-area.last { + -fx-border-radius: 0 0 4 4; + -fx-background-radius: 0 0 4 4; +} + +VBox > .split-menu-button.last > .label { + -fx-border-radius: 0 0 0 4; + -fx-background-radius: 0 0 0 3; +} +VBox > .split-menu-button.last > .arrow-button { + -fx-border-radius: 0 0 4 0; + -fx-background-radius: 0 0 3 0; +} + +/*button styles*/ + +/*default button settings*/ + +/*bgcolor setting*/ +.color-picker,.date-picker > .arrow-button, +.number-button,.left-arrow-button,.right-arrow-button, +.button,.split-menu-button,.toggle-button,.menu-button, +.font-menu-button, .split-menu-button > .label, .split-menu-button > .arrow-button { + -fx-background-color: white; +} + +.color-picker,.date-picker > .arrow-button, +.button,.menu-button,.toggle-button,.number-button,.left-arrow-button,.right-arrow-button, +.font-menu-button, +.split-menu-button > .label,.split-menu-button > .arrow-button { + -fx-border-color: #cccccc; + -fx-text-fill: #000000; +} +/*just for the special split menu button*/ +.split-menu-button > .label { + -fx-border-width: 1 0 1 1; +} +/*for date picker arrow button*/ +.date-picker > .arrow-button { + -fx-border-radius: 0 4 4 0; +} +.combo-box > .arrow-button, .choice-box > .arrow-button { + -fx-border-width: 0; +} +/*hover state*/ +.color-picker:hover, +.date-picker:hover > .arrow-button, +.combo-box:hover,.choice-box:hover, +.number-button:hover,.left-arrow-button:hover,.right-arrow-button:hover, +.button:hover,.menu-button:hover,.toggle-button:hover, +.font-menu-button:hover, +.split-menu-button > .label:hover, .split-menu-button > .arrow-button:hover { + -fx-background-color: #e6e6e6; + -fx-border-color: #acacac; +} +/*pressed selected*/ +.color-picker:pressed,.color-picker:selected, +.number-button:pressed,.number-button:selected, +.date-picker:pressed > .arrow-button, +.combo-box:pressed > .arrow-button,.combo-box:selected > .arrow-button, +.choice-box:pressed > .arrow-button,.choice-box:selected > .arrow-button, +.font-menu-button:pressed,.font-menu-button:selected, +.left-arrow-button:pressed,.left-arrow-button:selected, +.right-arrow-button:pressed,.right-arrow-button:selected, +.button:pressed, .button:selected,.menu-button:pressed,.menu-button:selected +,.toggle-button:pressed,.toggle-button:selected, +.split-menu-button:pressed > .label, .split-menu-button > .arrow-button:pressed { + -fx-background-color: #e6e6e6; + -fx-border-color: #acacac; + -fx-effect: innershadow(gaussian, #adadad, 10, 0, 0, 3); +} + +/*primary*/ + +.button.primary,.split-menu-button.primary,.toggle-button.primary,.menu-button.primary, +.split-menu-button.primary > .label, .split-menu-button.primary > .arrow-button { + -fx-background-color: #b77714; +} + +.button.primary,.menu-button.primary,.toggle-button.primary, +.split-menu-button.primary > .label,.split-menu-button.primary > .arrow-button { + -fx-border-color: #a46a37; + -fx-text-fill: white; +} +/*hover state*/ +.button.primary:hover,.menu-button.primary:hover,.toggle-button.primary:hover, +.split-menu-button.primary > .label:hover, .split-menu-button.primary > .arrow-button:hover { + -fx-border-color: #744d15; + -fx-background-color: #905710; +} +/*pressed selected*/ +.button.primary:pressed, .button.primary:selected, +.menu-button.primary:pressed,.menu-button.primary:selected +,.toggle-button.primary:pressed,.toggle-button.primary:selected, +.split-menu-button.primary:pressed > .label, .split-menu-button.primary > .arrow-button:pressed { + -fx-background-color: #905710; + -fx-border-color: #744d15; + -fx-effect: innershadow(gaussian, #744d15, 10, 0, 0, 3); +} + +/*success*/ + +.button.success,.split-menu-button.success,.toggle-button.success,.menu-button.success, +.split-menu-button.success > .label, .split-menu-button.success > .arrow-button { + -fx-background-color: #5cb85c; +} + +.button.success,.menu-button.success,.toggle-button.success, +.split-menu-button.success > .label,.split-menu-button.success > .arrow-button { + -fx-border-color: #4cae4c; + -fx-text-fill: white; +} +/*hover state*/ +.button.success:hover,.menu-button.success:hover,.toggle-button.success:hover, +.split-menu-button.success > .label:hover, .split-menu-button.success > .arrow-button:hover { + -fx-border-color: #398439; + -fx-background-color: #449d44; +} +/*pressed selected*/ +.button.success:pressed, .button.success:selected, +.menu-button.success:pressed,.menu-button.success:selected +,.toggle-button.success:pressed,.toggle-button.success:selected, +.split-menu-button.success:pressed > .label, .split-menu-button.success > .arrow-button:pressed { + -fx-background-color: #449d44; + -fx-border-color: #398439; + -fx-effect: innershadow(gaussian, #398439, 10, 0, 0, 3); +} + +/*info*/ + +.button.info,.split-menu-button.info,.toggle-button.info,.menu-button.info, +.split-menu-button.info > .label, .split-menu-button.info > .arrow-button { + -fx-background-color: #e2ab40; +} + +.button.info,.menu-button.info,.toggle-button.info, +.split-menu-button.info > .label,.split-menu-button.info > .arrow-button { + -fx-border-color: #e29b23; + -fx-text-fill: white; +} +/*hover state*/ +.button.info:hover,.menu-button.info:hover,.toggle-button.info:hover, +.split-menu-button.info > .label:hover, .split-menu-button.info > .arrow-button:hover { + -fx-border-color: #bc862a; + -fx-background-color: #d59735; +} +/*pressed selected*/ +.button.info:pressed, .button.info:selected, +.menu-button.info:pressed,.menu-button.info:selected +,.toggle-button.info:pressed,.toggle-button.info:selected, +.split-menu-button.info:pressed > .label, .split-menu-button.info > .arrow-button:pressed { + -fx-background-color: #31b0d5; + -fx-border-color: #269abc; + -fx-effect: innershadow(gaussian, #269abc, 10, 0, 0, 3); +} + +/*warning*/ + +.button.warning,.split-menu-button.warning,.toggle-button.warning,.menu-button.warning, +.split-menu-button.warning > .label, .split-menu-button.warning > .arrow-button { + -fx-background-color: #f0ad4e; +} + +.button.warning,.menu-button.warning,.toggle-button.warning, +.split-menu-button.warning > .label,.split-menu-button.warning > .arrow-button { + -fx-border-color: #eea236; + -fx-text-fill: white; +} +/*hover state*/ +.button.warning:hover,.menu-button.warning:hover,.toggle-button.warning:hover, +.split-menu-button.warning > .label:hover, .split-menu-button.warning > .arrow-button:hover { + -fx-border-color: #d58512; + -fx-background-color: #ec971f; +} +/*pressed selected*/ +.button.warning:pressed, .button.warning:selected, +.menu-button.warning:pressed,.menu-button.warning:selected +,.toggle-button.warning:pressed,.toggle-button.warning:selected, +.split-menu-button.warning:pressed > .label, .split-menu-button.warning > .arrow-button:pressed { + -fx-background-color: #ec971f; + -fx-border-color: #d58512; + -fx-effect: innershadow(gaussian, #d58512, 10, 0, 0, 3); +} + +/*danger*/ + +.button.danger,.split-menu-button.danger,.toggle-button.danger,.menu-button.danger, +.split-menu-button.danger > .label, .split-menu-button.danger > .arrow-button { + -fx-background-color: #d9534f; +} + +.button.danger,.menu-button.danger,.toggle-button.danger, +.split-menu-button.danger > .label,.split-menu-button.danger > .arrow-button { + -fx-border-color: #d43f3a; + -fx-text-fill: white; +} +/*hover state*/ +.button.danger:hover,.menu-button.danger:hover,.toggle-button.danger:hover, +.split-menu-button.danger > .label:hover, .split-menu-button.danger > .arrow-button:hover { + -fx-border-color: #ac2925; + -fx-background-color: #c9302c; +} +/*pressed selected*/ +.button.danger:pressed, .button.danger:selected, +.menu-button.danger:pressed,.menu-button.danger:selected +,.toggle-button.danger:pressed,.toggle-button.danger:selected, +.split-menu-button.danger:pressed > .label, .split-menu-button.danger > .arrow-button:pressed { + -fx-border-color: #ac2925; + -fx-background-color: #c9302c; + -fx-effect: innershadow(gaussian, #ac2925, 10, 0, 0, 3); +} + +.menu-item { + -fx-min-width: 200; +} + +.menu-item:focused { + -fx-background-color: #f5f5f5; +} + +.menu-item:focused > * { + -fx-text-fill: #000000; +} +.menu-item:focused .arrow { + -fx-background-color: #333333; +} + +.check-menu-item:checked:hover > .left-container > .check, +.check-menu-item:checked:focused > .left-container > .check, +.radio-menu-item:checked:hover > .left-container > .radio, +.radio-menu-item:checked:focused > .left-container > .radio { + -fx-background-color: #333333; +} + +.context-menu { + -fx-border-radius: 4; + -fx-background-radius: 4; + -fx-border-color: #bebec0; +} + +.context-menu > * { + -fx-padding: 5 0 5 0; +} + +.separator { + -fx-padding: 5 0 5 0; +} + +.text-field { + -fx-pref-height: 30; +} + +.combo-box, .choice-box { + -fx-background-insets: 0; + -fx-border-color: #cecece; + -fx-padding: -1; + -fx-border-width: 1; +} +.combo-box, .choice-box, .color-picker, .date-picker { + -fx-border-radius: 4; + -fx-background-radius: 4; + -fx-pref-height: 30; +} + +.combo-box:editable > .arrow-button { + -fx-background-color: white; +} + +.combo-box:editable > .arrow-button:hover { + -fx-background-color: #e6e6e6; +} + +.combo-box:editable > .arrow-button:pressed { + -fx-effect: innershadow(gaussian, #adadad, 10, 0, 0, 3); +} + +.combo-box > .text-input, .date-picker > .text-input { + -fx-background-radius: 4 0 0 4; + -fx-border-width: 0; +} + +.text-field, .text-area { + -fx-border-color: #cccccc; + -fx-background-color: white; + -fx-border-radius: 4; + -fx-background-radius: 4; + -fx-effect: innershadow(gaussian, transparent, 0, 0, 0, 0); +} + +.text-field:focused, .text-area:focused { + -fx-border-color: #e9b365; + -fx-effect: dropshadow(gaussian, #e9b365, 10, 0, 0, 0); +} + +.text-area .scroll-pane, .text-area .scroll-pane .content { + -fx-background-color: white; + -fx-background-radius: 4; +} + +.tab-pane .tab-header-background { + -fx-background-color: #f4f4f4; +} +.tab-pane.plain .tab-header-background { + -fx-background-color: transparent; +} + +.tab-pane .tab-header-area .tab { + -fx-border-radius: 4 4 0 0; + -fx-background-radius: 5 5 0 0; + -fx-background-color: transparent; + -fx-border-color: transparent; + -fx-padding: 3 10 5 10; + -fx-background-insets: 0; +} + +.tab-pane .tab-header-area .tab .tab-label { + -fx-text-fill: #b77714; +} + +.tab-pane .tab-header-area .tab:hover { + -fx-background-color: #eeeeee; +} + +.tab-pane .tab-header-area .tab:selected { + -fx-focus-color: transparent; + -fx-border-color: #dddddd #dddddd white #dddddd; + -fx-background-color: white; +} +.tab-pane .tab-header-area .tab:selected .tab-label { + -fx-text-fill: #333333; +} +.tab-pane > .tab-content-area { + -fx-background-color: white; +} + +.tab-pane .tab-header-area .tab .tab-label { + -fx-focus-color: transparent; +} + +.tab-pane:focused > .tab-header-area > .headers-region > .tab:selected .focus-indicator { + -fx-border-color: transparent; +} + +.tab-pane > .tab-header-area > .headers-region > .tab > .tab-container > .tab-close-button { + -fx-background-color: #b77714; +} +.tab-pane > .tab-header-area > .headers-region > .tab:selected > .tab-container > .tab-close-button { + -fx-background-color: #333333; +} +.tab-pane > .tab-header-area > .headers-region > .tab > .tab-container > .tab-close-button:hover { + -fx-background-color: red; + -fx-cursor: hand; +} + +.scroll-bar { + -fx-background-color: transparent; + -fx-background-radius: 0; + -fx-block-increment: 50; +} + +.corner { + -fx-background-color: transparent; +} + +.scroll-bar .decrement-button, .scroll-bar .decrement-arrow { + visibility: hidden; + -fx-pref-height: 1; + -fx-pref-width: 1; +} + +.scroll-bar .increment-button, .scroll-bar .increment-arrow { + visibility: hidden; + -fx-pref-height: 1; + -fx-pref-width: 1; +} + +.scroll-bar:vertical { + -fx-pref-width: 10; +} + +.scroll-bar:horizontal { + -fx-pref-height: 10; +} + +.scroll-bar:horizontal .track, +.scroll-bar:vertical .track { + -fx-background-color: transparent; + -fx-border-color: transparent; + -fx-background-radius: 5; +} + +.scroll-bar:vertical .track-background, +.scroll-bar:horizontal .track-background { + -fx-background-color: transparent; + -fx-background-insets: 0; + -fx-background-radius: 5; +} + +.scroll-bar:horizontal .thumb { + -fx-background-color: #c9c9c9; + -fx-background-insets: 2 0 2 0; + -fx-background-radius: 5; +} + +.scroll-bar:vertical .thumb { + -fx-background-color: #c9c9c9; + -fx-background-insets: 0 2 0 2; + -fx-background-radius: 5; +} + +.scroll-bar:horizontal .thumb:hover, +.scroll-bar:vertical .thumb:hover { + -fx-background-color: #b5b5b5; +} + +.scroll-bar:horizontal .thumb:pressed, +.scroll-bar:vertical .thumb:pressed { + -fx-background-color: #a0a0a0; +} + +.scroll-bar:vertical .increment-button, .scroll-bar:vertical .decrement-button { + -fx-background-color: transparent; + -fx-background-radius: 5; + -fx-padding: 5; +} + +.scroll-bar:horizontal .increment-button, .scroll-bar:horizontal .decrement-button { + -fx-background-color: transparent; + -fx-background-radius: 5; + -fx-padding: 5; +} + +.scroll-bar:vertical:focused, +.scroll-bar:horizontal:focused { + -fx-background-color: transparent, rgb(96, 96, 96), rgb(96, 96, 96); +} + +.menu-bar { + -fx-background-color: white; +} +.menu-bar > .container > .menu-button { + -fx-background-radius: 0; + -fx-background-insets: 0; + -fx-border-width: 0; + -fx-border-radius: 0; +} +.menu-bar > .container > .menu-button:hover, +.menu-bar > .container > .menu-button:showing { + -fx-background-color: #e2b14a; +} + +.color-palette { + -fx-background-color: white; +} + +.pagination > .pagination-control > .control-box { + -fx-spacing: -1; +} +.pagination > .pagination-control > .control-box > .left-arrow-button { + -fx-border-radius: 3 0 0 3; + -fx-border-insets: 0 0 0 7; + -fx-background-insets: 0 0 0 7, 0 0 0 5, 1 1 1 6, 2 2 2 7; +} +.pagination > .pagination-control > .control-box > .right-arrow-button { + -fx-border-radius: 0 3 3 0; + -fx-border-insets: 0 7 0 0; + -fx-background-insets: 0 7 -1 0, 0 5 0 0, 1 6 1 1, 2 7 2 2; +} +.pagination > .pagination-control > .control-box > .number-button { + -fx-background-radius: 0; + -fx-border-radius: 0; +} + +.progress-bar > .track { + -fx-pref-height: 10; + -fx-background-radius: 3; + -fx-effect: innershadow(gaussian, #e4e4e4, 4, 0, 0, 1); + -fx-background-color: #f5f5f5; +} + +.progress-bar > .bar { + -fx-background-insets: 0; + -fx-background-color: #b77714; +} + +.progress-bar.success > .bar { + -fx-background-insets: 0; + -fx-background-color: #5cb85c; +} + +.progress-bar.info > .bar { + -fx-background-insets: 0; + -fx-background-color: #5bc0de; +} + +.progress-bar.warning > .bar { + -fx-background-insets: 0; + -fx-background-color: #f0ad4e +} + +.progress-bar.danger > .bar { + -fx-background-insets: 0; + -fx-background-color: #d9534f; +} + +.tooltip { + -fx-background: white; + -fx-text-fill: #333333; + -fx-background-color: white; + -fx-background-radius: 4px; + -fx-border-radius: 4px; + -fx-border-color: #C0C0C0; + -fx-background-insets: 0; + -fx-padding: 0.667em 0.75em 0.667em 0.75em; /* 10px */ + -fx-effect: dropshadow(three-pass-box, rgba(0, 0, 0, 0.5), 10, 0.0, 0, 3); + -fx-font-size: 0.85em; +} + +.tooltip.success { + -fx-background: #dff0d8; + -fx-background-color: #dff0d8; + -fx-text-fill: #99bb96; + -fx-border-color: #d6e9c6; +} + +.tooltip.info { + -fx-background: #f6e4c1; + -fx-background-color: #f6e4c1; + -fx-text-fill: #8f5c16; + -fx-border-color: #f7c195; +} + +.tooltip.warning { + -fx-background: #fcf8e3; + -fx-background-color: #fcf8e3; + -fx-text-fill: #8a6e3c; + -fx-border-color: #faebcc; +} + +.tooltip.danger { + -fx-background: #f2dede; + -fx-background-color: #f2dede; + -fx-text-fill: #a94442; + -fx-border-color: #ebccd1; +} + +.titled-pane > .title { + -fx-background-color: #f5f5f5; + -fx-border-color: #dddddd; + /*-fx-background-insets: 5, 1, 5;*/ + -fx-background-radius: 3 3 0 0, 2 2 0 0, 1 1 0 0; + -fx-border-radius: 3 3 0 0, 2 2 0 0, 1 1 0 0; + -fx-padding: 11 +} + +.titled-pane > .content { + -fx-background-color: white; + -fx-background-radius: 0 0 4 4; + -fx-border-radius: 0 0 4 4; + -fx-border-color: #dddddd; + /*-fx-padding: -11;*/ +} + +.titled-pane.primary { + -fx-text-fill: white; +} + +.titled-pane.primary > .title { + -fx-background-color: #b77714; + -fx-border-color: #b77714; +} + +.titled-pane.primary > .content { + -fx-border-color: #b77714; +} + +.titled-pane.success .arrow, +.titled-pane.info .arrow, +.titled-pane.warning .arrow, +.titled-pane.danger .arrow { + -fx-background-color: -fx-mark-highlight-color, -fx-mark-color; +} + +.titled-pane.success { + -fx-text-fill: #3c763d; +} + +.titled-pane.success > .title { + -fx-background-color: #dff0d8; + -fx-border-color: #d6e9c6; +} + +.titled-pane.success > .content { + -fx-border-color: #d6e9c6; +} + +.titled-pane.info { + -fx-text-fill: #8f5c16; +} + +.titled-pane.info > .title { + -fx-background-color: #f7d9c2; + -fx-border-color: #f7c195; +} + +.titled-pane.info > .content { + -fx-border-color: #f7c195; +} + +.titled-pane.warning { + -fx-text-fill: #8a6d3b; +} + +.titled-pane.warning > .title { + -fx-background-color: #fcf8e3; + -fx-border-color: #faebcc; +} + +.titled-pane.warning > .content { + -fx-border-color: #faebcc; +} + +.titled-pane.danger { + -fx-text-fill: #a94442; +} + +.titled-pane.danger > .title { + -fx-background-color: #f2dede; + -fx-border-color: #eacbd0; +} + +.titled-pane.danger > .content { + -fx-border-color: #eacbd0; +} + +.accordion > .titled-pane > .title, +.accordion > .titled-pane > .content { + -fx-background-radius: 0; + -fx-border-radius: 0; +} + +.tool-bar:vertical { /* left */ + -fx-border-color: transparent #dddddd transparent transparent; +} + +.tool-bar { /* top */ + -fx-background-color: white; + -fx-border-color: transparent transparent #dddddd transparent; +} + +.tool-bar:vertical { + -fx-background-insets: 0, 0 1 0 0; +} + +/*table view columns*/ +.filler,.column-header,.show-hide-columns-button { + -fx-background-color: #dddddd, white, white; +} +.show-hide-columns-button { + -fx-border-width: 0; + -fx-background-insets: 0 0 1 1; +} +.column-header:hover,.show-hide-columns-button:hover { + -fx-background-color: #dddddd, white, #f8f8f8; +} +.column-header-background > .filler { + -fx-border-color: transparent #dddddd transparent transparent; + -fx-border-insets: 0 1 0 0; +} +.column-drag-header { + -fx-background-color: #2fb254; +} + +/*split pane*/ +.split-pane > .split-pane-divider { + -fx-background-color: white; + -fx-border-color: #eeeeee; + -fx-pref-width: 8; +} +.split-pane:horizontal > .split-pane-divider { + -fx-background-insets: 0, 0 1 0 1; + -fx-border-width: 0 1 0 1; +} +/* vertical the two nodes are placed on top of each other. */ +.split-pane:vertical > .split-pane-divider { + -fx-background-insets: 0, 1 0 1 0; + -fx-border-width: 1 0 1 0; +} +.split-pane > .split-pane-divider:hover { + -fx-background-color: #E0E0E0; +} + +/******************************************************************************* + * * + * CheckBox * + * * + ******************************************************************************/ +.check-box > .box { + -fx-background-radius: 3; + /*-fx-padding: 0.166667em 0.166667em 0.25em 0.25em; !* 2 2 3 3 *!*/ + -fx-padding:0; + -fx-border-color: #e2b14a; + -fx-border-radius: 3; + -fx-background-color: white; +} +.check-box > .box > .mark { + -fx-background-color: null; + -fx-padding: 0.416667em 0.416667em 0.5em 0.5em; /* 5 5 6 6 */ + -fx-shape: "M927.936 272.992l-68.288-68.288c-12.608-12.576-32.96-12.576-45.536 0l-409.44 409.44-194.752-196.16c-12.576-12.576-32.928-12.576-45.536 0l-68.288 68.288c-12.576 12.608-12.576 32.96 0 45.536l285.568 287.488c12.576 12.576 32.96 12.576 45.536 0l500.736-500.768c12.576-12.544 12.576-32.96 0-45.536z"; + -fx-background-insets: -3 -3 1 0; +} +.check-box { + -fx-label-padding: 0.2em 0.0em 0.3em 0.416667em; /* 0 0 0 5 */ + -fx-text-fill: -fx-text-background-color; + -fx-padding: 0 0 2 0; +} +.check-box:indeterminate > .box { + -fx-padding: 0; +} +.check-box:selected > .box > .mark { + -fx-background-color: linear-gradient(to bottom, #e2b14a, #e29a16); +} + +/******************************************************************************* + * * + * RadioButton * + * * + ******************************************************************************/ + +.radio-button { + -fx-label-padding: 0.0em 0.0em 0.1em 0.416667em; /* 0 0 0 5 */ + -fx-text-fill: -fx-text-background-color; + -fx-padding: 0 0 .5 0; +} +.radio-button > .radio, +.radio-button:focused > .radio { + -fx-border-color: #e2b14a; + -fx-border-radius: 1em; + -fx-background-radius: 1.0em; /* large value to make sure this remains circular */ + -fx-padding: 1 2 3 2; + -fx-background-color: white; +} +.radio-button > .radio > .dot { + -fx-background-color: transparent; + -fx-background-radius: 1.0em; /* large value to make sure this remains circular */ + -fx-padding: 0.333333em; /* 4 -- radius of the inner black dot when selected */ + -fx-background-insets: 3 2 1 2; +} +.radio-button:selected > .radio,.radio-button:hover > .radio { + -fx-fill-color: #e2b14a; +} +.radio-button:pressed > .radio { + -fx-background-color: #e2ab40; +} +.radio-button:selected > .radio > .dot { + -fx-background-color: #e2b14a; +} + +/*common things*/ +.check-box:hover > .box, +.check-box:selected > .box, +.radio-button:hover > .radio, +.radio-button:selected > .radio { + -fx-background-color: linear-gradient(to bottom, white, #efefef); +} + +.check-box:pressed > .box, +.radio-button:pressed > .radio { + -fx-background-color: #e2ab40; +} + + +.hyperlink { + -fx-text-fill: #c88600; +} + +.internalExtension { + -fx-background-color: #fff0e3; +} + +.disconnectedExtension { + -fx-background-color: #CCCCCC; +} + +.connectedExtension { + -fx-background-color: #FFFFFF; +} \ No newline at end of file diff --git a/G-Earth/src/main/resources/gearth/ui/info/Info.fxml b/G-Earth/src/main/resources/gearth/ui/info/Info.fxml index c15b547..b78aabc 100644 --- a/G-Earth/src/main/resources/gearth/ui/info/Info.fxml +++ b/G-Earth/src/main/resources/gearth/ui/info/Info.fxml @@ -15,7 +15,7 @@ -