mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-17 03:15:35 -04:00
profiles: improvements, eros: save server list filters to profile
This commit is contained in:
parent
e8c5e94902
commit
cc55f61758
@ -100,9 +100,9 @@ object Minosoft {
|
||||
})
|
||||
|
||||
taskWorker += Task(identifier = StartupTasks.LOAD_PROFILES, priority = ThreadPool.HIGH, dependencies = arrayOf(StartupTasks.LOAD_VERSIONS), executor = {
|
||||
Log.log(LogMessageType.LOAD_PROFILES, LogLevels.VERBOSE) { "Loading profiles..." }
|
||||
Log.log(LogMessageType.PROFILES, LogLevels.VERBOSE) { "Loading profiles..." }
|
||||
GlobalProfileManager.initialize()
|
||||
Log.log(LogMessageType.LOAD_PROFILES, LogLevels.INFO) { "Profiles loaded!" }
|
||||
Log.log(LogMessageType.PROFILES, LogLevels.INFO) { "Profiles loaded!" }
|
||||
})
|
||||
|
||||
taskWorker += Task(identifier = StartupTasks.LOAD_LANGUAGE_FILES, dependencies = arrayOf(StartupTasks.LOAD_CONFIG), executor = {
|
||||
|
@ -109,7 +109,7 @@ interface ProfileManager<T : Profile> {
|
||||
for (toMigrate in version until latestVersion) {
|
||||
migrate(toMigrate, json)
|
||||
}
|
||||
Log.log(LogMessageType.LOAD_PROFILES, LogLevels.INFO) { "Migrated profile ($path) from version $version to $latestVersion" }
|
||||
Log.log(LogMessageType.PROFILES, LogLevels.INFO) { "Migrated profile ($path) from version $version to $latestVersion" }
|
||||
json["version"] = latestVersion
|
||||
saveFile = true
|
||||
}
|
||||
@ -129,7 +129,7 @@ interface ProfileManager<T : Profile> {
|
||||
profiles[selected]?.let { this.selected = it } ?: selectDefault()
|
||||
}
|
||||
|
||||
Log.log(LogMessageType.LOAD_PROFILES, LogLevels.VERBOSE) { "Loaded ${profiles.size} $namespace profiles!" }
|
||||
Log.log(LogMessageType.PROFILES, LogLevels.VERBOSE) { "Loaded ${profiles.size} $namespace profiles!" }
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
@ -28,7 +28,7 @@ object ProfilesChangeManager {
|
||||
if (reference.get() == null) {
|
||||
toRemove += pair
|
||||
}
|
||||
listener.invoke(previous.unsafeCast(), value.unsafeCast())
|
||||
listener.invoke(previous, value)
|
||||
}
|
||||
if (toRemove.isNotEmpty()) {
|
||||
if (queue.size == toRemove.size) {
|
||||
|
@ -10,5 +10,5 @@ interface ProfileChangeListener<T> {
|
||||
val profile: Profile?
|
||||
|
||||
|
||||
fun invoke(previous: T, value: T)
|
||||
fun invoke(previous: Any?, value: Any?)
|
||||
}
|
||||
|
@ -3,29 +3,41 @@ package de.bixilon.minosoft.config.profile.change.listener
|
||||
import de.bixilon.minosoft.config.profile.change.ProfilesChangeManager
|
||||
import de.bixilon.minosoft.config.profile.profiles.Profile
|
||||
import de.bixilon.minosoft.gui.eros.util.JavaFXUtil
|
||||
import de.bixilon.minosoft.util.KUtil.unsafeCast
|
||||
import java.lang.reflect.Field
|
||||
import kotlin.reflect.KProperty
|
||||
import kotlin.reflect.KProperty0
|
||||
import kotlin.reflect.jvm.javaField
|
||||
|
||||
class SimpleProfileChangeListener<T>(
|
||||
override val property: KProperty<T>,
|
||||
override val field: Field,
|
||||
override val profile: Profile?,
|
||||
instant: Boolean,
|
||||
private val callback: (T) -> Unit,
|
||||
) : ProfileChangeListener<T> {
|
||||
|
||||
override fun invoke(previous: T, value: T) {
|
||||
callback(value)
|
||||
init {
|
||||
if (instant) {
|
||||
when (property) {
|
||||
is KProperty0<*> -> invoke(property.get(), property.get())
|
||||
else -> TODO("Instant fire is not supported for ${property::class.java}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun invoke(previous: Any?, value: Any?) {
|
||||
callback(value.unsafeCast())
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
fun <T> KProperty<T>.listen(reference: Any, profile: Profile? = null, callback: ((T) -> Unit)) {
|
||||
ProfilesChangeManager.register(reference, SimpleProfileChangeListener(this, javaField!!, profile, callback))
|
||||
fun <T> KProperty<T>.listen(reference: Any, instant: Boolean = false, profile: Profile? = null, callback: ((T) -> Unit)) {
|
||||
ProfilesChangeManager.register(reference, SimpleProfileChangeListener(this, javaField!!, profile, instant, callback))
|
||||
}
|
||||
|
||||
fun <T> KProperty<T>.listenFX(reference: Any, profile: Profile? = null, callback: ((T) -> Unit)) {
|
||||
ProfilesChangeManager.register(reference, SimpleProfileChangeListener(this, javaField!!, profile) { JavaFXUtil.runLater { callback(it) } })
|
||||
fun <T> KProperty<T>.listenFX(reference: Any, instant: Boolean = false, profile: Profile? = null, callback: ((T) -> Unit)) {
|
||||
ProfilesChangeManager.register(reference, SimpleProfileChangeListener(this, javaField!!, profile, instant) { JavaFXUtil.runLater { callback(it) } })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,9 @@
|
||||
package de.bixilon.minosoft.config.profile.profiles.eros.server
|
||||
|
||||
import de.bixilon.minosoft.config.profile.profiles.eros.server.list.ListC
|
||||
import de.bixilon.minosoft.config.profile.profiles.eros.server.modify.ModifyC
|
||||
|
||||
class ServerC {
|
||||
val modify = ModifyC()
|
||||
val list = ListC()
|
||||
}
|
||||
|
@ -0,0 +1,9 @@
|
||||
package de.bixilon.minosoft.config.profile.profiles.eros.server.list
|
||||
|
||||
import de.bixilon.minosoft.config.profile.profiles.eros.ErosProfileManager.delegate
|
||||
|
||||
class ListC {
|
||||
var hideOffline by delegate(false)
|
||||
var hideFull by delegate(false)
|
||||
var hideEmpty by delegate(false)
|
||||
}
|
@ -39,7 +39,7 @@ open class ProfileDelegate<V>(
|
||||
return
|
||||
}
|
||||
|
||||
Log.log(LogMessageType.OTHER, LogLevels.VERBOSE) { "Changed option $property in profile $profileName from ${this.value} to $value" }
|
||||
Log.log(LogMessageType.PROFILES, LogLevels.VERBOSE) { "Changed option $property in profile $profileName from ${this.value} to $value" }
|
||||
profileManager.profiles[profileName]?.saved = false
|
||||
val previous = this.value
|
||||
this.value = value
|
||||
|
@ -14,6 +14,8 @@
|
||||
package de.bixilon.minosoft.gui.eros.main.play.server
|
||||
|
||||
import de.bixilon.minosoft.Minosoft
|
||||
import de.bixilon.minosoft.config.profile.change.listener.SimpleProfileChangeListener.Companion.listenFX
|
||||
import de.bixilon.minosoft.config.profile.profiles.eros.ErosProfileManager
|
||||
import de.bixilon.minosoft.config.server.Server
|
||||
import de.bixilon.minosoft.data.registries.ResourceLocation
|
||||
import de.bixilon.minosoft.data.text.ChatComponent
|
||||
@ -52,9 +54,7 @@ import javafx.scene.layout.*
|
||||
|
||||
class ServerListController : EmbeddedJavaFXController<Pane>(), Refreshable {
|
||||
@FXML private lateinit var hideOfflineFX: CheckBox
|
||||
|
||||
@FXML private lateinit var hideFullFX: CheckBox
|
||||
|
||||
@FXML private lateinit var hideEmptyFX: CheckBox
|
||||
|
||||
|
||||
@ -75,6 +75,16 @@ class ServerListController : EmbeddedJavaFXController<Pane>(), Refreshable {
|
||||
}
|
||||
|
||||
override fun init() {
|
||||
val serverConfig = ErosProfileManager.selected.server.list
|
||||
serverConfig::hideOffline.listenFX(this, true) { hideOfflineFX.isSelected = it }
|
||||
serverConfig::hideFull.listenFX(this, true) { hideFullFX.isSelected = it }
|
||||
serverConfig::hideEmpty.listenFX(this, true) { hideEmptyFX.isSelected = it }
|
||||
|
||||
hideOfflineFX.setOnAction { ErosProfileManager.selected.server.list.hideOffline = hideOfflineFX.isSelected }
|
||||
hideFullFX.setOnAction { ErosProfileManager.selected.server.list.hideFull = hideFullFX.isSelected }
|
||||
hideEmptyFX.setOnAction { ErosProfileManager.selected.server.list.hideEmpty = hideEmptyFX.isSelected }
|
||||
|
||||
|
||||
serverListViewFX.setCellFactory {
|
||||
val controller = ServerCardController.build()
|
||||
|
||||
@ -94,7 +104,7 @@ class ServerListController : EmbeddedJavaFXController<Pane>(), Refreshable {
|
||||
|
||||
refreshList()
|
||||
|
||||
serverListViewFX.selectionModel.selectedItemProperty().addListener { _, old, new ->
|
||||
serverListViewFX.selectionModel.selectedItemProperty().addListener { _, _, new ->
|
||||
setServerInfo(new)
|
||||
}
|
||||
}
|
||||
@ -239,15 +249,11 @@ class ServerListController : EmbeddedJavaFXController<Pane>(), Refreshable {
|
||||
if (!readOnly) {
|
||||
it.add(Button("Delete").apply {
|
||||
setOnAction {
|
||||
SimpleErosConfirmationDialog(
|
||||
confirmButtonText = "minosoft:general.delete".toResourceLocation(),
|
||||
description = TranslatableComponents.EROS_DELETE_SERVER_CONFIRM_DESCRIPTION(serverCard.server.name, serverCard.server.address),
|
||||
onConfirm = {
|
||||
Minosoft.config.config.server.entries.remove(serverCard.server.id)
|
||||
Minosoft.config.saveToFile()
|
||||
JavaFXUtil.runLater { refreshList() }
|
||||
}
|
||||
).show()
|
||||
SimpleErosConfirmationDialog(confirmButtonText = "minosoft:general.delete".toResourceLocation(), description = TranslatableComponents.EROS_DELETE_SERVER_CONFIRM_DESCRIPTION(serverCard.server.name, serverCard.server.address), onConfirm = {
|
||||
Minosoft.config.config.server.entries.remove(serverCard.server.id)
|
||||
Minosoft.config.saveToFile()
|
||||
JavaFXUtil.runLater { refreshList() }
|
||||
}).show()
|
||||
}
|
||||
}, 1, 0)
|
||||
it.add(Button("Edit").apply {
|
||||
|
@ -57,7 +57,7 @@ enum class LogMessageType(
|
||||
LogLevels.VERBOSE to ChatColors.YELLOW,
|
||||
)),
|
||||
|
||||
LOAD_PROFILES(ChatColors.AQUA),
|
||||
PROFILES(ChatColors.AQUA),
|
||||
;
|
||||
|
||||
companion object : ValuesEnum<LogMessageType> {
|
||||
|
Loading…
x
Reference in New Issue
Block a user