package org.pixelgaffer.turnierserver.codr.utilities;
import java.io.File;
import java.util.Optional;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.ButtonType;
import javafx.scene.control.ChoiceDialog;
import javafx.scene.control.TextInputDialog;
import javafx.stage.DirectoryChooser;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import org.pixelgaffer.turnierserver.codr.AiBase;
import org.pixelgaffer.turnierserver.codr.AiFake;
import org.pixelgaffer.turnierserver.codr.MainApp;
/**
* Diese Klasse stellt einige Dialog-Fenster bereit, die unkompliziert genutzt werden können
*
* @author Philip
*/
public class Dialog {
/**
* Ruft einen javafx.scene.control.Alert auf
*
* @param text Text, der dargestellt werden soll
* @param title Titel der Nachricht
* @param type Typ des Dialogfensters
* @return true, wenn auf ok geklickt wurde
*/
private static boolean generalDialog(String text, String title, AlertType type) {
Alert alert = new Alert(type);
alert.setTitle(title);
alert.setHeaderText(null);
alert.setContentText(text);
Optional<ButtonType> result = alert.showAndWait();
if (result.get() == ButtonType.OK) {
return true;
} else {
return false;
}
}
/**
* Ruft einen Info-Dialog auf
*
* @param text Text, der dargestellt werden soll
* @return true, wenn auf ok geklickt wurde
*/
public static boolean info(String text) {
return info(text, "Information");
}
public static boolean info(String text, String title) {
return generalDialog(text, title, AlertType.INFORMATION);
}
/**
* Ruft einen Warnungs-Dialog auf
*
* @param text Text, der dargestellt werden soll
* @return true, wenn auf ok geklickt wurde
*/
public static boolean warning(String text) {
return warning(text, "Warnung");
}
public static boolean warning(String text, String title) {
return generalDialog(text, title, AlertType.WARNING);
}
/**
* Ruft einen Fehler-Dialog auf
*
* @param text Text, der dargestellt werden soll
* @return true, wenn auf ok geklickt wurde
*/
public static boolean error(String text) {
return error(text, "Fehler");
}
public static boolean error(String text, String title) {
ErrorLog.write("Dialog.ERROR: " + text);
return generalDialog(text, title, AlertType.ERROR);
}
/**
* Ruft einen Ok/Abbruch-Dialog auf
*
* @param text Text, der dargestellt werden soll
* @return true, wenn auf ok geklickt wurde
*/
public static boolean okAbort(String text) {
return okAbort(text, "Bitte bestätigen");
}
public static boolean okAbort(String text, String title) {
return generalDialog(text, title, AlertType.CONFIRMATION);
}
/**
* Ruft einen Text-Eingabe-Dialog auf
*
* @param text Text, der dargestellt werden soll
* @return den eingegebenen Text
*/
public static String textInput(String text) {
return textInput(text, "Bitte Text eingeben", "");
}
public static String textInput(String text, String title, String defaultText) {
TextInputDialog dialog = new TextInputDialog(defaultText);
dialog.setTitle(title);
dialog.setHeaderText(null);
dialog.setContentText(text);
Optional<String> result = dialog.showAndWait();
if (result.isPresent()) {
return result.get();
}
return null;
}
public static String textInput(String text, String title) {
return textInput(text, title, "");
}
/**
* Ruft einen Dateiauswahl-Dialog auf
*
* @param --> mainApp.stage; Stage, auf der der Dialog dargestellt werden soll
* @return die ausgewählte Datei
*/
public static File fileChooser(Stage stage) {
return fileChooser(stage, "Bitte eine Datei auswählen");
}
public static File fileChooser(Stage stage, String title) {
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle(title);
return fileChooser.showOpenDialog(stage);
}
/**
* Ruft einen Datei-Speicher-Dialog auf
*
* @param --> mainApp.stage; Stage, auf der der Dialog dargestellt werden soll
* @return die ausgewählte Datei
*/
public static File fileSaver(Stage stage) {
return fileChooser(stage, "Bitte eine Datei auswählen");
}
public static File fileSaver(Stage stage, String title, String defaultPath) {
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle(title);
fileChooser.setInitialDirectory(new File(defaultPath));
return fileChooser.showSaveDialog(stage);
}
/**
* Ruft einen Ordnerauswahl-Dialog auf
*
* @param --> mainApp.stage; Stage, auf der der Dialog dargestellt werden soll
* @return den ausgewählten Ordner
*/
public static File folderChooser(Stage stage) {
return folderChooser(stage, "Bitte einen Ordner auswählen");
}
public static File folderChooser(Stage stage, String title) {
DirectoryChooser folderChooser = new DirectoryChooser();
folderChooser.setTitle(title);
return folderChooser.showDialog(stage);
}
/**
* Öffnet einen Dialog, in dem der Spieler auswählen kann,
* zu welcher KI die hochzuladende Version hinzugefügt werden soll.
*
* @return
*/
public static AiBase selectOwnVersion() {
if (MainApp.ownOnlineAis == null)
return null;
ObservableList<AiBase> list = FXCollections.observableArrayList();
list.addAll(MainApp.ownOnlineAis);
list.add(new AiFake());
ChoiceDialog<AiBase> dialog = new ChoiceDialog<>();
dialog.getItems().addAll(list);
dialog.setSelectedItem(list.get(0));
dialog.setTitle("Version hochladen");
dialog.setHeaderText("Wähle bitte eine KI aus, zu dem die Version hochgeladen werden soll.");
dialog.setContentText("KI:");
Optional<AiBase> result = dialog.showAndWait();
if (result.isPresent()) {
return result.get();
}
return null;
}
}