diff --git a/bin/de/bricked/ui/EscapeDialog.fxml b/bin/de/bricked/ui/EscapeDialog.fxml new file mode 100644 index 0000000000000000000000000000000000000000..bb6ebea73d1a8780ab31fc2909f66cdd4689950e --- /dev/null +++ b/bin/de/bricked/ui/EscapeDialog.fxml @@ -0,0 +1,68 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.geometry.Insets?> +<?import javafx.scene.control.Button?> +<?import javafx.scene.control.Label?> +<?import javafx.scene.image.ImageView?> +<?import javafx.scene.layout.ColumnConstraints?> +<?import javafx.scene.layout.GridPane?> +<?import javafx.scene.layout.HBox?> +<?import javafx.scene.layout.Pane?> +<?import javafx.scene.layout.RowConstraints?> +<?import javafx.scene.layout.VBox?> +<?import javafx.scene.text.Font?> + +<GridPane hgap="14.0" maxHeight="+Infinity" maxWidth="+Infinity" minHeight="-Infinity" minWidth="-Infinity" vgap="20.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.bricked.ui.EscapeDialogController"> + <children> + <ImageView fx:id="imageView" fitHeight="60.0" fitWidth="60.0" pickOnBounds="true" preserveRatio="true" GridPane.columnIndex="0" GridPane.halignment="CENTER" GridPane.rowIndex="0" GridPane.valignment="TOP"> + <image> + <!-- place holder --> + </image> + </ImageView> + <VBox maxHeight="+Infinity" maxWidth="+Infinity" minHeight="-Infinity" prefWidth="400.0" spacing="7.0" GridPane.columnIndex="1" GridPane.rowIndex="0"> + <children> + <Label fx:id="detailsLabel" text="Do you really want to go back?" textAlignment="LEFT" wrapText="true"> + <font> + <Font name="System Bold" size="12.0" /> + </font> + </Label> + </children> + </VBox> + <HBox maxHeight="-Infinity" maxWidth="+Infinity" minHeight="-Infinity" minWidth="-Infinity" GridPane.columnIndex="1" GridPane.rowIndex="1"> + <children> + <Pane maxWidth="+Infinity" HBox.hgrow="ALWAYS" /> + <Button fx:id="okButton" minWidth="80.0" mnemonicParsing="false" onAction="#buttonOK" text="OK" HBox.hgrow="NEVER"> + <HBox.margin> + <Insets right="14.0" /> + </HBox.margin> + <font> + <Font name="System Bold" size="12.0" /> + </font> + </Button> + <HBox fx:id="okParent" alignment="CENTER"> + <children> + <Button fx:id="cancelButton" cancelButton="true" minWidth="80.0" mnemonicParsing="false" onAction="#buttonCancel" text="Abbrechen" HBox.hgrow="NEVER"> + <HBox.margin> + <Insets /> + </HBox.margin> + <font> + <Font name="System Bold" size="12.0" /> + </font> + </Button> + </children> + </HBox> + </children> + </HBox> + </children> + <columnConstraints> + <ColumnConstraints hgrow="NEVER" maxWidth="-Infinity" minWidth="-Infinity" /> + <ColumnConstraints halignment="CENTER" hgrow="ALWAYS" maxWidth="+Infinity" minWidth="-Infinity" /> + </columnConstraints> + <padding> + <Insets bottom="14.0" left="14.0" right="14.0" top="14.0" /> + </padding> + <rowConstraints> + <RowConstraints maxHeight="+Infinity" minHeight="-Infinity" valignment="CENTER" vgrow="ALWAYS" /> + <RowConstraints maxHeight="-Infinity" minHeight="-Infinity" vgrow="NEVER" /> + </rowConstraints> +</GridPane> diff --git a/src/de/bricked/ui/EscapeDialog.fxml b/src/de/bricked/ui/EscapeDialog.fxml new file mode 100644 index 0000000000000000000000000000000000000000..bb6ebea73d1a8780ab31fc2909f66cdd4689950e --- /dev/null +++ b/src/de/bricked/ui/EscapeDialog.fxml @@ -0,0 +1,68 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.geometry.Insets?> +<?import javafx.scene.control.Button?> +<?import javafx.scene.control.Label?> +<?import javafx.scene.image.ImageView?> +<?import javafx.scene.layout.ColumnConstraints?> +<?import javafx.scene.layout.GridPane?> +<?import javafx.scene.layout.HBox?> +<?import javafx.scene.layout.Pane?> +<?import javafx.scene.layout.RowConstraints?> +<?import javafx.scene.layout.VBox?> +<?import javafx.scene.text.Font?> + +<GridPane hgap="14.0" maxHeight="+Infinity" maxWidth="+Infinity" minHeight="-Infinity" minWidth="-Infinity" vgap="20.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.bricked.ui.EscapeDialogController"> + <children> + <ImageView fx:id="imageView" fitHeight="60.0" fitWidth="60.0" pickOnBounds="true" preserveRatio="true" GridPane.columnIndex="0" GridPane.halignment="CENTER" GridPane.rowIndex="0" GridPane.valignment="TOP"> + <image> + <!-- place holder --> + </image> + </ImageView> + <VBox maxHeight="+Infinity" maxWidth="+Infinity" minHeight="-Infinity" prefWidth="400.0" spacing="7.0" GridPane.columnIndex="1" GridPane.rowIndex="0"> + <children> + <Label fx:id="detailsLabel" text="Do you really want to go back?" textAlignment="LEFT" wrapText="true"> + <font> + <Font name="System Bold" size="12.0" /> + </font> + </Label> + </children> + </VBox> + <HBox maxHeight="-Infinity" maxWidth="+Infinity" minHeight="-Infinity" minWidth="-Infinity" GridPane.columnIndex="1" GridPane.rowIndex="1"> + <children> + <Pane maxWidth="+Infinity" HBox.hgrow="ALWAYS" /> + <Button fx:id="okButton" minWidth="80.0" mnemonicParsing="false" onAction="#buttonOK" text="OK" HBox.hgrow="NEVER"> + <HBox.margin> + <Insets right="14.0" /> + </HBox.margin> + <font> + <Font name="System Bold" size="12.0" /> + </font> + </Button> + <HBox fx:id="okParent" alignment="CENTER"> + <children> + <Button fx:id="cancelButton" cancelButton="true" minWidth="80.0" mnemonicParsing="false" onAction="#buttonCancel" text="Abbrechen" HBox.hgrow="NEVER"> + <HBox.margin> + <Insets /> + </HBox.margin> + <font> + <Font name="System Bold" size="12.0" /> + </font> + </Button> + </children> + </HBox> + </children> + </HBox> + </children> + <columnConstraints> + <ColumnConstraints hgrow="NEVER" maxWidth="-Infinity" minWidth="-Infinity" /> + <ColumnConstraints halignment="CENTER" hgrow="ALWAYS" maxWidth="+Infinity" minWidth="-Infinity" /> + </columnConstraints> + <padding> + <Insets bottom="14.0" left="14.0" right="14.0" top="14.0" /> + </padding> + <rowConstraints> + <RowConstraints maxHeight="+Infinity" minHeight="-Infinity" valignment="CENTER" vgrow="ALWAYS" /> + <RowConstraints maxHeight="-Infinity" minHeight="-Infinity" vgrow="NEVER" /> + </rowConstraints> +</GridPane> diff --git a/src/de/bricked/ui/EscapeDialogController.java b/src/de/bricked/ui/EscapeDialogController.java new file mode 100644 index 0000000000000000000000000000000000000000..03d94829c0683f9ba0aa5fba7ef8fe4a246cf714 --- /dev/null +++ b/src/de/bricked/ui/EscapeDialogController.java @@ -0,0 +1,47 @@ +package de.bricked.ui; + +import javafx.event.EventHandler; +import javafx.fxml.FXML; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import javafx.stage.Stage; + +public class EscapeDialogController +{ + @FXML private ImageView imageView; + + private LevelController levelController; + private Stage stage; + + public void init(LevelController levelController, Stage stage) + { + this.levelController = levelController; + this.stage = stage; + stage.getScene().setOnKeyPressed(new EventHandler<KeyEvent>() + { + @Override + public void handle(KeyEvent event) + { + if(event.getCode() == KeyCode.ESCAPE) + { + event.consume(); + } + } + }); + imageView.setImage(new Image("com/sun/javafx/scene/control/skin/modena/dialog-confirm@2x.png")); + } + + public void buttonOK() + { + levelController.back(); + stage.close(); + } + + public void buttonCancel() + { + levelController.restart(); + stage.close(); + } +} \ No newline at end of file diff --git a/src/de/bricked/ui/LevelController.java b/src/de/bricked/ui/LevelController.java index 9339dffc0bb53ae39f0411751f8b784ea7c342c0..01fab42b20fdfb50d60cca0063a051238d16095f 100644 --- a/src/de/bricked/ui/LevelController.java +++ b/src/de/bricked/ui/LevelController.java @@ -4,7 +4,6 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.Locale; -import java.util.Optional; import java.util.Random; import java.util.ResourceBundle; @@ -34,16 +33,16 @@ import javafx.beans.value.ObservableValue; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; import javafx.geometry.Insets; import javafx.geometry.Point2D; import javafx.geometry.Pos; import javafx.scene.Cursor; import javafx.scene.Group; +import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.Alert; -import javafx.scene.control.Alert.AlertType; import javafx.scene.control.Button; -import javafx.scene.control.ButtonType; import javafx.scene.control.Label; import javafx.scene.effect.Lighting; import javafx.scene.image.Image; @@ -62,6 +61,7 @@ import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.scene.text.Font; import javafx.scene.text.Text; +import javafx.stage.Modality; import javafx.stage.Stage; import javafx.stage.WindowEvent; import javafx.util.Duration; @@ -204,27 +204,49 @@ public class LevelController return; } - pause(); + pause(); - Alert alert = new Alert(AlertType.CONFIRMATION); - alert.setTitle("Close Level?"); - alert.setHeaderText(""); - alert.setContentText("Do you really want to go back?"); - Stage dialogStage = (Stage) alert.getDialogPane().getScene().getWindow(); - dialogStage.getIcons().add(icon); - dialogStage.initOwner(stage); - - Optional<ButtonType> result = alert.showAndWait(); - if(result.get() == ButtonType.OK) - { - back(); - event.consume(); + try + { + FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/de/bricked/ui/EscapeDialog.fxml")); + + Parent root = (Parent)fxmlLoader.load(); + Stage newStage = new Stage(); + newStage.setScene(new Scene(root)); + newStage.setTitle("Confirmation"); + newStage.initOwner(stage); + newStage.getIcons().add(icon); + EscapeDialogController newController = (EscapeDialogController)fxmlLoader.getController(); + newController.init(LevelController.this, newStage); + newStage.initModality(Modality.APPLICATION_MODAL); + newStage.setResizable(false); + newStage.show(); } - else - { - restart(); - event.consume(); + catch(IOException e1) + { + Logger.log(LogLevel.ERROR, Logger.exceptionToString(e1)); } + + +// Alert alert = new Alert(AlertType.CONFIRMATION); +// alert.setTitle("Close Level?"); +// alert.setHeaderText(""); +// alert.setContentText("Do you really want to go back?"); +// Stage dialogStage = (Stage) alert.getDialogPane().getScene().getWindow(); +// dialogStage.getIcons().add(icon); +// dialogStage.initOwner(stage); +// +// Optional<ButtonType> result = alert.showAndWait(); +// if(result.get() == ButtonType.OK) +// { +// back(); +// event.consume(); +// } +// else +// { +// restart(); +// event.consume(); +// } } //pause @@ -606,7 +628,7 @@ public class LevelController } } - private void restart() + public void restart() { gameState = GameState.RUNNING; previousTime = 0;