diff --git a/src/de/deadlocker8/loadingbar/main/Main.java b/src/de/deadlocker8/loadingbar/main/Main.java index 3e6a7b36597374a06a617b674ffaa5cec8743562..01f73b3645f07072c2010e51214da9eb12aca32a 100644 --- a/src/de/deadlocker8/loadingbar/main/Main.java +++ b/src/de/deadlocker8/loadingbar/main/Main.java @@ -32,8 +32,9 @@ public class Main extends Application stage.setResizable(true); stage.getIcons().add(new Image("/de/deadlocker8/loadingbar/resources/icon.png")); - stage.setTitle(bundle.getString("app.name")); + stage.setTitle(bundle.getString("app.name")); stage.setScene(scene); + stage.getScene().getStylesheets().add("de/deadlocker8/loadingbar/ui/style.css"); stage.show(); } catch(Exception e) diff --git a/src/de/deadlocker8/loadingbar/ui/Controller.java b/src/de/deadlocker8/loadingbar/ui/Controller.java index 8502d4237be2bf6c17e362829d5843e1b1b3c322..6f1844a35489508dfb7d33b1b1f6d53fadd6ad16 100644 --- a/src/de/deadlocker8/loadingbar/ui/Controller.java +++ b/src/de/deadlocker8/loadingbar/ui/Controller.java @@ -1,58 +1,119 @@ package de.deadlocker8.loadingbar.ui; +import java.util.Collections; import java.util.Locale; import java.util.Random; import java.util.ResourceBundle; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; import javafx.fxml.FXML; +import javafx.scene.Node; import javafx.scene.control.Label; import javafx.scene.control.ProgressBar; import javafx.scene.image.Image; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.StackPane; import javafx.stage.Stage; import tools.AlertGenerator; public class Controller { - @FXML private Label label; + @FXML private AnchorPane mainPane; + @FXML private Label labelTarget; + @FXML private Label labelUser; + @FXML private Label labelMessage; @FXML private ProgressBar progressBar; + @FXML private ProgressBar progressBarTarget; + @FXML private StackPane stackPane; private Stage stage; private Image icon = new Image("de/deadlocker8/loadingbar/resources/icon.png"); private final ResourceBundle bundle = ResourceBundle.getBundle("de/deadlocker8/loadingbar/main/", Locale.GERMANY); private CountdownTimer timer; + private int targetPercentage; + private boolean swapped; public void init(Stage stage) { this.stage = stage; + + mainPane.setStyle("-fx-background-color: #333333"); + stackPane.setStyle("-fx-background-color: derive(#333333, -60%)"); + progressBar.setStyle("-fx-accent: white;"); + labelTarget.setStyle("-fx-text-fill: white; -fx-font-size: 40; -fx-font-weight: bold;"); + labelUser.setStyle("-fx-text-fill: white; -fx-font-size: 30; -fx-font-weight: bold;"); + labelMessage.setStyle("-fx-text-fill: white; -fx-font-size: 30; -fx-font-weight: bold;"); } - + public void buttonStart() { + if(swapped) + { + swapProgressBars(); + swapped = false; + } + Random random = new Random(); - int targetPercentage = 10 + random.nextInt(90 - 10 + 1); - label.setText(String.valueOf(targetPercentage)); - + targetPercentage = 15 + random.nextInt(90 - 15 + 1); + labelTarget.setText(String.valueOf(targetPercentage)); + labelUser.setText(""); + labelMessage.setText(""); + + progressBarTarget.setProgress(0.0); + progressBar.setProgress(0.0); timer = new CountdownTimer(4.0, this); } - + public void buttonStop() { stop(timer.stop()); } - + public void updateProgress(double value) { progressBar.setProgress(value); } - + + private void swapProgressBars() + { + ObservableList<Node> workingCollection = FXCollections.observableArrayList(stackPane.getChildren()); + Collections.swap(workingCollection, 0, 1); + stackPane.getChildren().setAll(workingCollection); + } + public void stop(double value) { int userPercentage = (int)(value * 100); - - label.setText(label.getText() + " - " + userPercentage); + labelUser.setText(String.valueOf(userPercentage)); + progressBar.setProgress(userPercentage / 100.0); + progressBarTarget.setProgress(targetPercentage / 100.0); + progressBarTarget.setStyle("-fx-accent: red"); + + if(userPercentage < targetPercentage) + { + swapped = true; + swapProgressBars(); + } + + int difference = Math.abs(targetPercentage - userPercentage); + switch(difference) + { + case 0: + labelMessage.setText("Awesome!"); + break; + case 1: + labelMessage.setText("Close One!"); + break; + case 2: + labelMessage.setText("Almost"); + break; + default: + labelMessage.setText("Missed by " + difference); + } } - + public Stage getStage() { return stage; @@ -60,6 +121,6 @@ public class Controller public void about() { - AlertGenerator.showAboutAlert(bundle.getString("app.name"), bundle.getString("version.name"), bundle.getString("version.code"), bundle.getString("version.date"), bundle.getString("author"), icon, stage, null, false); + AlertGenerator.showAboutAlert(bundle.getString("app.name"), bundle.getString("version.name"), bundle.getString("version.code"), bundle.getString("version.date"), bundle.getString("author"), icon, stage, null, false); } } \ No newline at end of file diff --git a/src/de/deadlocker8/loadingbar/ui/GUI.fxml b/src/de/deadlocker8/loadingbar/ui/GUI.fxml index 076a4f5a9032f39190c0af04c3036f30ea18e124..3301e971fc8998d6d7390df3f338d24619eee087 100644 --- a/src/de/deadlocker8/loadingbar/ui/GUI.fxml +++ b/src/de/deadlocker8/loadingbar/ui/GUI.fxml @@ -1,20 +1,62 @@ <?xml version="1.0" encoding="UTF-8"?> +<?import javafx.geometry.Insets?> <?import javafx.scene.control.Button?> <?import javafx.scene.control.Label?> <?import javafx.scene.control.ProgressBar?> <?import javafx.scene.layout.AnchorPane?> +<?import javafx.scene.layout.StackPane?> +<?import javafx.scene.layout.VBox?> <?import javafx.scene.text.Font?> -<AnchorPane prefHeight="400.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.deadlocker8.loadingbar.ui.Controller"> +<AnchorPane fx:id="mainPane" prefHeight="400.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.deadlocker8.loadingbar.ui.Controller"> <children> - <ProgressBar fx:id="progressBar" layoutX="25.0" layoutY="129.0" prefWidth="200.0" progress="0.0" AnchorPane.leftAnchor="25.0" AnchorPane.rightAnchor="25.0" /> - <Button layoutX="174.0" layoutY="174.0" mnemonicParsing="false" onAction="#buttonStart" text="Start" /> - <Label fx:id="label" layoutX="174.0" layoutY="89.0" prefHeight="27.0" prefWidth="147.0"> - <font> - <Font name="System Bold" size="18.0" /> - </font> - </Label> - <Button layoutX="240.0" layoutY="174.0" mnemonicParsing="false" onAction="#buttonStop" text="Stop" /> + <VBox alignment="TOP_CENTER" layoutX="25.0" layoutY="16.0" prefHeight="363.0" prefWidth="350.0" AnchorPane.bottomAnchor="25.0" AnchorPane.leftAnchor="25.0" AnchorPane.rightAnchor="25.0" AnchorPane.topAnchor="25.0"> + <children> + <Label fx:id="labelMessage" alignment="CENTER" maxWidth="1.7976931348623157E308" prefHeight="27.0"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + </Label> + <Label fx:id="labelTarget" alignment="CENTER" maxWidth="1.7976931348623157E308" prefHeight="27.0"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + <VBox.margin> + <Insets top="15.0" /> + </VBox.margin> + </Label> + <StackPane fx:id="stackPane"> + <children> + <ProgressBar fx:id="progressBar" maxWidth="1.7976931348623157E308" progress="0.0" /> + <ProgressBar fx:id="progressBarTarget" maxWidth="1.7976931348623157E308" progress="0.0" /> + </children> + <VBox.margin> + <Insets top="15.0" /> + </VBox.margin> + </StackPane> + <Label fx:id="labelUser" alignment="CENTER" maxWidth="1.7976931348623157E308" prefHeight="27.0"> + <font> + <Font name="System Bold" size="18.0" /> + </font> + <VBox.margin> + <Insets top="15.0" /> + </VBox.margin> + </Label> + <Button mnemonicParsing="false" onAction="#buttonStop" text="STOP"> + <VBox.margin> + <Insets top="20.0" /> + </VBox.margin> + <font> + <Font name="System Bold" size="24.0" /> + </font> + </Button> + <Button mnemonicParsing="false" onAction="#buttonStart" text="Start"> + <VBox.margin> + <Insets top="50.0" /> + </VBox.margin> + </Button> + </children> + </VBox> </children> </AnchorPane> diff --git a/src/de/deadlocker8/loadingbar/ui/style.css b/src/de/deadlocker8/loadingbar/ui/style.css new file mode 100644 index 0000000000000000000000000000000000000000..22e6ba3d479400f0e72cd17c27b6b07361b10a50 --- /dev/null +++ b/src/de/deadlocker8/loadingbar/ui/style.css @@ -0,0 +1,18 @@ +.progress-bar { + -fx-indeterminate-bar-length: 60; + -fx-indeterminate-bar-escape: true; + -fx-indeterminate-bar-flip: true; + -fx-indeterminate-bar-animation-time: 2; +} +.progress-bar > .bar { + -fx-background-color: -fx-accent; + -fx-background-insets: 0 0 0 0; + -fx-background-radius: 0; + -fx-padding: 0.75em; +} + +.progress-bar > .track { + -fx-background-color: transparent; + -fx-background-insets: 0, 0 0 0 0, 0 0 0 0; + -fx-background-radius: 0, 0, 0; +} \ No newline at end of file