From bfacab52776cd8992bf895e9a447c80242fd13f5 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Tue, 4 Jan 2022 18:36:18 +0100 Subject: [PATCH] fix some crashes with bi map observation, bump kutil --- pom.xml | 2 +- .../minosoft/config/profile/ProfileManager.kt | 6 +++--- .../profiles/account/AccountProfileManager.kt | 6 ++++-- .../profile/profiles/audio/AudioProfileManager.kt | 6 ++++-- .../profile/profiles/block/BlockProfileManager.kt | 6 ++++-- .../connection/ConnectionProfileManager.kt | 6 ++++-- .../profiles/controls/ControlsProfileManager.kt | 6 ++++-- .../profiles/entity/EntityProfileManager.kt | 6 ++++-- .../profile/profiles/eros/ErosProfileManager.kt | 6 ++++-- .../profile/profiles/hud/HUDProfileManager.kt | 6 ++++-- .../profile/profiles/other/OtherProfileManager.kt | 6 ++++-- .../profiles/particle/ParticleProfileManager.kt | 6 ++++-- .../profiles/rendering/RenderingProfileManager.kt | 6 ++++-- .../profiles/resources/ResourcesProfileManager.kt | 6 ++++-- .../world/container/palette/PalettedContainer.kt | 3 ++- .../eros/main/profiles/ProfilesListController.kt | 4 ++-- .../profiles/type/ProfilesTypeCardController.kt | 15 +++++++++++++-- .../minosoft/util/delegate/JavaFXDelegate.kt | 7 +++++++ .../minosoft/util/delegate/RenderingDelegate.kt | 8 ++++++++ 19 files changed, 84 insertions(+), 33 deletions(-) diff --git a/pom.xml b/pom.xml index a96cef90e..b9232b542 100644 --- a/pom.xml +++ b/pom.xml @@ -457,7 +457,7 @@ de.bixilon kutil - 1.4.1 + 1.5 diff --git a/src/main/java/de/bixilon/minosoft/config/profile/ProfileManager.kt b/src/main/java/de/bixilon/minosoft/config/profile/ProfileManager.kt index c7eb35ed7..268e851f4 100644 --- a/src/main/java/de/bixilon/minosoft/config/profile/ProfileManager.kt +++ b/src/main/java/de/bixilon/minosoft/config/profile/ProfileManager.kt @@ -1,6 +1,6 @@ package de.bixilon.minosoft.config.profile -import com.google.common.collect.HashBiMap +import de.bixilon.kutil.collections.map.bi.AbstractMutableBiMap import de.bixilon.kutil.concurrent.pool.DefaultThreadPool import de.bixilon.kutil.exception.ExceptionUtil.tryCatch import de.bixilon.kutil.file.FileUtil @@ -44,7 +44,7 @@ interface ProfileManager { val icon: Ikon get() = FontAwesomeSolid.QUESTION - val profiles: HashBiMap + val profiles: AbstractMutableBiMap var selected: T @Deprecated("Should not be accessed") var currentLoadingPath: String? @@ -195,7 +195,7 @@ interface ProfileManager { } fun getName(profile: T): String { - return profiles.inverse()[profile] ?: "Unknown profile" + return profiles.getKey(profile) ?: "Unknown profile" } fun load(selected: String?) { diff --git a/src/main/java/de/bixilon/minosoft/config/profile/profiles/account/AccountProfileManager.kt b/src/main/java/de/bixilon/minosoft/config/profile/profiles/account/AccountProfileManager.kt index 23f7b195c..ec7407b6e 100644 --- a/src/main/java/de/bixilon/minosoft/config/profile/profiles/account/AccountProfileManager.kt +++ b/src/main/java/de/bixilon/minosoft/config/profile/profiles/account/AccountProfileManager.kt @@ -1,7 +1,9 @@ package de.bixilon.minosoft.config.profile.profiles.account -import com.google.common.collect.HashBiMap import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.kutil.collections.CollectionUtil.synchronizedBiMapOf +import de.bixilon.kutil.collections.map.bi.AbstractMutableBiMap +import de.bixilon.kutil.watcher.map.bi.BiMapDataWatcher.Companion.watchedBiMap import de.bixilon.minosoft.config.profile.GlobalProfileManager import de.bixilon.minosoft.config.profile.ProfileManager import de.bixilon.minosoft.modding.event.master.GlobalEventMaster @@ -18,7 +20,7 @@ object AccountProfileManager : ProfileManager { override var currentLoadingPath: String? = null - override val profiles: HashBiMap = HashBiMap.create() + override val profiles: AbstractMutableBiMap by watchedBiMap(synchronizedBiMapOf()) override var selected: AccountProfile = null.unsafeCast() set(value) { diff --git a/src/main/java/de/bixilon/minosoft/config/profile/profiles/audio/AudioProfileManager.kt b/src/main/java/de/bixilon/minosoft/config/profile/profiles/audio/AudioProfileManager.kt index 0d4e08d9b..6156ae00a 100644 --- a/src/main/java/de/bixilon/minosoft/config/profile/profiles/audio/AudioProfileManager.kt +++ b/src/main/java/de/bixilon/minosoft/config/profile/profiles/audio/AudioProfileManager.kt @@ -1,7 +1,9 @@ package de.bixilon.minosoft.config.profile.profiles.audio -import com.google.common.collect.HashBiMap import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.kutil.collections.CollectionUtil.synchronizedBiMapOf +import de.bixilon.kutil.collections.map.bi.AbstractMutableBiMap +import de.bixilon.kutil.watcher.map.bi.BiMapDataWatcher.Companion.watchedBiMap import de.bixilon.minosoft.config.profile.GlobalProfileManager import de.bixilon.minosoft.config.profile.ProfileManager import de.bixilon.minosoft.modding.event.master.GlobalEventMaster @@ -19,7 +21,7 @@ object AudioProfileManager : ProfileManager { override var currentLoadingPath: String? = null - override val profiles: HashBiMap = HashBiMap.create() + override val profiles: AbstractMutableBiMap by watchedBiMap(synchronizedBiMapOf()) override var selected: AudioProfile = null.unsafeCast() set(value) { diff --git a/src/main/java/de/bixilon/minosoft/config/profile/profiles/block/BlockProfileManager.kt b/src/main/java/de/bixilon/minosoft/config/profile/profiles/block/BlockProfileManager.kt index 79ad164ed..45697a46b 100644 --- a/src/main/java/de/bixilon/minosoft/config/profile/profiles/block/BlockProfileManager.kt +++ b/src/main/java/de/bixilon/minosoft/config/profile/profiles/block/BlockProfileManager.kt @@ -1,7 +1,9 @@ package de.bixilon.minosoft.config.profile.profiles.block -import com.google.common.collect.HashBiMap import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.kutil.collections.CollectionUtil.synchronizedBiMapOf +import de.bixilon.kutil.collections.map.bi.AbstractMutableBiMap +import de.bixilon.kutil.watcher.map.bi.BiMapDataWatcher.Companion.watchedBiMap import de.bixilon.minosoft.config.profile.GlobalProfileManager import de.bixilon.minosoft.config.profile.ProfileManager import de.bixilon.minosoft.modding.event.master.GlobalEventMaster @@ -18,7 +20,7 @@ object BlockProfileManager : ProfileManager { override var currentLoadingPath: String? = null - override val profiles: HashBiMap = HashBiMap.create() + override val profiles: AbstractMutableBiMap by watchedBiMap(synchronizedBiMapOf()) override var selected: BlockProfile = null.unsafeCast() set(value) { diff --git a/src/main/java/de/bixilon/minosoft/config/profile/profiles/connection/ConnectionProfileManager.kt b/src/main/java/de/bixilon/minosoft/config/profile/profiles/connection/ConnectionProfileManager.kt index 5f49e1dce..180d6651e 100644 --- a/src/main/java/de/bixilon/minosoft/config/profile/profiles/connection/ConnectionProfileManager.kt +++ b/src/main/java/de/bixilon/minosoft/config/profile/profiles/connection/ConnectionProfileManager.kt @@ -1,7 +1,9 @@ package de.bixilon.minosoft.config.profile.profiles.connection -import com.google.common.collect.HashBiMap import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.kutil.collections.CollectionUtil.synchronizedBiMapOf +import de.bixilon.kutil.collections.map.bi.AbstractMutableBiMap +import de.bixilon.kutil.watcher.map.bi.BiMapDataWatcher.Companion.watchedBiMap import de.bixilon.minosoft.config.profile.GlobalProfileManager import de.bixilon.minosoft.config.profile.ProfileManager import de.bixilon.minosoft.modding.event.master.GlobalEventMaster @@ -18,7 +20,7 @@ object ConnectionProfileManager : ProfileManager { override var currentLoadingPath: String? = null - override val profiles: HashBiMap = HashBiMap.create() + override val profiles: AbstractMutableBiMap by watchedBiMap(synchronizedBiMapOf()) override var selected: ConnectionProfile = null.unsafeCast() set(value) { diff --git a/src/main/java/de/bixilon/minosoft/config/profile/profiles/controls/ControlsProfileManager.kt b/src/main/java/de/bixilon/minosoft/config/profile/profiles/controls/ControlsProfileManager.kt index e543e6f6b..34e3261e1 100644 --- a/src/main/java/de/bixilon/minosoft/config/profile/profiles/controls/ControlsProfileManager.kt +++ b/src/main/java/de/bixilon/minosoft/config/profile/profiles/controls/ControlsProfileManager.kt @@ -1,7 +1,9 @@ package de.bixilon.minosoft.config.profile.profiles.controls -import com.google.common.collect.HashBiMap import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.kutil.collections.CollectionUtil.synchronizedBiMapOf +import de.bixilon.kutil.collections.map.bi.AbstractMutableBiMap +import de.bixilon.kutil.watcher.map.bi.BiMapDataWatcher.Companion.watchedBiMap import de.bixilon.minosoft.config.profile.GlobalProfileManager import de.bixilon.minosoft.config.profile.ProfileManager import de.bixilon.minosoft.modding.event.master.GlobalEventMaster @@ -18,7 +20,7 @@ object ControlsProfileManager : ProfileManager { override var currentLoadingPath: String? = null - override val profiles: HashBiMap = HashBiMap.create() + override val profiles: AbstractMutableBiMap by watchedBiMap(synchronizedBiMapOf()) override var selected: ControlsProfile = null.unsafeCast() set(value) { diff --git a/src/main/java/de/bixilon/minosoft/config/profile/profiles/entity/EntityProfileManager.kt b/src/main/java/de/bixilon/minosoft/config/profile/profiles/entity/EntityProfileManager.kt index 018c91b06..a33e3979c 100644 --- a/src/main/java/de/bixilon/minosoft/config/profile/profiles/entity/EntityProfileManager.kt +++ b/src/main/java/de/bixilon/minosoft/config/profile/profiles/entity/EntityProfileManager.kt @@ -1,7 +1,9 @@ package de.bixilon.minosoft.config.profile.profiles.entity -import com.google.common.collect.HashBiMap import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.kutil.collections.CollectionUtil.synchronizedBiMapOf +import de.bixilon.kutil.collections.map.bi.AbstractMutableBiMap +import de.bixilon.kutil.watcher.map.bi.BiMapDataWatcher.Companion.watchedBiMap import de.bixilon.minosoft.config.profile.GlobalProfileManager import de.bixilon.minosoft.config.profile.ProfileManager import de.bixilon.minosoft.modding.event.master.GlobalEventMaster @@ -18,7 +20,7 @@ object EntityProfileManager : ProfileManager { override var currentLoadingPath: String? = null - override val profiles: HashBiMap = HashBiMap.create() + override val profiles: AbstractMutableBiMap by watchedBiMap(synchronizedBiMapOf()) override var selected: EntityProfile = null.unsafeCast() set(value) { diff --git a/src/main/java/de/bixilon/minosoft/config/profile/profiles/eros/ErosProfileManager.kt b/src/main/java/de/bixilon/minosoft/config/profile/profiles/eros/ErosProfileManager.kt index 711eb41bb..a1dc0ab4e 100644 --- a/src/main/java/de/bixilon/minosoft/config/profile/profiles/eros/ErosProfileManager.kt +++ b/src/main/java/de/bixilon/minosoft/config/profile/profiles/eros/ErosProfileManager.kt @@ -1,7 +1,9 @@ package de.bixilon.minosoft.config.profile.profiles.eros -import com.google.common.collect.HashBiMap import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.kutil.collections.CollectionUtil.synchronizedBiMapOf +import de.bixilon.kutil.collections.map.bi.AbstractMutableBiMap +import de.bixilon.kutil.watcher.map.bi.BiMapDataWatcher.Companion.watchedBiMap import de.bixilon.minosoft.config.profile.GlobalProfileManager import de.bixilon.minosoft.config.profile.ProfileManager import de.bixilon.minosoft.config.profile.delegate.delegate.BackingDelegate @@ -29,7 +31,7 @@ object ErosProfileManager : ProfileManager { override var currentLoadingPath: String? = null - override val profiles: HashBiMap = HashBiMap.create() + override val profiles: AbstractMutableBiMap by watchedBiMap(synchronizedBiMapOf()) override var selected: ErosProfile = null.unsafeCast() set(value) { diff --git a/src/main/java/de/bixilon/minosoft/config/profile/profiles/hud/HUDProfileManager.kt b/src/main/java/de/bixilon/minosoft/config/profile/profiles/hud/HUDProfileManager.kt index 6325d2701..87b44440c 100644 --- a/src/main/java/de/bixilon/minosoft/config/profile/profiles/hud/HUDProfileManager.kt +++ b/src/main/java/de/bixilon/minosoft/config/profile/profiles/hud/HUDProfileManager.kt @@ -1,7 +1,9 @@ package de.bixilon.minosoft.config.profile.profiles.hud -import com.google.common.collect.HashBiMap import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.kutil.collections.CollectionUtil.synchronizedBiMapOf +import de.bixilon.kutil.collections.map.bi.AbstractMutableBiMap +import de.bixilon.kutil.watcher.map.bi.BiMapDataWatcher.Companion.watchedBiMap import de.bixilon.minosoft.config.profile.GlobalProfileManager import de.bixilon.minosoft.config.profile.ProfileManager import de.bixilon.minosoft.modding.event.master.GlobalEventMaster @@ -18,7 +20,7 @@ object HUDProfileManager : ProfileManager { override var currentLoadingPath: String? = null - override val profiles: HashBiMap = HashBiMap.create() + override val profiles: AbstractMutableBiMap by watchedBiMap(synchronizedBiMapOf()) override var selected: HUDProfile = null.unsafeCast() set(value) { diff --git a/src/main/java/de/bixilon/minosoft/config/profile/profiles/other/OtherProfileManager.kt b/src/main/java/de/bixilon/minosoft/config/profile/profiles/other/OtherProfileManager.kt index b1e1207a3..2b4abddc1 100644 --- a/src/main/java/de/bixilon/minosoft/config/profile/profiles/other/OtherProfileManager.kt +++ b/src/main/java/de/bixilon/minosoft/config/profile/profiles/other/OtherProfileManager.kt @@ -1,7 +1,9 @@ package de.bixilon.minosoft.config.profile.profiles.other -import com.google.common.collect.HashBiMap import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.kutil.collections.CollectionUtil.synchronizedBiMapOf +import de.bixilon.kutil.collections.map.bi.AbstractMutableBiMap +import de.bixilon.kutil.watcher.map.bi.BiMapDataWatcher.Companion.watchedBiMap import de.bixilon.minosoft.config.profile.GlobalProfileManager import de.bixilon.minosoft.config.profile.ProfileManager import de.bixilon.minosoft.modding.event.master.GlobalEventMaster @@ -18,7 +20,7 @@ object OtherProfileManager : ProfileManager { override var currentLoadingPath: String? = null - override val profiles: HashBiMap = HashBiMap.create() + override val profiles: AbstractMutableBiMap by watchedBiMap(synchronizedBiMapOf()) override var selected: OtherProfile = null.unsafeCast() set(value) { diff --git a/src/main/java/de/bixilon/minosoft/config/profile/profiles/particle/ParticleProfileManager.kt b/src/main/java/de/bixilon/minosoft/config/profile/profiles/particle/ParticleProfileManager.kt index 2d7ccbcec..b77ea0b06 100644 --- a/src/main/java/de/bixilon/minosoft/config/profile/profiles/particle/ParticleProfileManager.kt +++ b/src/main/java/de/bixilon/minosoft/config/profile/profiles/particle/ParticleProfileManager.kt @@ -1,7 +1,9 @@ package de.bixilon.minosoft.config.profile.profiles.particle -import com.google.common.collect.HashBiMap import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.kutil.collections.CollectionUtil.synchronizedBiMapOf +import de.bixilon.kutil.collections.map.bi.AbstractMutableBiMap +import de.bixilon.kutil.watcher.map.bi.BiMapDataWatcher.Companion.watchedBiMap import de.bixilon.minosoft.config.profile.GlobalProfileManager import de.bixilon.minosoft.config.profile.ProfileManager import de.bixilon.minosoft.modding.event.master.GlobalEventMaster @@ -18,7 +20,7 @@ object ParticleProfileManager : ProfileManager { override var currentLoadingPath: String? = null - override val profiles: HashBiMap = HashBiMap.create() + override val profiles: AbstractMutableBiMap by watchedBiMap(synchronizedBiMapOf()) override var selected: ParticleProfile = null.unsafeCast() set(value) { diff --git a/src/main/java/de/bixilon/minosoft/config/profile/profiles/rendering/RenderingProfileManager.kt b/src/main/java/de/bixilon/minosoft/config/profile/profiles/rendering/RenderingProfileManager.kt index ee878ab58..28a0cb000 100644 --- a/src/main/java/de/bixilon/minosoft/config/profile/profiles/rendering/RenderingProfileManager.kt +++ b/src/main/java/de/bixilon/minosoft/config/profile/profiles/rendering/RenderingProfileManager.kt @@ -1,7 +1,9 @@ package de.bixilon.minosoft.config.profile.profiles.rendering -import com.google.common.collect.HashBiMap import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.kutil.collections.CollectionUtil.synchronizedBiMapOf +import de.bixilon.kutil.collections.map.bi.AbstractMutableBiMap +import de.bixilon.kutil.watcher.map.bi.BiMapDataWatcher.Companion.watchedBiMap import de.bixilon.minosoft.config.profile.GlobalProfileManager import de.bixilon.minosoft.config.profile.ProfileManager import de.bixilon.minosoft.modding.event.master.GlobalEventMaster @@ -18,7 +20,7 @@ object RenderingProfileManager : ProfileManager { override var currentLoadingPath: String? = null - override val profiles: HashBiMap = HashBiMap.create() + override val profiles: AbstractMutableBiMap by watchedBiMap(synchronizedBiMapOf()) override var selected: RenderingProfile = null.unsafeCast() set(value) { diff --git a/src/main/java/de/bixilon/minosoft/config/profile/profiles/resources/ResourcesProfileManager.kt b/src/main/java/de/bixilon/minosoft/config/profile/profiles/resources/ResourcesProfileManager.kt index 93d307d8c..dfa456d8c 100644 --- a/src/main/java/de/bixilon/minosoft/config/profile/profiles/resources/ResourcesProfileManager.kt +++ b/src/main/java/de/bixilon/minosoft/config/profile/profiles/resources/ResourcesProfileManager.kt @@ -1,7 +1,9 @@ package de.bixilon.minosoft.config.profile.profiles.resources -import com.google.common.collect.HashBiMap import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.kutil.collections.CollectionUtil.synchronizedBiMapOf +import de.bixilon.kutil.collections.map.bi.AbstractMutableBiMap +import de.bixilon.kutil.watcher.map.bi.BiMapDataWatcher.Companion.watchedBiMap import de.bixilon.minosoft.config.profile.GlobalProfileManager import de.bixilon.minosoft.config.profile.ProfileManager import de.bixilon.minosoft.modding.event.master.GlobalEventMaster @@ -18,7 +20,7 @@ object ResourcesProfileManager : ProfileManager { override var currentLoadingPath: String? = null - override val profiles: HashBiMap = HashBiMap.create() + override val profiles: AbstractMutableBiMap by watchedBiMap(synchronizedBiMapOf()) override var selected: ResourcesProfile = null.unsafeCast() set(value) { diff --git a/src/main/java/de/bixilon/minosoft/data/world/container/palette/PalettedContainer.kt b/src/main/java/de/bixilon/minosoft/data/world/container/palette/PalettedContainer.kt index 5a164d694..71cf0c61c 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/container/palette/PalettedContainer.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/container/palette/PalettedContainer.kt @@ -13,6 +13,7 @@ package de.bixilon.minosoft.data.world.container.palette +import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.minosoft.data.world.container.palette.data.PaletteData import de.bixilon.minosoft.data.world.container.palette.palettes.Palette @@ -31,6 +32,6 @@ class PalettedContainer( for (i in array.indices) { array[i] = palette.get(data.get(i)) as V } - return array as Array + return array.unsafeCast() } } diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/main/profiles/ProfilesListController.kt b/src/main/java/de/bixilon/minosoft/gui/eros/main/profiles/ProfilesListController.kt index a8e1da3e6..dc6f35f73 100644 --- a/src/main/java/de/bixilon/minosoft/gui/eros/main/profiles/ProfilesListController.kt +++ b/src/main/java/de/bixilon/minosoft/gui/eros/main/profiles/ProfilesListController.kt @@ -29,7 +29,7 @@ import de.bixilon.minosoft.gui.eros.dialog.profiles.ProfileCreateDialog import de.bixilon.minosoft.gui.eros.util.JavaFXUtil import de.bixilon.minosoft.gui.eros.util.JavaFXUtil.ctext import de.bixilon.minosoft.util.KUtil.toResourceLocation -import de.bixilon.minosoft.util.delegate.JavaFXDelegate.observeMapFX +import de.bixilon.minosoft.util.delegate.JavaFXDelegate.observeBiMapFX import javafx.fxml.FXML import javafx.geometry.HPos import javafx.geometry.Insets @@ -75,7 +75,7 @@ class ProfilesListController : EmbeddedJavaFXController() { } fun initWatch() { - profileManager!!::profiles.observeMapFX(this) { + profileManager!!::profiles.observeBiMapFX(this) { profilesListViewFX.items -= it.removes.values() profilesListViewFX.items += it.adds.values() profilesListViewFX.refresh() diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/main/profiles/type/ProfilesTypeCardController.kt b/src/main/java/de/bixilon/minosoft/gui/eros/main/profiles/type/ProfilesTypeCardController.kt index fd8b1d8ef..2e28f4fb9 100644 --- a/src/main/java/de/bixilon/minosoft/gui/eros/main/profiles/type/ProfilesTypeCardController.kt +++ b/src/main/java/de/bixilon/minosoft/gui/eros/main/profiles/type/ProfilesTypeCardController.kt @@ -13,16 +13,22 @@ package de.bixilon.minosoft.gui.eros.main.profiles.type +import de.bixilon.kutil.cast.CastUtil.unsafeCast +import de.bixilon.kutil.collections.map.bi.AbstractMutableBiMap +import de.bixilon.kutil.watcher.map.MapChange +import de.bixilon.kutil.watcher.map.bi.BiMapDataWatcher.Companion.observeBiMap import de.bixilon.minosoft.Minosoft import de.bixilon.minosoft.config.profile.ProfileManager +import de.bixilon.minosoft.config.profile.profiles.Profile import de.bixilon.minosoft.gui.eros.card.AbstractCardController import de.bixilon.minosoft.gui.eros.card.CardFactory +import de.bixilon.minosoft.gui.eros.util.JavaFXUtil import de.bixilon.minosoft.gui.eros.util.JavaFXUtil.text import de.bixilon.minosoft.util.KUtil.toResourceLocation -import de.bixilon.minosoft.util.delegate.JavaFXDelegate.observeFX import javafx.fxml.FXML import javafx.scene.text.TextFlow import org.kordamp.ikonli.javafx.FontIcon +import kotlin.reflect.KProperty0 class ProfilesTypeCardController : AbstractCardController>() { @FXML private lateinit var iconFX: FontIcon @@ -44,7 +50,7 @@ class ProfilesTypeCardController : AbstractCardController>() { headerFX.text = Minosoft.LANGUAGE_MANAGER.translate(item.namespace) recalculate(item) - item::profiles.observeFX(this) { recalculate(item) } // ToDo: Not a watchable map yet + item::profiles.observeBiMapFX(this) { recalculate(item) } } private fun recalculate(item: ProfileManager<*>) { @@ -60,5 +66,10 @@ class ProfilesTypeCardController : AbstractCardController>() { companion object : CardFactory { override val LAYOUT = "minosoft:eros/main/profiles/profiles_type_card.fxml".toResourceLocation() + + + private fun KProperty0>.observeBiMapFX(owner: Any, observer: (MapChange) -> Unit) { + this.unsafeCast>>().observeBiMap(owner) { JavaFXUtil.runLater { observer(it) } } + } } } diff --git a/src/main/java/de/bixilon/minosoft/util/delegate/JavaFXDelegate.kt b/src/main/java/de/bixilon/minosoft/util/delegate/JavaFXDelegate.kt index 5befe2578..d63458627 100644 --- a/src/main/java/de/bixilon/minosoft/util/delegate/JavaFXDelegate.kt +++ b/src/main/java/de/bixilon/minosoft/util/delegate/JavaFXDelegate.kt @@ -1,10 +1,12 @@ package de.bixilon.minosoft.util.delegate +import de.bixilon.kutil.collections.map.bi.AbstractBiMap import de.bixilon.kutil.watcher.DataWatcher.Companion.observe import de.bixilon.kutil.watcher.list.ListChange import de.bixilon.kutil.watcher.list.ListDataWatcher.Companion.observeList import de.bixilon.kutil.watcher.map.MapChange import de.bixilon.kutil.watcher.map.MapDataWatcher.Companion.observeMap +import de.bixilon.kutil.watcher.map.bi.BiMapDataWatcher.Companion.observeBiMap import de.bixilon.kutil.watcher.set.SetChange import de.bixilon.kutil.watcher.set.SetDataWatcher.Companion.observeSet import de.bixilon.minosoft.gui.eros.util.JavaFXUtil @@ -31,4 +33,9 @@ object JavaFXDelegate { fun KProperty0>.observeMapFX(owner: Any, observer: (MapChange) -> Unit) { this.observeMap(owner) { JavaFXUtil.runLater { observer(it) } } } + + @Suppress("NON_PUBLIC_CALL_FROM_PUBLIC_INLINE") + fun KProperty0>.observeBiMapFX(owner: Any, observer: (MapChange) -> Unit) { + this.observeBiMap(owner) { JavaFXUtil.runLater { observer(it) } } + } } diff --git a/src/main/java/de/bixilon/minosoft/util/delegate/RenderingDelegate.kt b/src/main/java/de/bixilon/minosoft/util/delegate/RenderingDelegate.kt index 224f055ba..1edb3dcad 100644 --- a/src/main/java/de/bixilon/minosoft/util/delegate/RenderingDelegate.kt +++ b/src/main/java/de/bixilon/minosoft/util/delegate/RenderingDelegate.kt @@ -1,10 +1,12 @@ package de.bixilon.minosoft.util.delegate +import de.bixilon.kutil.collections.map.bi.AbstractBiMap import de.bixilon.kutil.watcher.DataWatcher.Companion.observe import de.bixilon.kutil.watcher.list.ListChange import de.bixilon.kutil.watcher.list.ListDataWatcher.Companion.observeList import de.bixilon.kutil.watcher.map.MapChange import de.bixilon.kutil.watcher.map.MapDataWatcher.Companion.observeMap +import de.bixilon.kutil.watcher.map.bi.BiMapDataWatcher.Companion.observeBiMap import de.bixilon.kutil.watcher.set.SetChange import de.bixilon.kutil.watcher.set.SetDataWatcher.Companion.observeSet import de.bixilon.minosoft.gui.rendering.RenderWindow @@ -49,4 +51,10 @@ object RenderingDelegate { val context = requireContext() this.observeMap(owner) { runInContext(context, it, observer) } } + + @Suppress("NON_PUBLIC_CALL_FROM_PUBLIC_INLINE") + fun KProperty0>.observeBiMapRendering(owner: Any, observer: (MapChange) -> Unit) { + val context = requireContext() + this.observeBiMap(owner) { runInContext(context, it, observer) } + } }