diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/main/ErosMainActivities.kt b/src/main/java/de/bixilon/minosoft/gui/eros/main/ErosMainActivities.kt new file mode 100644 index 000000000..3bcefa335 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/gui/eros/main/ErosMainActivities.kt @@ -0,0 +1,38 @@ +/* + * 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 + +import de.bixilon.minosoft.data.registries.ResourceLocation +import de.bixilon.minosoft.gui.eros.main.account.AccountController +import de.bixilon.minosoft.gui.eros.main.play.PlayController +import de.bixilon.minosoft.util.KUtil +import de.bixilon.minosoft.util.KUtil.asResourceLocation +import de.bixilon.minosoft.util.enum.ValuesEnum + +enum class ErosMainActivities( + val layout: ResourceLocation, +) { + PlAY(PlayController.LAYOUT), + SETTINGS("".asResourceLocation()), + HELP("".asResourceLocation()), + ABOUT("".asResourceLocation()), + + ACCOUNT(AccountController.LAYOUT), + ; + + companion object : ValuesEnum { + override val VALUES: Array = values() + override val NAME_MAP: Map = KUtil.getEnumValues(VALUES) + } +} diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/main/MainErosController.kt b/src/main/java/de/bixilon/minosoft/gui/eros/main/MainErosController.kt index d27c99702..6f861317a 100644 --- a/src/main/java/de/bixilon/minosoft/gui/eros/main/MainErosController.kt +++ b/src/main/java/de/bixilon/minosoft/gui/eros/main/MainErosController.kt @@ -17,8 +17,8 @@ import de.bixilon.minosoft.Minosoft import de.bixilon.minosoft.ShutdownReasons import de.bixilon.minosoft.config.StaticConfiguration import de.bixilon.minosoft.data.accounts.Account +import de.bixilon.minosoft.gui.eros.controller.EmbeddedJavaFXController import de.bixilon.minosoft.gui.eros.controller.JavaFXWindowController -import de.bixilon.minosoft.gui.eros.main.play.PlayMainController import de.bixilon.minosoft.gui.eros.modding.invoker.JavaFXEventInvoker import de.bixilon.minosoft.gui.eros.util.JavaFXAccountUtil.avatar import de.bixilon.minosoft.gui.eros.util.JavaFXUtil @@ -45,11 +45,8 @@ class MainErosController : JavaFXWindowController() { @FXML private lateinit var playIconFX: FontIcon @FXML private lateinit var settingsIconFX: FontIcon - @FXML private lateinit var helpIconFX: FontIcon - @FXML private lateinit var aboutIconFX: FontIcon - @FXML private lateinit var exitIconFX: FontIcon @FXML private lateinit var contentFX: Pane @@ -58,40 +55,65 @@ class MainErosController : JavaFXWindowController() { @FXML private lateinit var accountNameFX: Text - - private lateinit var icons: List + private lateinit var iconMap: Map - fun select(iconToSelect: FontIcon) { - for (icon in icons) { + private var activity: ErosMainActivities = ErosMainActivities.ABOUT // other value (not the default) + set(value) { + field = value + contentFX.children.setAll(JavaFXUtil.loadEmbeddedController>(field.layout).root) + + highlightIcon(iconMap[value]) + } + + private fun highlightIcon(iconToSelect: FontIcon?) { + for (icon in iconMap.values) { if (icon === iconToSelect) { continue } icon.isDisable = false icon.iconColor = Color.BLACK } - iconToSelect.isDisable = true - iconToSelect.iconColor = Color.LIGHTBLUE + iconToSelect?.apply { + isDisable = true + iconColor = Color.LIGHTBLUE + } } override fun init() { logoFX.image = JavaFXUtil.MINOSOFT_LOGO versionTextFX.text = "Minosoft " + GitInfo.IS_INITIALIZED.decide(GitInfo.GIT_COMMIT_ID, StaticConfiguration.VERSION) - icons = listOf(playIconFX, settingsIconFX, helpIconFX, aboutIconFX, exitIconFX) + iconMap = mapOf( + ErosMainActivities.PlAY to playIconFX, + ErosMainActivities.SETTINGS to settingsIconFX, + ErosMainActivities.HELP to helpIconFX, + ErosMainActivities.ABOUT to aboutIconFX, + ) - select(playIconFX) + highlightIcon(playIconFX) + playIconFX.setOnMouseClicked { + activity = ErosMainActivities.PlAY + } + settingsIconFX.setOnMouseClicked { + activity = ErosMainActivities.SETTINGS + } + helpIconFX.setOnMouseClicked { + activity = ErosMainActivities.HELP + } + aboutIconFX.setOnMouseClicked { + activity = ErosMainActivities.ABOUT + } exitIconFX.setOnMouseClicked { ShutdownManager.shutdown(reason = ShutdownReasons.REQUESTED_BY_USER) } - contentFX.children.setAll(JavaFXUtil.loadEmbeddedController("minosoft:eros/main/play/play.fxml".asResourceLocation()).root) - - GlobalEventMaster.registerEvent(JavaFXEventInvoker.of { accountImageFX.image = it.account?.avatar accountNameFX.ctext = it.account?.username ?: NO_ACCOUNT_SELECTED }) + + activity = ErosMainActivities.PlAY } override fun postInit() { @@ -100,13 +122,9 @@ class MainErosController : JavaFXWindowController() { } } - fun requestAccountSelect() { - TODO("Not yet implemented") - } - fun verifyAccount(account: Account? = Minosoft.config.config.account.selected, onSuccess: (Account) -> Unit) { if (account == null) { - requestAccountSelect() + activity = ErosMainActivities.ACCOUNT return } @@ -120,6 +138,12 @@ class MainErosController : JavaFXWindowController() { } } + + @FXML + fun openAccountActivity() { + activity = ErosMainActivities.ACCOUNT + } + companion object { private val NO_ACCOUNT_SELECTED = "minosoft:main.account.no_account_selected".asResourceLocation() } 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 new file mode 100644 index 000000000..2fa657eb2 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/gui/eros/main/account/AccountController.kt @@ -0,0 +1,39 @@ +/* + * 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 + +import de.bixilon.minosoft.data.accounts.Account +import de.bixilon.minosoft.data.registries.ResourceLocation +import de.bixilon.minosoft.gui.eros.controller.EmbeddedJavaFXController +import de.bixilon.minosoft.util.KUtil.asResourceLocation +import javafx.fxml.FXML +import javafx.scene.control.ListView +import javafx.scene.layout.AnchorPane +import javafx.scene.layout.Pane + +class AccountController : EmbeddedJavaFXController() { + @FXML private lateinit var accountTypeListViewFX: ListView + + @FXML private lateinit var accountListViewFX: ListView + @FXML private lateinit var accountInfoFX: AnchorPane + + + override fun init() { + + } + + companion object { + val LAYOUT = "minosoft:eros/main/account/account.fxml".asResourceLocation() + } +} diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/main/play/PlayMainController.kt b/src/main/java/de/bixilon/minosoft/gui/eros/main/play/PlayController.kt similarity index 97% rename from src/main/java/de/bixilon/minosoft/gui/eros/main/play/PlayMainController.kt rename to src/main/java/de/bixilon/minosoft/gui/eros/main/play/PlayController.kt index f232fedbb..e7e2d493d 100644 --- a/src/main/java/de/bixilon/minosoft/gui/eros/main/play/PlayMainController.kt +++ b/src/main/java/de/bixilon/minosoft/gui/eros/main/play/PlayController.kt @@ -33,7 +33,7 @@ import javafx.scene.layout.GridPane import javafx.scene.layout.Pane import javafx.scene.text.TextFlow -class PlayMainController : EmbeddedJavaFXController() { +class PlayController : EmbeddedJavaFXController() { @FXML private lateinit var playTypeContentFX: Pane @FXML private lateinit var playTypeListViewFX: ListView @@ -103,6 +103,7 @@ class PlayMainController : EmbeddedJavaFXController() { } companion object { + val LAYOUT = "minosoft:eros/main/play/play.fxml".asResourceLocation() private val CUSTOM_SERVER_TYPE = "minosoft:server_type.custom".asResourceLocation() private val LAN_SERVER_TYPE = "minosoft:server_type.lan".asResourceLocation() private val REFRESH_HEADER = "minosoft:server_list.refresh.header".asResourceLocation() diff --git a/src/main/resources/assets/minosoft/eros/main/account/account.fxml b/src/main/resources/assets/minosoft/eros/main/account/account.fxml new file mode 100644 index 000000000..99ef2d53b --- /dev/null +++ b/src/main/resources/assets/minosoft/eros/main/account/account.fxml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/assets/minosoft/eros/main/main.fxml b/src/main/resources/assets/minosoft/eros/main/main.fxml index b57778890..0bb331e45 100644 --- a/src/main/resources/assets/minosoft/eros/main/main.fxml +++ b/src/main/resources/assets/minosoft/eros/main/main.fxml @@ -77,7 +77,7 @@ - + diff --git a/src/main/resources/assets/minosoft/eros/main/play/play.fxml b/src/main/resources/assets/minosoft/eros/main/play/play.fxml index 8452fdbad..f3c167ad4 100644 --- a/src/main/resources/assets/minosoft/eros/main/play/play.fxml +++ b/src/main/resources/assets/minosoft/eros/main/play/play.fxml @@ -5,7 +5,7 @@ - + diff --git a/src/main/resources/assets/minosoft/eros/main/play/server/server_list.fxml b/src/main/resources/assets/minosoft/eros/main/play/server/server_list.fxml index 5333971e8..7a77c7ef2 100644 --- a/src/main/resources/assets/minosoft/eros/main/play/server/server_list.fxml +++ b/src/main/resources/assets/minosoft/eros/main/play/server/server_list.fxml @@ -44,13 +44,6 @@ - - - - - - -