add hover warning to connect button when minosoft can not connect to it

This commit is contained in:
Moritz Zwerger 2024-07-03 17:36:08 +02:00
parent 6a4771bd47
commit fb0778a309
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
6 changed files with 69 additions and 14 deletions

View File

@ -1,6 +1,6 @@
/*
* Minosoft
* Copyright (C) 2020-2023 Moritz Zwerger
* Copyright (C) 2020-2024 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.
*
@ -59,6 +59,7 @@ import javafx.scene.Node
import javafx.scene.control.Button
import javafx.scene.control.CheckBox
import javafx.scene.control.ListView
import javafx.scene.control.Tooltip
import javafx.scene.input.KeyCode
import javafx.scene.layout.Pane
@ -109,7 +110,7 @@ class ServerListController : EmbeddedJavaFXController<Pane>(), Refreshable {
return@setOnMouseClicked
}
val card = controller.item ?: return@setOnMouseClicked
if (!card.canConnect(accountProfile.selected ?: return@setOnMouseClicked)) {
if (card.canConnect(accountProfile.selected) != null) {
return@setOnMouseClicked
}
@ -334,14 +335,21 @@ class ServerListController : EmbeddedJavaFXController<Pane>(), Refreshable {
isDisable = true
connect(serverCard)
}
isDisable = true // temp state
val selected = account.selected
isDisable = selected != null && !serverCard.canConnect(selected)
// ToDo: Also disable, if currently connecting
ctext = CONNECT
serverCard.ping::state.observeFX(serverCard) { isDisable = selected == null || !serverCard.canConnect(selected) }
serverCard.ping::state.observeFX(serverCard, instant = true) {
val error = serverCard.canConnect(selected)
isDisable = error != null
val tooltip = if (error == null) null else Tooltip().apply { ctext = error; styleClass += "tooltip-error" }
Tooltip.install(serverInfoFX, tooltip) // can not add to the button, because java fx sucks. disabled nodes don't get click/hover events
}
},
)
serverInfoFX.update(serverCard, SERVER_INFO_PROPERTIES, actions)
}
@ -422,7 +430,7 @@ class ServerListController : EmbeddedJavaFXController<Pane>(), Refreshable {
TranslatableComponents.GENERAL_EMPTY to { " " },
"minosoft:server_info.remote_version".toResourceLocation() to { it.ping.serverVersion ?: "unknown" },
"minosoft:server_info.remote_version".toResourceLocation() to { it.ping.serverVersion ?: "§cunknown\nPlease force a specific version!" },
"minosoft:server_info.remote_brand".toResourceLocation() to { it.ping.status?.serverBrand },
"minosoft:server_info.players_online".toResourceLocation() to { it.ping.status?.let { status -> "${status.usedSlots?.thousands()} / ${status.slots?.thousands()}" } },
"minosoft:server_info.ping".toResourceLocation() to { it.ping.pong?.latency?.formatNanos() },

View File

@ -0,0 +1,26 @@
/*
* Minosoft
* Copyright (C) 2020-2024 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 <https://www.gnu.org/licenses/>.
*
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.gui.eros.main.play.server.card
import de.bixilon.minosoft.data.language.translate.Translatable
import de.bixilon.minosoft.data.registries.identified.Namespaces.minosoft
enum class ConnectError : Translatable {
NO_ACCOUNT,
ALREADY_CONNECTED,
UNKNOWN_VERSION,
;
override val translationKey = minosoft("server_list.error.${name.lowercase()}")
}

View File

@ -1,6 +1,6 @@
/*
* Minosoft
* Copyright (C) 2020-2023 Moritz Zwerger
* Copyright (C) 2020-2024 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.
*
@ -44,14 +44,13 @@ class ServerCard(
}
fun canConnect(account: Account): Boolean {
if (server in account.connections) {
return false
}
fun canConnect(account: Account?): ConnectError? {
if (account == null) return ConnectError.NO_ACCOUNT
if (server in account.connections) return ConnectError.ALREADY_CONNECTED
if (server.forcedVersion == null && ping.serverVersion == null) {
return false
return ConnectError.UNKNOWN_VERSION
}
return true
return null
}

View File

@ -1,6 +1,6 @@
/*
* Minosoft
* Copyright (C) 2020-2023 Moritz Zwerger
* Copyright (C) 2020-2024 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.
*
@ -45,6 +45,7 @@ import javafx.scene.control.Alert
import javafx.scene.control.Labeled
import javafx.scene.control.TableColumnBase
import javafx.scene.control.TextField
import javafx.scene.control.Tooltip
import javafx.scene.image.Image
import javafx.scene.input.KeyCode
import javafx.scene.input.KeyEvent
@ -166,6 +167,12 @@ object JavaFXUtil {
this.text = IntegratedLanguage.LANGUAGE.translate(value).message
}
var Tooltip.ctext: Any?
get() = this.text
set(value) {
this.text = IntegratedLanguage.LANGUAGE.translate(value).message
}
var TableColumnBase<*, *>.ctext: Any?
get() = this.text
set(value) {

View File

@ -1,6 +1,6 @@
/*
* Minosoft
* Copyright (C) 2020-2023 Moritz Zwerger
* Copyright (C) 2020-2024 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.
*
@ -350,3 +350,15 @@
.progress-bar > .track {
-fx-background-color: -secondary-color;
}
.tooltip {
-fx-background-color: -secondary-color;
-fx-border-radius: 2px;
-fx-border-width: 1px;
-fx-border-color: -secondary-text-color;
}
.tooltip-error {
-fx-text-fill: #ff0000;
}

View File

@ -86,6 +86,9 @@ minosoft:server_list.button.edit=Edit
minosoft:server_list.refresh.header=Refresh
minosoft:server_list.refresh.text1=Get the latest
minosoft:server_list.refresh.text2=information
minosoft:server_list.error.no_account=You don't have an account selected!\nPlease click on the minosoft icon in the right top corner.
minosoft:server_list.error.already_connected=You are already connected with the selected account. Please choose a different one!
minosoft:server_list.error.unknown_version=The server is using an version that minosoft does not support (yet)!\nPlease edit the server and try forcing a different version.\nFeel free to add that version to minosoft (PR)