Skip to content

Commit abece91

Browse files
committed
AbstractSetting: Add "formatter" parameter
This patch adds a new "formatter: (T) -> String" parameter to the AbstractSetting abstract class. This allows for formatter functions to be passed to settings for them to display their value in a more user friendly way :) A possible usage of this would be to replace the unit parameter, as it simply concatinates the unit string to the setting value, which is a bit missleading IMO.
1 parent 414581b commit abece91

File tree

16 files changed

+75
-51
lines changed

16 files changed

+75
-51
lines changed

src/main/kotlin/com/lambda/client/setting/configs/PluginConfig.kt

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -51,35 +51,35 @@ class PluginConfig(pluginName: String) : NameableConfig<IPluginClass>(
5151
} ?: emptyList()
5252
}
5353

54-
override fun <E : Enum<E>> IPluginClass.setting(name: String, value: E, visibility: () -> Boolean, consumer: (prev: E, input: E) -> E, description: String): EnumSetting<E> {
55-
return setting(EnumSetting(name, value, visibility, consumer, description))
54+
override fun <E : Enum<E>> IPluginClass.setting(name: String, value: E, visibility: () -> Boolean, consumer: (prev: E, input: E) -> E, description: String, unit: String, formatter: (E) -> String): EnumSetting<E> {
55+
return setting(EnumSetting(name, value, visibility, consumer, description, unit, formatter))
5656
}
5757

58-
override fun IPluginClass.setting(name: String, value: Boolean, visibility: () -> Boolean, consumer: (prev: Boolean, input: Boolean) -> Boolean, description: String): BooleanSetting {
59-
return setting(BooleanSetting(name, value, visibility, consumer, description))
58+
override fun IPluginClass.setting(name: String, value: Boolean, visibility: () -> Boolean, consumer: (prev: Boolean, input: Boolean) -> Boolean, description: String, formatter: (Boolean) -> String): BooleanSetting {
59+
return setting(BooleanSetting(name, value, visibility, consumer, description, formatter))
6060
}
6161

62-
override fun IPluginClass.setting(name: String, value: ColorHolder, hasAlpha: Boolean, visibility: () -> Boolean, description: String): ColorSetting {
63-
return setting(ColorSetting(name, value, hasAlpha, visibility, description))
62+
override fun IPluginClass.setting(name: String, value: ColorHolder, hasAlpha: Boolean, visibility: () -> Boolean, description: String, formatter: (ColorHolder) -> String): ColorSetting {
63+
return setting(ColorSetting(name, value, hasAlpha, visibility, description, formatter))
6464
}
6565

66-
override fun IPluginClass.setting(name: String, value: String, visibility: () -> Boolean, consumer: (prev: String, input: String) -> String, description: String): StringSetting {
67-
return setting(StringSetting(name, value, visibility, consumer, description))
66+
override fun IPluginClass.setting(name: String, value: String, visibility: () -> Boolean, consumer: (prev: String, input: String) -> String, description: String, formatter: (String) -> String): StringSetting {
67+
return setting(StringSetting(name, value, visibility, consumer, description, formatter))
6868
}
6969

70-
override fun IPluginClass.setting(name: String, value: Double, range: ClosedFloatingPointRange<Double>, step: Double, visibility: () -> Boolean, consumer: (prev: Double, input: Double) -> Double, description: String, unit: String, fineStep: Double): DoubleSetting {
71-
return setting(DoubleSetting(name, value, range, step, visibility, consumer, description, unit, fineStep))
70+
override fun IPluginClass.setting(name: String, value: Double, range: ClosedFloatingPointRange<Double>, step: Double, visibility: () -> Boolean, consumer: (prev: Double, input: Double) -> Double, description: String, unit: String, fineStep: Double, formatter: (Double) -> String): DoubleSetting {
71+
return setting(DoubleSetting(name, value, range, step, visibility, consumer, description, unit, fineStep, formatter))
7272
}
7373

74-
override fun IPluginClass.setting(name: String, value: Float, range: ClosedFloatingPointRange<Float>, step: Float, visibility: () -> Boolean, consumer: (prev: Float, input: Float) -> Float, description: String, unit: String, fineStep: Float): FloatSetting {
75-
return setting(FloatSetting(name, value, range, step, visibility, consumer, description, unit, fineStep))
74+
override fun IPluginClass.setting(name: String, value: Float, range: ClosedFloatingPointRange<Float>, step: Float, visibility: () -> Boolean, consumer: (prev: Float, input: Float) -> Float, description: String, unit: String, fineStep: Float, formatter: (Float) -> String): FloatSetting {
75+
return setting(FloatSetting(name, value, range, step, visibility, consumer, description, unit, fineStep, formatter))
7676
}
7777

78-
override fun IPluginClass.setting(name: String, value: Int, range: IntRange, step: Int, visibility: () -> Boolean, consumer: (prev: Int, input: Int) -> Int, description: String, unit: String, fineStep: Int): IntegerSetting {
79-
return setting(IntegerSetting(name, value, range, step, visibility, consumer, description, unit, fineStep))
78+
override fun IPluginClass.setting(name: String, value: Int, range: IntRange, step: Int, visibility: () -> Boolean, consumer: (prev: Int, input: Int) -> Int, description: String, unit: String, fineStep: Int, formatter: (Int) -> String): IntegerSetting {
79+
return setting(IntegerSetting(name, value, range, step, visibility, consumer, description, unit, fineStep, formatter))
8080
}
8181

82-
override fun IPluginClass.setting(name: String, value: Bind, visibility: () -> Boolean, description: String): BindSetting {
83-
return setting(BindSetting(name, value, visibility, description))
82+
override fun IPluginClass.setting(name: String, value: Bind, visibility: () -> Boolean, description: String, formatter: (Bind) -> String): BindSetting {
83+
return setting(BindSetting(name, value, visibility, description, formatter))
8484
}
8585
}

src/main/kotlin/com/lambda/client/setting/settings/AbstractSetting.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ abstract class AbstractSetting<T : Any> : Nameable {
1515
abstract val visibility: () -> Boolean
1616
abstract val description: String
1717
abstract val unit: String
18+
abstract val formatter: (T) -> String
1819

1920
val listeners = ArrayList<() -> Unit>()
2021
val valueListeners = ArrayList<(prev: T, input: T) -> Unit>()
@@ -34,7 +35,7 @@ abstract class AbstractSetting<T : Any> : Nameable {
3435
abstract fun write(): JsonElement
3536
abstract fun read(jsonElement: JsonElement?)
3637

37-
override fun toString() = "$value$unit"
38+
override fun toString() = "${formatter(value)}$unit"
3839

3940
override fun equals(other: Any?) = this === other
4041
|| (other is AbstractSetting<*>

src/main/kotlin/com/lambda/client/setting/settings/ImmutableSetting.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ abstract class ImmutableSetting<T : Any>(
1515
override val visibility: () -> Boolean,
1616
val consumer: (prev: T, input: T) -> T,
1717
override val description: String,
18+
override val formatter: (T) -> String,
1819
override val unit: String
1920
) : AbstractSetting<T>() {
2021
override val value: T = valueIn

src/main/kotlin/com/lambda/client/setting/settings/MutableSetting.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ open class MutableSetting<T : Any>(
1818
override val visibility: () -> Boolean,
1919
consumer: (prev: T, input: T) -> T,
2020
override val description: String,
21+
override val formatter: (T) -> String,
2122
override val unit: String
2223
) : AbstractSetting<T>() {
2324

src/main/kotlin/com/lambda/client/setting/settings/SettingRegister.kt

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ interface SettingRegister<T : Any> {
3030
description: String = "",
3131
unit: String = "",
3232
fineStep: Int = step,
33-
) = setting(IntegerSetting(name, value, range, step, visibility, consumer, description, unit, fineStep))
33+
formatter: (Int) -> String = { i -> "$i"},
34+
) = setting(IntegerSetting(name, value, range, step, visibility, consumer, description, unit, fineStep, formatter))
3435

3536
/** Double Setting */
3637
fun T.setting(
@@ -43,7 +44,8 @@ interface SettingRegister<T : Any> {
4344
description: String = "",
4445
unit: String = "",
4546
fineStep: Double = step,
46-
) = setting(DoubleSetting(name, value, range, step, visibility, consumer, description, unit, fineStep))
47+
formatter: (Double) -> String = { d -> "$d"},
48+
) = setting(DoubleSetting(name, value, range, step, visibility, consumer, description, unit, fineStep, formatter))
4749

4850
/** Float Setting */
4951
fun T.setting(
@@ -56,51 +58,58 @@ interface SettingRegister<T : Any> {
5658
description: String = "",
5759
unit: String = "",
5860
fineStep: Float = step,
59-
) = setting(FloatSetting(name, value, range, step, visibility, consumer, description, unit, fineStep))
61+
formatter: (Float) -> String = { f -> "$f"},
62+
) = setting(FloatSetting(name, value, range, step, visibility, consumer, description, unit, fineStep, formatter))
6063

6164
/** Bind Setting */
6265
fun T.setting(
6366
name: String,
6467
value: Bind,
6568
visibility: () -> Boolean = { true },
66-
description: String = ""
67-
) = setting(BindSetting(name, value, visibility, description))
69+
description: String = "",
70+
formatter: (Bind) -> String = { b -> "$b"},
71+
) = setting(BindSetting(name, value, visibility, description, formatter))
6872

6973
/** Color Setting */
7074
fun T.setting(
7175
name: String,
7276
value: ColorHolder,
7377
hasAlpha: Boolean = true,
7478
visibility: () -> Boolean = { true },
75-
description: String = ""
76-
) = setting(ColorSetting(name, value, hasAlpha, visibility, description))
79+
description: String = "",
80+
formatter: (ColorHolder) -> String = { c -> "$c"},
81+
) = setting(ColorSetting(name, value, hasAlpha, visibility, description, formatter))
7782

7883
/** Boolean Setting */
7984
fun T.setting(
8085
name: String,
8186
value: Boolean,
8287
visibility: () -> Boolean = { true },
8388
consumer: (prev: Boolean, input: Boolean) -> Boolean = { _, input -> input },
84-
description: String = ""
85-
) = setting(BooleanSetting(name, value, visibility, consumer, description))
89+
description: String = "",
90+
formatter: (Boolean) -> String = { b -> "$b"},
91+
) = setting(BooleanSetting(name, value, visibility, consumer, description, formatter))
8692

8793
/** Enum Setting */
8894
fun <E : Enum<E>> T.setting(
8995
name: String,
9096
value: E,
9197
visibility: () -> Boolean = { true },
9298
consumer: (prev: E, input: E) -> E = { _, input -> input },
93-
description: String = ""
94-
) = setting(EnumSetting(name, value, visibility, consumer, description))
99+
description: String = "",
100+
unit: String = "",
101+
formatter: (E) -> String = { e -> "$e"},
102+
) = setting(EnumSetting(name, value, visibility, consumer, description, unit, formatter))
95103

96104
/** String Setting */
97105
fun T.setting(
98106
name: String,
99107
value: String,
100108
visibility: () -> Boolean = { true },
101109
consumer: (prev: String, input: String) -> String = { _, input -> input },
102-
description: String = ""
103-
) = setting(StringSetting(name, value, visibility, consumer, description))
110+
description: String = "",
111+
formatter: (String) -> String = { s -> s },
112+
) = setting(StringSetting(name, value, visibility, consumer, description, formatter))
104113
/* End of setting registering */
105114

106115
fun <T : Any> AbstractSetting<T>.atValue(page: T): () -> Boolean = {

src/main/kotlin/com/lambda/client/setting/settings/impl/collection/CollectionSetting.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,16 @@ package com.lambda.client.setting.settings.impl.collection
33
import com.google.gson.JsonElement
44
import com.google.gson.reflect.TypeToken
55
import com.lambda.client.setting.settings.ImmutableSetting
6+
import com.lambda.client.util.color.ColorHolder
67

78
class CollectionSetting<E : Any, T : MutableCollection<E>>(
89
name: String,
910
override val value: T,
1011
visibility: () -> Boolean = { true },
1112
description: String = "",
12-
unit: String = ""
13-
) : ImmutableSetting<T>(name, value, visibility, { _, input -> input }, description, unit), MutableCollection<E> by value {
13+
unit: String = "",
14+
formatter: (T) -> String = { c -> "$c"},
15+
) : ImmutableSetting<T>(name, value, visibility, { _, input -> input }, description, formatter, unit), MutableCollection<E> by value {
1416

1517
override val defaultValue: T = valueClass.newInstance()
1618
private val lockObject = Any()

src/main/kotlin/com/lambda/client/setting/settings/impl/collection/MapSetting.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ class MapSetting<K : Any, V : Any, T : MutableMap<K, V>>(
99
override val value: T,
1010
visibility: () -> Boolean = { true },
1111
description: String = "",
12-
unit: String = ""
13-
) : ImmutableSetting<T>(name, value, visibility, { _, input -> input }, description, unit) {
12+
unit: String = "",
13+
formatter: (T) -> String = {m -> "$m"},
14+
) : ImmutableSetting<T>(name, value, visibility, { _, input -> input }, description, formatter, unit) {
1415
override val defaultValue: T = valueClass.newInstance()
1516
private val type = object : TypeToken<Map<K, V>>() {}.type
1617

src/main/kotlin/com/lambda/client/setting/settings/impl/number/DoubleSetting.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ class DoubleSetting(
1111
consumer: (prev: Double, input: Double) -> Double = { _, input -> input },
1212
description: String = "",
1313
unit: String = "",
14-
fineStep: Double = step
15-
) : NumberSetting<Double>(name, value, range, step, visibility, consumer, description, unit, fineStep) {
14+
fineStep: Double = step,
15+
formatter: (Double) -> String = { d -> "$d"},
16+
) : NumberSetting<Double>(name, value, range, step, visibility, consumer, description, formatter, unit, fineStep) {
1617

1718
init {
1819
consumers.add(0) { _, it ->

src/main/kotlin/com/lambda/client/setting/settings/impl/number/FloatSetting.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ class FloatSetting(
1111
consumer: (prev: Float, input: Float) -> Float = { _, input -> input },
1212
description: String = "",
1313
unit: String = "",
14-
fineStep: Float = step
15-
) : NumberSetting<Float>(name, value, range, step, visibility, consumer, description, unit, fineStep) {
14+
fineStep: Float = step,
15+
formatter: (Float) -> String = { f -> "$f"},
16+
) : NumberSetting<Float>(name, value, range, step, visibility, consumer, description, formatter, unit, fineStep) {
1617

1718
init {
1819
consumers.add(0) { _, it ->

src/main/kotlin/com/lambda/client/setting/settings/impl/number/IntegerSetting.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ class IntegerSetting(
1111
consumer: (prev: Int, input: Int) -> Int = { _, input -> input },
1212
description: String = "",
1313
unit: String = "",
14-
fineStep: Int = step
15-
) : NumberSetting<Int>(name, value, range, step, visibility, consumer, description, unit, fineStep) {
14+
fineStep: Int = step,
15+
formatter: (Int) -> String = { i -> "$i"},
16+
) : NumberSetting<Int>(name, value, range, step, visibility, consumer, description, formatter, unit, fineStep) {
1617

1718
init {
1819
consumers.add(0) { _, it ->

0 commit comments

Comments
 (0)