From fb0b7f0fb65fc920623e4d73a7926b0e0b892c31 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Thu, 5 Jan 2017 16:30:07 +0100
Subject: [PATCH] Fixed #58

---
 bin/de/bricked/ui/EscapeDialog.fxml           | 68 +++++++++++++++++++
 src/de/bricked/ui/EscapeDialog.fxml           | 68 +++++++++++++++++++
 src/de/bricked/ui/EscapeDialogController.java | 47 +++++++++++++
 src/de/bricked/ui/LevelController.java        | 66 ++++++++++++------
 4 files changed, 227 insertions(+), 22 deletions(-)
 create mode 100644 bin/de/bricked/ui/EscapeDialog.fxml
 create mode 100644 src/de/bricked/ui/EscapeDialog.fxml
 create mode 100644 src/de/bricked/ui/EscapeDialogController.java

diff --git a/bin/de/bricked/ui/EscapeDialog.fxml b/bin/de/bricked/ui/EscapeDialog.fxml
new file mode 100644
index 0000000..bb6ebea
--- /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 0000000..bb6ebea
--- /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 0000000..03d9482
--- /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 9339dff..01fab42 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;
-- 
GitLab