From 4d32a4ce8547453148ec673afd857c8fc755ea4e Mon Sep 17 00:00:00 2001
From: Max Wittig <max.wittig95@gmail.com>
Date: Sat, 3 Dec 2016 18:19:57 +0100
Subject: [PATCH] level pack input dialog stage working

---
 src/de/brickedleveleditor/main/Main.java      |  7 +---
 .../controller/LevelPackDialogController.java | 28 +++++++++++---
 .../ui/controller/MainController.java         |  2 -
 .../ui/fxml/level_pack_dialog_controller.fxml | 13 ++++++-
 .../utils/AlertGenerator.java                 | 37 +++++++++++++++++++
 5 files changed, 72 insertions(+), 15 deletions(-)
 create mode 100644 src/de/brickedleveleditor/utils/AlertGenerator.java

diff --git a/src/de/brickedleveleditor/main/Main.java b/src/de/brickedleveleditor/main/Main.java
index 265186d..a946ae6 100644
--- a/src/de/brickedleveleditor/main/Main.java
+++ b/src/de/brickedleveleditor/main/Main.java
@@ -28,10 +28,7 @@ public class Main extends Application
 			FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource("de/brickedleveleditor/ui/fxml/main_controller.fxml"));
 			Parent root = (Parent)loader.load();
 
-			Scene scene = new Scene(root, 800, 600);		
-
-			((MainController)loader.getController()).init(stage, null);
-
+			Scene scene = new Scene(root, 800, 600);
 			stage.setTitle(bundle.getString("app.name"));
 			stage.setScene(scene);
 			stage.setResizable(true);
@@ -44,8 +41,8 @@ public class Main extends Application
 					System.exit(0);
 				}
 			});
-
 			stage.show();
+            ((MainController)loader.getController()).init(stage, null);
 		}
 		catch(Exception e)
 		{
diff --git a/src/de/brickedleveleditor/ui/controller/LevelPackDialogController.java b/src/de/brickedleveleditor/ui/controller/LevelPackDialogController.java
index 6afc358..1ced35c 100644
--- a/src/de/brickedleveleditor/ui/controller/LevelPackDialogController.java
+++ b/src/de/brickedleveleditor/ui/controller/LevelPackDialogController.java
@@ -2,7 +2,9 @@ package de.brickedleveleditor.ui.controller;
 
 
 import de.bricked.game.paddle.PaddleSize;
+import de.brickedleveleditor.utils.AlertGenerator;
 import javafx.fxml.FXML;
+import javafx.scene.control.Alert;
 import javafx.scene.control.ComboBox;
 import javafx.scene.control.Spinner;
 import javafx.scene.control.TextField;
@@ -18,7 +20,13 @@ public class LevelPackDialogController extends AbstractController
     @Override
     protected void initController()
     {
+        initPaddleSizeComboBox();
+    }
 
+    private void initPaddleSizeComboBox()
+    {
+        paddleSizeComboBox.getItems().addAll(PaddleSize.values());
+        paddleSizeComboBox.getSelectionModel().selectFirst();
     }
 
     @FXML
@@ -26,17 +34,25 @@ public class LevelPackDialogController extends AbstractController
     {
         String levelName = levelNameTextField.getText();
         String author = authorTextField.getText();
-        int position = ((MainController)parentController).getLevelPackWriter().getLevels().size();
-        int difficulty = (int)difficultySpinner.getValue();
-        int startLives = (int)startLivesSpinner.getValue();
-        PaddleSize initPadSize = (PaddleSize)paddleSizeComboBox.getSelectionModel().getSelectedItem();
-        ((MainController)parentController).getLevelPackWriter().addLevel(levelName, author, position, difficulty, startLives, initPadSize, ((MainController)parentController).getBrickArrayList());
+        if(levelName.equals("") || author.equals(""))
+        {
+            AlertGenerator.showAlert(Alert.AlertType.WARNING, "Levelname or Author missing!", null);
+        }
+        else
+        {
+            int position = ((MainController) parentController).getLevelPackWriter().getLevels().size();
+            int difficulty = (int) difficultySpinner.getValue();
+            int startLives = (int) startLivesSpinner.getValue();
+            PaddleSize initPadSize = (PaddleSize) paddleSizeComboBox.getSelectionModel().getSelectedItem();
+            ((MainController) parentController).getLevelPackWriter().addLevel(levelName, author, position, difficulty, startLives, initPadSize, ((MainController) parentController).getBrickArrayList());
+            stage.close();
+        }
     }
 
     @FXML
     private void onBackButtonClicked()
     {
-
+        stage.close();
     }
 
 }
diff --git a/src/de/brickedleveleditor/ui/controller/MainController.java b/src/de/brickedleveleditor/ui/controller/MainController.java
index c5bbd61..2a013c0 100644
--- a/src/de/brickedleveleditor/ui/controller/MainController.java
+++ b/src/de/brickedleveleditor/ui/controller/MainController.java
@@ -50,8 +50,6 @@ public class MainController extends AbstractController
     private Image currentlySelectedPowerupImage;
     private final int WIDTH = 18;
     private final int HEIGHT = 18;
-
-    public Stage stage;
     public final ResourceBundle bundle = ResourceBundle.getBundle("de/brickedleveleditor/main/", Locale.GERMANY);
     private HashMap<BrickType, Image> bricksTextures;
     private ArrayList<Image> powerupTextures;
diff --git a/src/de/brickedleveleditor/ui/fxml/level_pack_dialog_controller.fxml b/src/de/brickedleveleditor/ui/fxml/level_pack_dialog_controller.fxml
index 5d82abf..785f7da 100644
--- a/src/de/brickedleveleditor/ui/fxml/level_pack_dialog_controller.fxml
+++ b/src/de/brickedleveleditor/ui/fxml/level_pack_dialog_controller.fxml
@@ -6,6 +6,7 @@
 <?import javafx.scene.control.Spinner?>
 <?import javafx.scene.control.TextField?>
 <?import javafx.scene.layout.AnchorPane?>
+<?import javafx.scene.control.SpinnerValueFactory.IntegerSpinnerValueFactory?>
 
 <AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="317.0" prefWidth="397.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.brickedleveleditor.ui.controller.LevelPackDialogController">
    <children>
@@ -14,12 +15,20 @@
       <TextField fx:id="authorTextField" layoutX="212.0" layoutY="56.0" AnchorPane.rightAnchor="14.0" />
       <TextField fx:id="levelNameTextField" layoutX="212.0" layoutY="17.0" AnchorPane.rightAnchor="14.0" />
       <Label layoutX="14.0" layoutY="99.0" prefHeight="16.0" prefWidth="112.0" text="Difficulty:" AnchorPane.leftAnchor="14.0" />
-      <Spinner fx:id="difficultySpinner" layoutX="212.0" layoutY="94.0" prefHeight="26.0" prefWidth="171.0" AnchorPane.rightAnchor="14.0" />
+      <Spinner fx:id="difficultySpinner" layoutX="212.0" layoutY="94.0" prefHeight="26.0" prefWidth="171.0" AnchorPane.rightAnchor="14.0">
+          <valueFactory>
+              <SpinnerValueFactory.IntegerSpinnerValueFactory min="1" max="10"/>
+          </valueFactory>
+      </Spinner>
       <Label layoutX="14.0" layoutY="138.0" prefHeight="16.0" prefWidth="112.0" text="Start-Lives:" AnchorPane.leftAnchor="14.0" />
       <Label layoutX="14.0" layoutY="174.0" prefHeight="16.0" prefWidth="112.0" text="Paddle-Size" AnchorPane.leftAnchor="14.0" />
       <ComboBox fx:id="paddleSizeComboBox" layoutX="212.0" layoutY="169.0" prefHeight="26.0" prefWidth="171.0" AnchorPane.rightAnchor="14.0" />
       <Button layoutX="126.0" layoutY="277.0" mnemonicParsing="false" onAction="#onSaveButtonClicked" text="Save" AnchorPane.bottomAnchor="14.0" />
       <Button layoutX="212.0" layoutY="277.0" mnemonicParsing="false" onAction="#onBackButtonClicked" text="Back" AnchorPane.bottomAnchor="14.0" />
-      <Spinner fx:id="startLivesSpinner" layoutX="212.0" layoutY="133.0" />
+      <Spinner fx:id="startLivesSpinner" layoutX="212.0" layoutY="133.0">
+          <valueFactory>
+              <SpinnerValueFactory.IntegerSpinnerValueFactory min="1" max="5"/>
+          </valueFactory>
+      </Spinner>
    </children>
 </AnchorPane>
diff --git a/src/de/brickedleveleditor/utils/AlertGenerator.java b/src/de/brickedleveleditor/utils/AlertGenerator.java
new file mode 100644
index 0000000..fa58b2a
--- /dev/null
+++ b/src/de/brickedleveleditor/utils/AlertGenerator.java
@@ -0,0 +1,37 @@
+package de.brickedleveleditor.utils;
+
+import javafx.scene.control.Alert;
+import javafx.scene.control.Alert.AlertType;
+import javafx.scene.image.Image;
+import javafx.stage.Stage;
+
+public class AlertGenerator
+{
+    public static void showAlert(AlertType type, String contentText, Image icon)
+    {
+        show(type, type.name(), "", contentText, icon, true);
+    }
+
+    public static void showAlert(AlertType type, String title, String headerText, String contentText, Image icon, boolean centerOnScreen)
+    {
+        show(type, title, headerText, contentText, icon, centerOnScreen);
+    }
+
+    private static void show(AlertType type, String title, String headerText, String contentText, Image icon, boolean centerOnScreen)
+    {
+        Alert alert = new Alert(type);
+        alert.setTitle(title);
+        alert.setHeaderText(headerText);
+        alert.setContentText(contentText);
+        Stage dialogStage = (Stage) alert.getDialogPane().getScene().getWindow();
+        if(icon != null)
+        {
+            dialogStage.getIcons().add(icon);
+        }
+        if (centerOnScreen)
+        {
+            dialogStage.centerOnScreen();
+        }
+        alert.showAndWait();
+    }
+}
\ No newline at end of file
-- 
GitLab