diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/controller/DialogController.kt b/src/main/java/de/bixilon/minosoft/gui/eros/controller/DialogController.kt new file mode 100644 index 000000000..203977ed9 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/gui/eros/controller/DialogController.kt @@ -0,0 +1,31 @@ +/* + * Minosoft + * Copyright (C) 2021 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.gui.eros.controller + +import javafx.scene.input.KeyCode +import javafx.scene.input.KeyEvent + +abstract class DialogController : JavaFXWindowController() { + + + override fun postInit() { + super.postInit() + + stage.scene.root.addEventFilter(KeyEvent.KEY_PRESSED) { + if (it.code == KeyCode.ESCAPE) { + stage.close() + } + } + } +} diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/dialog/ErosErrorReport.kt b/src/main/java/de/bixilon/minosoft/gui/eros/dialog/ErosErrorReport.kt index aa45fa599..99bc806a1 100644 --- a/src/main/java/de/bixilon/minosoft/gui/eros/dialog/ErosErrorReport.kt +++ b/src/main/java/de/bixilon/minosoft/gui/eros/dialog/ErosErrorReport.kt @@ -14,7 +14,7 @@ package de.bixilon.minosoft.gui.eros.dialog import de.bixilon.minosoft.Minosoft -import de.bixilon.minosoft.gui.eros.controller.JavaFXWindowController +import de.bixilon.minosoft.gui.eros.controller.DialogController import de.bixilon.minosoft.gui.eros.crash.ErosCrashReport.Companion.crash import de.bixilon.minosoft.gui.eros.util.JavaFXUtil import de.bixilon.minosoft.gui.eros.util.JavaFXUtil.ctext @@ -30,7 +30,7 @@ import javafx.scene.control.TextArea import javafx.scene.text.TextFlow -class ErosErrorReport : JavaFXWindowController() { +class ErosErrorReport : DialogController() { @FXML private lateinit var headerFX: TextFlow @FXML private lateinit var descriptionFX: TextFlow @FXML private lateinit var detailsFX: TextArea diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/dialog/SimpleErosConfirmationDialog.kt b/src/main/java/de/bixilon/minosoft/gui/eros/dialog/SimpleErosConfirmationDialog.kt index 1ab6efb5d..9d55baea7 100644 --- a/src/main/java/de/bixilon/minosoft/gui/eros/dialog/SimpleErosConfirmationDialog.kt +++ b/src/main/java/de/bixilon/minosoft/gui/eros/dialog/SimpleErosConfirmationDialog.kt @@ -15,7 +15,7 @@ package de.bixilon.minosoft.gui.eros.dialog import de.bixilon.minosoft.Minosoft import de.bixilon.minosoft.data.text.ChatComponent -import de.bixilon.minosoft.gui.eros.controller.JavaFXWindowController +import de.bixilon.minosoft.gui.eros.controller.DialogController import de.bixilon.minosoft.gui.eros.util.JavaFXUtil import de.bixilon.minosoft.gui.eros.util.JavaFXUtil.text import de.bixilon.minosoft.util.KUtil.asResourceLocation @@ -23,6 +23,8 @@ import de.bixilon.minosoft.util.task.pool.DefaultThreadPool import javafx.application.Platform import javafx.fxml.FXML import javafx.scene.control.Button +import javafx.scene.input.KeyCode +import javafx.scene.input.KeyEvent import javafx.scene.text.TextFlow class SimpleErosConfirmationDialog( @@ -33,7 +35,7 @@ class SimpleErosConfirmationDialog( val confirmButtonText: Any = DEFAULT_CONFIRM_TEXT, val onCancel: () -> Unit = {}, val onConfirm: () -> Unit, -) : JavaFXWindowController() { +) : DialogController() { @FXML private lateinit var headerFX: TextFlow @FXML private lateinit var descriptionFX: TextFlow @FXML private lateinit var cancelButtonFX: Button @@ -53,16 +55,30 @@ class SimpleErosConfirmationDialog( confirmButtonFX.text = Minosoft.LANGUAGE_MANAGER.translate(confirmButtonText).message } + override fun postInit() { + super.postInit() + + stage.setOnCloseRequest { + DefaultThreadPool += onCancel + } + + stage.scene.root.addEventFilter(KeyEvent.KEY_PRESSED) { + if (it.code == KeyCode.ENTER) { + confirm() + } + } + } + @FXML fun confirm() { DefaultThreadPool += onConfirm - stage.hide() + stage.close() } @FXML fun cancel() { DefaultThreadPool += onCancel - stage.hide() + stage.close() } diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/dialog/UpdateServerDialog.kt b/src/main/java/de/bixilon/minosoft/gui/eros/dialog/UpdateServerDialog.kt index 60ee3ce5a..364483a5d 100644 --- a/src/main/java/de/bixilon/minosoft/gui/eros/dialog/UpdateServerDialog.kt +++ b/src/main/java/de/bixilon/minosoft/gui/eros/dialog/UpdateServerDialog.kt @@ -19,7 +19,7 @@ import de.bixilon.minosoft.data.registries.versions.Version import de.bixilon.minosoft.data.registries.versions.VersionTypes import de.bixilon.minosoft.data.registries.versions.Versions import de.bixilon.minosoft.data.text.TranslatableComponents -import de.bixilon.minosoft.gui.eros.controller.JavaFXWindowController +import de.bixilon.minosoft.gui.eros.controller.DialogController import de.bixilon.minosoft.gui.eros.util.JavaFXUtil import de.bixilon.minosoft.gui.eros.util.JavaFXUtil.ctext import de.bixilon.minosoft.gui.eros.util.JavaFXUtil.placeholder @@ -31,6 +31,8 @@ import de.bixilon.minosoft.util.task.pool.DefaultThreadPool import javafx.application.Platform import javafx.fxml.FXML import javafx.scene.control.* +import javafx.scene.input.KeyCode +import javafx.scene.input.KeyEvent import javafx.scene.text.TextFlow /** @@ -38,9 +40,8 @@ import javafx.scene.text.TextFlow */ class UpdateServerDialog( private val server: Server? = null, - val onCancel: () -> Unit = {}, val onUpdate: (name: String, address: String, forcedVersion: Version?) -> Unit, -) : JavaFXWindowController() { +) : DialogController() { @FXML private lateinit var descriptionFX: TextFlow @FXML private lateinit var serverNameLabelFX: TextFlow @@ -165,8 +166,22 @@ class UpdateServerDialog( } } + override fun postInit() { + super.postInit() + + + stage.scene.root.addEventFilter(KeyEvent.KEY_PRESSED) { + if (it.code == KeyCode.ENTER) { + update() + } + } + } + @FXML fun update() { + if (updateServerButtonFX.isDisable) { + return + } val forcedVersion = (forcedVersionFX.selectionModel.selectedItem == Versions.AUTOMATIC_VERSION).decide(null) { forcedVersionFX.selectionModel.selectedItem } DefaultThreadPool += { onUpdate(serverNameFX.text.isBlank().decide({ serverAddressFX.text.toString() }, { serverNameFX.text.trim() }), serverAddressFX.text, forcedVersion) } stage.close() @@ -174,7 +189,6 @@ class UpdateServerDialog( @FXML fun cancel() { - DefaultThreadPool += onCancel stage.close() } diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/dialog/connection/KickDialog.kt b/src/main/java/de/bixilon/minosoft/gui/eros/dialog/connection/KickDialog.kt index 9df1f089a..c4c549694 100644 --- a/src/main/java/de/bixilon/minosoft/gui/eros/dialog/connection/KickDialog.kt +++ b/src/main/java/de/bixilon/minosoft/gui/eros/dialog/connection/KickDialog.kt @@ -15,7 +15,7 @@ package de.bixilon.minosoft.gui.eros.dialog.connection import de.bixilon.minosoft.Minosoft import de.bixilon.minosoft.data.text.ChatComponent -import de.bixilon.minosoft.gui.eros.controller.JavaFXWindowController +import de.bixilon.minosoft.gui.eros.controller.DialogController import de.bixilon.minosoft.gui.eros.util.JavaFXUtil import de.bixilon.minosoft.gui.eros.util.JavaFXUtil.text import de.bixilon.minosoft.util.KUtil.asResourceLocation @@ -29,7 +29,7 @@ class KickDialog( val header: Any, val description: Any? = null, val reason: ChatComponent, -) : JavaFXWindowController() { +) : DialogController() { @FXML private lateinit var headerFX: TextFlow @FXML private lateinit var descriptionFX: TextFlow @FXML private lateinit var reasonFX: TextFlow