From 83d48c6aeee1656c5a6966839a1951e67fccbc53 Mon Sep 17 00:00:00 2001 From: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Date: Sat, 7 Sep 2024 19:59:58 +0200 Subject: Feature: Display Tab Widgets (#1276) Co-authored-by: Cal Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../at/hannibal2/skyhanni/config/ConfigManager.kt | 21 +++++----- .../skyhanni/config/core/config/Position.java | 4 ++ .../skyhanni/config/core/config/PositionList.kt | 47 ++++++++++++++++++++++ .../skyhanni/config/features/gui/GUIConfig.java | 5 +++ .../config/features/gui/TabWidgetConfig.java | 40 ++++++++++++++++++ 5 files changed, 108 insertions(+), 9 deletions(-) create mode 100644 src/main/java/at/hannibal2/skyhanni/config/core/config/PositionList.kt create mode 100644 src/main/java/at/hannibal2/skyhanni/config/features/gui/TabWidgetConfig.java (limited to 'src/main/java/at/hannibal2/skyhanni/config') diff --git a/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt b/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt index db70f7e89..4ac3f7925 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt @@ -2,6 +2,7 @@ package at.hannibal2.skyhanni.config import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.config.core.config.Position +import at.hannibal2.skyhanni.config.core.config.PositionList import at.hannibal2.skyhanni.data.jsonobjects.local.FriendsJson import at.hannibal2.skyhanni.data.jsonobjects.local.JacobContestsJson import at.hannibal2.skyhanni.data.jsonobjects.local.KnownFeaturesJson @@ -39,7 +40,6 @@ import java.nio.file.StandardCopyOption import java.util.EnumMap import kotlin.concurrent.fixedRateTimer import kotlin.reflect.KMutableProperty0 -import kotlin.reflect.KMutableProperty1 private fun GsonBuilder.registerIfBeta(create: TypeAdapterFactory): GsonBuilder { return if (LorenzUtils.isBetaVersion()) { @@ -66,8 +66,7 @@ class ConfigManager { private fun setConfigHolder(type: ConfigFileType, value: Any) { require(value.javaClass == type.clazz) - @Suppress("UNCHECKED_CAST") - (type.property as KMutableProperty0).set(value) + @Suppress("UNCHECKED_CAST") (type.property as KMutableProperty0).set(value) (jsonHolder as MutableMap)[type] = value } @@ -96,8 +95,7 @@ class ConfigManager { try { findPositionLinks(features, mutableSetOf()) } catch (e: Exception) { - if (LorenzEvent.isInGuardedEventHandler) - throw e + if (LorenzEvent.isInGuardedEventHandler) throw e } } @@ -125,7 +123,7 @@ class ConfigManager { var missingConfigLink = false for (field in obj.javaClass.fields) { field.isAccessible = true - if (field.type != Position::class.java) { + if (field.type != Position::class.java && field.type != PositionList::class.java) { findPositionLinks(field.get(obj), slog) continue } @@ -141,8 +139,13 @@ class ConfigManager { } continue } - val position = field.get(obj) as Position - position.setLink(configLink) + if (field.type == Position::class.java) { + val position = field.get(obj) as Position + position.setLink(configLink) + } else if (field.type == PositionList::class.java) { + val list = field.get(obj) as PositionList + list.setLink(configLink) + } } if (missingConfigLink) { println("") @@ -245,7 +248,7 @@ class ConfigManager { unit.toPath(), file.toPath(), StandardCopyOption.REPLACE_EXISTING, - StandardCopyOption.ATOMIC_MOVE + StandardCopyOption.ATOMIC_MOVE, ) } catch (e: AccessDeniedException) { if (loop == 5) { diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/Position.java b/src/main/java/at/hannibal2/skyhanni/config/core/config/Position.java index d0112766a..eb37131b1 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/Position.java +++ b/src/main/java/at/hannibal2/skyhanni/config/core/config/Position.java @@ -56,6 +56,10 @@ public class Position { private boolean clicked = false; public String internalName = null; + public Position() { + this(0, 0); + } + public Position(int x, int y) { this(x, y, false, false); } diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/PositionList.kt b/src/main/java/at/hannibal2/skyhanni/config/core/config/PositionList.kt new file mode 100644 index 000000000..c33f54293 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/config/core/config/PositionList.kt @@ -0,0 +1,47 @@ +package at.hannibal2.skyhanni.config.core.config + +import io.github.notenoughupdates.moulconfig.annotations.ConfigLink + +class PositionList() : ArrayList(), MutableList { + + constructor(init: Collection) : this() { + this.addAll(init) + } + + constructor(size: Int) : this() { + this.addAll((0..): Boolean { + if (configLink != null) { + elements.forEach { + it.setLink(configLink!!) + } + } + return super.addAll(elements) + } + + override fun set(index: Int, element: Position): Position { + if (configLink != null) { + element.setLink(configLink!!) + } + return super.set(index, element) + } +} diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/gui/GUIConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/gui/GUIConfig.java index 6355857f5..74ab755c9 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/gui/GUIConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/gui/GUIConfig.java @@ -86,6 +86,11 @@ public class GUIConfig { @Accordion public TextBoxConfig customTextBox = new TextBoxConfig(); + @Expose + @ConfigOption(name = "Tab Widget", desc = "") + @Accordion + public TabWidgetConfig tabWidget = new TabWidgetConfig(); + @Expose @ConfigOption(name = "In-Game Date", desc = "") @Accordion diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/gui/TabWidgetConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/gui/TabWidgetConfig.java new file mode 100644 index 000000000..2d4b27cb1 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/config/features/gui/TabWidgetConfig.java @@ -0,0 +1,40 @@ +package at.hannibal2.skyhanni.config.features.gui; + +import at.hannibal2.skyhanni.config.FeatureToggle; +import at.hannibal2.skyhanni.config.core.config.PositionList; +import at.hannibal2.skyhanni.features.gui.TabWidgetDisplay; +import com.google.gson.annotations.Expose; +import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorBoolean; +import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorDraggableList; +import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorInfoText; +import io.github.notenoughupdates.moulconfig.annotations.ConfigLink; +import io.github.notenoughupdates.moulconfig.annotations.ConfigOption; + +import java.util.ArrayList; +import java.util.List; + +public class TabWidgetConfig { + + @Expose + @ConfigOption(name = "Enabled", desc = "Enables the gui elements for the selected widgets.") + @ConfigEditorBoolean + @FeatureToggle + public boolean enabled = false; + + @ConfigOption(name = "Not working Info", desc = "If the information isn't shown in the tablist it won't show anything. Use /widget to turn on the information you need.") + @ConfigEditorInfoText + public String text1; + + @ConfigOption(name = "Enable Info", desc = "Drag only one new value at time into the list, since the default locations are all the same.") + @ConfigEditorInfoText + public String text2; + + @Expose + @ConfigOption(name = "Widgets", desc = "") + @ConfigEditorDraggableList + public List display = new ArrayList<>(); + + @Expose + @ConfigLink(owner = TabWidgetConfig.class, field = "enabled") + public PositionList displayPositions = new PositionList(TabWidgetDisplay.getEntries().size()); +} -- cgit