Skip to content

Commit 88725d9

Browse files
committed
hiding accordions, notifications default duration, input fix (this was pain to debug)
1 parent 3648d32 commit 88725d9

File tree

10 files changed

+77
-48
lines changed

10 files changed

+77
-48
lines changed

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ kotlin = "2.0.20"
66
kotlinx-coroutines = "1.8.1"
77
kotlinx-atomicfu = "0.24.0"
88
fabric-language-kotlin = "1.12.2+kotlin.2.0.20"
9-
polyui = "1.7.24"
9+
polyui = "1.7.25"
1010
annotations = "24.1.0"
1111
hypixel-modapi = "1.0"
1212
hypixel-data = "0.1.2" # Dep of hypixel-modapi

modules/config-impl/api/config-impl.api

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ public abstract class org/polyfrost/oneconfig/api/config/v1/Config {
55
public fun <init> (Ljava/lang/String;Ljava/lang/String;Lorg/polyfrost/oneconfig/api/config/v1/Config$Category;)V
66
public final fun addAliases ([Ljava/lang/String;)V
77
protected fun addCallback (Ljava/lang/String;Ljava/lang/Runnable;)V
8-
protected fun addCallback (Ljava/lang/String;Ljava/util/function/Consumer;)V
98
protected fun addCallback (Ljava/lang/String;Ljava/util/function/Predicate;)V
109
protected fun addDependency (Ljava/lang/String;Ljava/lang/String;)V
11-
protected fun addDependency (Ljava/lang/String;Ljava/lang/String;Ljava/util/function/BooleanSupplier;)V
12-
protected fun addDependency (Ljava/lang/String;Ljava/util/function/BooleanSupplier;)V
10+
protected fun addDependency (Ljava/lang/String;Ljava/lang/String;Ljava/util/function/Supplier;)V
11+
protected fun addDependency (Ljava/lang/String;Ljava/lang/String;Z)V
1312
protected fun getProperty (Ljava/lang/String;)Lorg/polyfrost/oneconfig/api/config/v1/Property;
1413
public fun getTree ()Lorg/polyfrost/oneconfig/api/config/v1/Tree;
14+
protected fun hideIf (Ljava/lang/String;Ljava/lang/String;)V
1515
protected fun loadFrom (Ljava/lang/String;)V
1616
protected fun loadFrom (Ljava/nio/file/Path;)V
1717
protected fun makeTree (Ljava/lang/String;)Lorg/polyfrost/oneconfig/api/config/v1/Tree;

modules/config-impl/src/main/java/org/polyfrost/oneconfig/api/config/v1/Config.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,6 @@ protected <T> void addCallback(String option, Predicate<T> callback) {
104104
((Property<T>) getProperty(option)).addCallback(callback);
105105
}
106106

107-
108-
protected void hideWhenShouldNotDisplay(String option) {
109-
getProperty(option).addMetadata("hideOnDisplayFailure", true);
110-
}
111-
112-
113107
/**
114108
* Add a callback to the specified option path, which is dot-separated for sub-configs.
115109
* <br>

modules/config-impl/src/main/kotlin/org/polyfrost/oneconfig/api/config/v1/internal/ConfigVisualizer.kt

Lines changed: 53 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ open class ConfigVisualizer {
6464
protected val stdAccord = Align(main = Align.Main.SpaceBetween, pad = Vec2.ZERO)
6565
protected val ic2text = Align(pad = Vec2(8f, 0f))
6666
protected val stdOpt = Align(cross = Align.Cross.Start, mode = Align.Mode.Vertical, pad = Vec2(0f, 8f))
67-
protected val accordOpt = Align(cross = Align.Cross.Start, pad = Vec2(24f, 12f))
67+
protected val accordOpt = Align(cross = Align.Cross.Start, pad = Vec2(22f, 12f))
6868

6969
/**
7070
* For information, see [create].
@@ -198,33 +198,59 @@ open class ConfigVisualizer {
198198
index.add(node.title to node.description)
199199
wrapForAccordion(vis.visualize(node), node.title ?: return@map null, node.description).addHideHandler(node)
200200
}
201+
201202
var open = false
203+
val e: Property<*>? = tree.getProp("enabled")
204+
val toWrap: Drawable
205+
var enabled: Property<Boolean>? = null
206+
// asm: signature as it prevents re-wrapping of function
207+
val openInsn: Drawable.(Any?) -> Unit = {
208+
open = !open
209+
val arrow = if (enabled != null) this[1][1] else this[1]
210+
Rotate(arrow, if (!open) PI else 0.0, false, Animations.Default.create(0.2.seconds)).add()
211+
val value = parent[1].height
212+
val anim = Animations.Default.create(0.4.seconds)
213+
val operation = Resize(parent, width = 0f, height = if (open) -value else value, add = true, anim)
214+
addOperation(
215+
object : ComponentOp.Animatable<Component>(parent, anim, onFinish = {
216+
this[1].renders = !open
217+
this[1].isEnabled = !open
218+
}) {
219+
override fun apply(value: Float) {
220+
operation.apply()
221+
// asm: instruct parent (options list) to replace all its children so that they move with it closing
222+
self.parent.position()
223+
// asm: instruct all children of this accordion to update their visibility based on THIS, NOT its parent
224+
self[1].children!!.fastEach { option ->
225+
option.renders = option.intersects(self.x, self.y, self.width, self.height)
226+
}
227+
}
228+
},
229+
)
230+
}
231+
232+
if (e != null && e.type == Boolean::class.java && e.getVisualizer() == null) {
233+
toWrap = Group(
234+
Switch(
235+
lateralStretch = 2f,
236+
size = 21f,
237+
state = e.getAs()
238+
).onToggle {
239+
e.setAs(it)
240+
if (open != !it) (parent.parent as Drawable).openInsn(null)
241+
},
242+
Image("polyui/chevron-down.svg").also { it.rotation = PI }
243+
)
244+
enabled = e as Property<Boolean>
245+
} else {
246+
toWrap = Image("polyui/chevron-down.svg").also { it.rotation = PI }
247+
}
202248
val out = Block(
203-
wrap(Image("polyui/chevron-down.svg".image()).also { it.rotation = PI }, title, desc, icon).events {
204-
self.color = PolyColor.TRANSPARENT
205-
Event.Mouse.Companion.Clicked then {
206-
open = !open
207-
Rotate(this[1], if (!open) PI else 0.0, false, Animations.Default.create(0.2.seconds)).add()
208-
val value = parent[1].height
209-
val anim = Animations.Default.create(0.4.seconds)
210-
val operation = Resize(parent, width = 0f, height = if (open) -value else value, add = true, anim)
211-
addOperation(
212-
object : ComponentOp.Animatable<Component>(parent, anim, onFinish = {
213-
this[1].renders = !open
214-
this[1].isEnabled = !open
215-
}) {
216-
override fun apply(value: Float) {
217-
operation.apply()
218-
// asm: instruct parent (options list) to replace all its children so that they move with it closing
219-
self.parent.position()
220-
// asm: instruct all children of this accordion to update their visibility based on THIS, NOT its parent
221-
self[1].children!!.fastEach {
222-
it.renders = it.intersects(self.x, self.y, self.width, self.height)
223-
}
224-
}
225-
},
226-
)
227-
true
249+
wrap(toWrap, title, desc, icon).also {
250+
it.color = PolyColor.TRANSPARENT
251+
it.onClick {
252+
if(enabled != null && !enabled.getAs<Boolean>()) return@onClick
253+
this.openInsn(null)
228254
}
229255
},
230256
Group(
@@ -291,7 +317,7 @@ open class ConfigVisualizer {
291317
if (s == Property.Display.HIDDEN) {
292318
hidden = true
293319
if (!initialized) {
294-
this.afterParentInit {
320+
this.afterParentInit(Int.MAX_VALUE) {
295321
layoutIgnored = true
296322
x = -100f
297323
y = -100f

modules/config/api/config.api

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@ public abstract class org/polyfrost/oneconfig/api/config/v1/Property : org/polyf
5757
public final fun addCallback (Ljava/util/function/Predicate;)Lorg/polyfrost/oneconfig/api/config/v1/Property;
5858
public final fun addCallback ([Ljava/util/function/Predicate;)Lorg/polyfrost/oneconfig/api/config/v1/Property;
5959
public final fun addDisplayCondition (Ljava/util/Collection;)Lorg/polyfrost/oneconfig/api/config/v1/Property;
60-
public final fun addDisplayCondition (Ljava/util/function/BooleanSupplier;)Lorg/polyfrost/oneconfig/api/config/v1/Property;
61-
public final fun addDisplayCondition (Lorg/polyfrost/oneconfig/api/config/v1/Property;)Lorg/polyfrost/oneconfig/api/config/v1/Property;
62-
public final fun addDisplayCondition ([Ljava/util/function/BooleanSupplier;)Lorg/polyfrost/oneconfig/api/config/v1/Property;
60+
public final fun addDisplayCondition (Ljava/util/function/Supplier;)Lorg/polyfrost/oneconfig/api/config/v1/Property;
61+
public final fun addDisplayCondition (Lorg/polyfrost/oneconfig/api/config/v1/Property;Z)Lorg/polyfrost/oneconfig/api/config/v1/Property;
62+
public final fun addDisplayCondition ([Ljava/util/function/Supplier;)Lorg/polyfrost/oneconfig/api/config/v1/Property;
6363
public final fun canDisplay ()Z
6464
protected final fun clearCallbacks ()V
6565
protected final fun clearDisplayConditions ()V
@@ -72,8 +72,6 @@ public abstract class org/polyfrost/oneconfig/api/config/v1/Property : org/polyf
7272
public fun onDisplayChange (Ljava/util/function/Consumer;)V
7373
public fun overwrite (Lorg/polyfrost/oneconfig/api/config/v1/Node;)V
7474
public static fun recast (Lorg/polyfrost/oneconfig/api/config/v1/Property;)Lorg/polyfrost/oneconfig/api/config/v1/Property;
75-
public final fun removeCallback (Ljava/util/function/Predicate;)V
76-
public final fun removeDisplayCondition (Ljava/util/function/BooleanSupplier;)V
7775
public fun revaluateDisplay ()V
7876
public final fun set (Ljava/lang/Object;)V
7977
protected abstract fun set0 (Ljava/lang/Object;)V
@@ -83,6 +81,14 @@ public abstract class org/polyfrost/oneconfig/api/config/v1/Property : org/polyf
8381
public final fun toString ()Ljava/lang/String;
8482
}
8583

84+
public final class org/polyfrost/oneconfig/api/config/v1/Property$Display : java/lang/Enum {
85+
public static final field DISABLED Lorg/polyfrost/oneconfig/api/config/v1/Property$Display;
86+
public static final field HIDDEN Lorg/polyfrost/oneconfig/api/config/v1/Property$Display;
87+
public static final field SHOWN Lorg/polyfrost/oneconfig/api/config/v1/Property$Display;
88+
public static fun valueOf (Ljava/lang/String;)Lorg/polyfrost/oneconfig/api/config/v1/Property$Display;
89+
public static fun values ()[Lorg/polyfrost/oneconfig/api/config/v1/Property$Display;
90+
}
91+
8692
public final class org/polyfrost/oneconfig/api/config/v1/Property$KtProperty : org/polyfrost/oneconfig/api/config/v1/Property {
8793
public fun <init> (Ljava/lang/String;Ljava/lang/String;Lkotlin/reflect/KMutableProperty0;Ljava/lang/Class;)V
8894
public fun get ()Ljava/lang/Object;

modules/ui/api/ui.api

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
public final class org/polyfrost/oneconfig/api/ui/v1/Notifications {
22
public static final field INSTANCE Lorg/polyfrost/oneconfig/api/ui/v1/Notifications;
3-
public static final fun enqueue (Lorg/polyfrost/oneconfig/api/ui/v1/Notifications$Type;Ljava/lang/String;J)Lorg/polyfrost/polyui/component/impl/Block;
3+
public static final fun enqueue (Lorg/polyfrost/oneconfig/api/ui/v1/Notifications$Type;Ljava/lang/String;)Lorg/polyfrost/polyui/component/impl/Block;
4+
public static final fun enqueue (Lorg/polyfrost/oneconfig/api/ui/v1/Notifications$Type;Ljava/lang/String;Ljava/lang/String;)Lorg/polyfrost/polyui/component/impl/Block;
45
public static final fun enqueue (Lorg/polyfrost/oneconfig/api/ui/v1/Notifications$Type;Ljava/lang/String;Ljava/lang/String;J)Lorg/polyfrost/polyui/component/impl/Block;
56
public static synthetic fun enqueue$default (Lorg/polyfrost/oneconfig/api/ui/v1/Notifications$Type;Ljava/lang/String;Ljava/lang/String;JILjava/lang/Object;)Lorg/polyfrost/polyui/component/impl/Block;
67
public static final fun enqueueCustom ([Lorg/polyfrost/polyui/component/Component;Lorg/polyfrost/polyui/animate/Animation;)Lorg/polyfrost/polyui/component/impl/Block;

modules/ui/src/main/kotlin/org/polyfrost/oneconfig/api/ui/v1/Notifications.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ object Notifications {
8989

9090
@JvmOverloads
9191
@JvmStatic
92-
fun enqueue(type: Type, title: String = type.title, description: String, durationNanos: Long) = enqueueCustom(
92+
fun enqueue(type: Type, title: String = type.title, description: String, durationNanos: Long = 5.seconds) = enqueueCustom(
9393
Block(
9494
Image("polyui/chevron-down.svg".image(), size = Vec2(32f, 32f)),
9595
Text(title, fontSize = 14f).setFont { medium },

modules/ui/src/main/kotlin/org/polyfrost/oneconfig/api/ui/v1/keybind/KeybindManager.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ object KeybindManager {
111111

112112
@JvmStatic
113113
fun translateKey(inputManager: InputManager, key: Int, character: Char, state: Boolean) {
114-
if (character != '\u0000') {
114+
if (character != '\u0000' && (character.isLetterOrDigit() || character.isWhitespace())) {
115115
inputManager.keyTyped(character)
116116
}
117117

@@ -125,8 +125,7 @@ object KeybindManager {
125125
// modern fix because glfwModCharCallback doesn't work correctly
126126
if (inputManager.mods > 1 && key < 255) {
127127
inputManager.keyTyped((key + 32).toChar())
128-
}
129-
inputManager.keyDown(key)
128+
} else inputManager.keyDown(key)
130129
} else {
131130
keysMap[key]?.let { inputManager.keyUp(it); return }
132131
val m = modsMap[key]

versions/src/main/java/org/polyfrost/oneconfig/api/ui/v1/internal/wrappers/PolyUIScreen.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,6 @@ public void onScreenClose() {
260260
private void death(Exception e) {
261261
Platform.screen().close();
262262
LOGGER.error("Unexpected error", e);
263-
Notifications.enqueue(Notifications.Type.Error, "An unexpected error occurred with this screen.\nPlease report this to the developer!", 5_000_000_000L);
263+
Notifications.enqueue(Notifications.Type.Error, "An unexpected error occurred with this screen.\nPlease report this to the developer!");
264264
}
265265
}

versions/src/main/java/org/polyfrost/oneconfig/test/TestConfig_Test.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,9 @@ private static void main() {
100100

101101
@Accordion(title = "an accordion", description = "AAAAAAAAAAAAAAAAAAAAAAAAAAH", index = 4)
102102
public static class AinnerAAAA {
103+
@Include
104+
public static boolean enabled = true;
105+
103106
@Text(title = "Text")
104107
public static String text = "Hello world!";
105108

0 commit comments

Comments
 (0)