diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/main/account/AccountController.kt b/src/main/java/de/bixilon/minosoft/gui/eros/main/account/AccountController.kt index b2d0b9d72..643e78201 100644 --- a/src/main/java/de/bixilon/minosoft/gui/eros/main/account/AccountController.kt +++ b/src/main/java/de/bixilon/minosoft/gui/eros/main/account/AccountController.kt @@ -22,6 +22,7 @@ import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.text.ChatComponent import de.bixilon.minosoft.gui.eros.controller.EmbeddedJavaFXController import de.bixilon.minosoft.gui.eros.dialogs.SimpleErosConfirmationDialog +import de.bixilon.minosoft.gui.eros.main.account.add.OfflineAddController import de.bixilon.minosoft.util.KUtil.asResourceLocation import de.bixilon.minosoft.util.task.pool.DefaultThreadPool import javafx.application.Platform @@ -187,7 +188,7 @@ class AccountController : EmbeddedJavaFXController() { resourceLocation = OfflineAccount.RESOURCE_LOCATION, translationKey = "minosoft:main.account.type.offline".asResourceLocation(), icon = FontAwesomeSolid.MAP, - addHandler = { TODO() } + addHandler = { OfflineAddController(it).show() } ), ErosAccountType( resourceLocation = MicrosoftAccount.RESOURCE_LOCATION, diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/main/account/add/OfflineAddController.kt b/src/main/java/de/bixilon/minosoft/gui/eros/main/account/add/OfflineAddController.kt new file mode 100644 index 000000000..d98b494ef --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/gui/eros/main/account/add/OfflineAddController.kt @@ -0,0 +1,95 @@ +/* + * 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.main.account.add + +import de.bixilon.minosoft.Minosoft +import de.bixilon.minosoft.data.accounts.types.OfflineAccount +import de.bixilon.minosoft.gui.eros.controller.JavaFXWindowController +import de.bixilon.minosoft.gui.eros.main.account.AccountController +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 +import de.bixilon.minosoft.gui.eros.util.JavaFXUtil.text +import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition +import de.bixilon.minosoft.util.KUtil.asResourceLocation +import javafx.application.Platform +import javafx.fxml.FXML +import javafx.scene.control.Button +import javafx.scene.control.TextField +import javafx.scene.text.TextFlow +import javafx.stage.Modality + +class OfflineAddController( + private val accountController: AccountController, +) : JavaFXWindowController() { + @FXML private lateinit var headerFX: TextFlow + @FXML private lateinit var descriptionFX: TextFlow + + @FXML private lateinit var usernameLabelFX: TextFlow + @FXML private lateinit var usernameFX: TextField + + @FXML private lateinit var addButtonFX: Button + @FXML private lateinit var cancelButtonFX: Button + + + fun show() { + Platform.runLater { + JavaFXUtil.openModal(TITLE, LAYOUT, this, modality = Modality.APPLICATION_MODAL) + stage.show() + } + } + + override fun init() { + super.init() + + + headerFX.text = HEADER + descriptionFX.text = DESCRIPTION + usernameLabelFX.text = USERNAME_LABEL + usernameFX.placeholder = USERNAME_PLACEHOLDER + addButtonFX.ctext = ADD_BUTTON + cancelButtonFX.ctext = CANCEL_BUTTON + + usernameFX.textProperty().addListener { _, _, new -> + addButtonFX.isDisable = !ProtocolDefinition.MINECRAFT_NAME_VALIDATOR.matcher(new).matches() + } + } + + @FXML + fun add() { + val account = OfflineAccount(usernameFX.text) + Minosoft.config.config.account.entries[account.id] = account + Minosoft.config.saveToFile() + + accountController.refreshList() + stage.hide() + } + + @FXML + fun cancel() { + stage.hide() + } + + companion object { + private val LAYOUT = "minosoft:eros/main/account/add/offline.fxml".asResourceLocation() + + private val TITLE = "minosoft:main.account.add.offline.title".asResourceLocation() + private val HEADER = "minosoft:main.account.add.offline.header".asResourceLocation() + private val DESCRIPTION = "minosoft:main.account.add.offline.description".asResourceLocation() + private val USERNAME_LABEL = "minosoft:main.account.add.offline.username.label".asResourceLocation() + private val USERNAME_PLACEHOLDER = "minosoft:main.account.add.offline.username.placeholder".asResourceLocation() + private val ADD_BUTTON = "minosoft:main.account.add.offline.add_button".asResourceLocation() + private val CANCEL_BUTTON = "minosoft:main.account.add.offline.cancel_button".asResourceLocation() + } +} diff --git a/src/main/resources/assets/minosoft/eros/main/account/add/offline.fxml b/src/main/resources/assets/minosoft/eros/main/account/add/offline.fxml new file mode 100644 index 000000000..0ce0fa71c --- /dev/null +++ b/src/main/resources/assets/minosoft/eros/main/account/add/offline.fxml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/assets/minosoft/language/en_us.lang b/src/main/resources/assets/minosoft/language/en_us.lang index b60626605..7a2914c06 100644 --- a/src/main/resources/assets/minosoft/language/en_us.lang +++ b/src/main/resources/assets/minosoft/language/en_us.lang @@ -65,3 +65,11 @@ minosoft:main.account.type.offline=Offline minosoft:main.account.card.connection_count=%1$s connections + +minosoft:main.account.add.offline.title=Add offline account +minosoft:main.account.add.offline.header=Add offline account +minosoft:main.account.add.offline.description=Please enter the username of the account you want to add. +minosoft:main.account.add.offline.username.label=Username +minosoft:main.account.add.offline.username.placeholder=Username +minosoft:main.account.add.offline.add_button=Add +minosoft:main.account.add.offline.cancel_button=Cancel