From 3b97921fc44298c28b55c3e3eb8039ab514d1902 Mon Sep 17 00:00:00 2001 From: Empa Date: Sun, 12 Oct 2025 15:54:33 +0200 Subject: [PATCH] feat: add base translation to EntriesBuilder, and move separator and button functions to EntriesBuilder --- .../resourcefulconfigkt/api/Entries.kt | 2 ++ .../api/builders/CategoryBuilder.kt | 26 -------------- .../api/builders/EntriesBuilder.kt | 34 +++++++++++++++---- .../api/builders/ObjectBuilder.kt | 13 ------- 4 files changed, 30 insertions(+), 45 deletions(-) diff --git a/common/src/main/kotlin/com/teamresourceful/resourcefulconfigkt/api/Entries.kt b/common/src/main/kotlin/com/teamresourceful/resourcefulconfigkt/api/Entries.kt index 74a70a8..4dc6030 100644 --- a/common/src/main/kotlin/com/teamresourceful/resourcefulconfigkt/api/Entries.kt +++ b/common/src/main/kotlin/com/teamresourceful/resourcefulconfigkt/api/Entries.kt @@ -92,6 +92,8 @@ class Entry internal constructor( override operator fun provideDelegate(entries: EntriesBuilder, prop: KProperty<*>): EntryDelegate { val id = id ?: prop.name val entryBuilder = builderFactory(id).apply(builderFiller) + entryBuilder.name = entries.transformTranslation(entryBuilder.name) + entryBuilder.description = entries.transformTranslation(entryBuilder.description) val data = entryBuilder.toEntryData() val property = EntryDelegateImpl(this.value, this.value) diff --git a/common/src/main/kotlin/com/teamresourceful/resourcefulconfigkt/api/builders/CategoryBuilder.kt b/common/src/main/kotlin/com/teamresourceful/resourcefulconfigkt/api/builders/CategoryBuilder.kt index c686ef1..4cf03c8 100644 --- a/common/src/main/kotlin/com/teamresourceful/resourcefulconfigkt/api/builders/CategoryBuilder.kt +++ b/common/src/main/kotlin/com/teamresourceful/resourcefulconfigkt/api/builders/CategoryBuilder.kt @@ -9,10 +9,8 @@ import com.teamresourceful.resourcefulconfig.common.loader.ParsedCategory import com.teamresourceful.resourcefulconfigkt.api.CategoryKt import com.teamresourceful.resourcefulconfigkt.api.ObjectKt import com.teamresourceful.resourcefulconfigkt.api.ObjectProperty -import com.teamresourceful.resourcefulconfigkt.impl.ButtonElementKt import com.teamresourceful.resourcefulconfigkt.impl.ConfigKtInfo import com.teamresourceful.resourcefulconfigkt.impl.ObjectEntryElementKt -import com.teamresourceful.resourcefulconfigkt.impl.SeparatorElementKt open class CategoryBuilder internal constructor(internal val id: String) : EntriesBuilder() { @@ -48,30 +46,6 @@ open class CategoryBuilder internal constructor(internal val id: String) : Entri return category } - fun button(builder: ButtonBuilder.() -> Unit) { - val button = ButtonBuilder().apply(builder) - elements.add( - ButtonElementKt( - button.title, - button.description, - button.callback::invoke, - button.condition, - button.text, - ) - ) - } - - fun separator(builder: SeparatorBuilder.() -> Unit) { - val separator = SeparatorBuilder().apply(builder) - elements.add( - SeparatorElementKt( - TranslatableValue("", separator.title), - TranslatableValue("", separator.description), - separator.condition, - ) - ) - } - internal open fun build(parent: ResourcefulConfig?): ResourcefulConfig { val category = ParsedCategory(this.id, parent!!, ConfigKtInfo(this), this.elements, LinkedHashMap()) for ((id, builder) in this.categories) { diff --git a/common/src/main/kotlin/com/teamresourceful/resourcefulconfigkt/api/builders/EntriesBuilder.kt b/common/src/main/kotlin/com/teamresourceful/resourcefulconfigkt/api/builders/EntriesBuilder.kt index bcd9060..ff079c9 100644 --- a/common/src/main/kotlin/com/teamresourceful/resourcefulconfigkt/api/builders/EntriesBuilder.kt +++ b/common/src/main/kotlin/com/teamresourceful/resourcefulconfigkt/api/builders/EntriesBuilder.kt @@ -4,17 +4,16 @@ import com.teamresourceful.resourcefulconfig.api.types.ResourcefulConfigElement import com.teamresourceful.resourcefulconfig.api.types.elements.ResourcefulConfigEntryElement import com.teamresourceful.resourcefulconfig.api.types.options.EntryType import com.teamresourceful.resourcefulconfig.api.types.options.TranslatableValue -import com.teamresourceful.resourcefulconfigkt.api.CachedTransformedEntry -import com.teamresourceful.resourcefulconfigkt.api.ConfigDelegateProvider -import com.teamresourceful.resourcefulconfigkt.api.Entry -import com.teamresourceful.resourcefulconfigkt.api.RConfigKtEntry -import com.teamresourceful.resourcefulconfigkt.api.ObservableEntry -import com.teamresourceful.resourcefulconfigkt.api.TransformedEntry +import com.teamresourceful.resourcefulconfigkt.api.* +import com.teamresourceful.resourcefulconfigkt.impl.ButtonElementKt +import com.teamresourceful.resourcefulconfigkt.impl.SeparatorElementKt open class EntriesBuilder { internal val reserved = mutableListOf() internal val elements = mutableListOf() + open val baseTranslation: String = "" + get() = field.removeSuffix(".") fun element(element: ResourcefulConfigElement) { if (element is ResourcefulConfigEntryElement) { @@ -96,6 +95,29 @@ open class EntriesBuilder { fun > draggable(vararg value: T, builder: DraggableBuilder.() -> Unit = {}) = Entry(null, EntryType.ENUM, { DraggableBuilder(it, getEmptyArray(value.javaClass)) }, builder, value) fun > draggable(id: String, vararg value: T, builder: DraggableBuilder.() -> Unit = {}) = Entry(id, EntryType.ENUM, { DraggableBuilder(it, getEmptyArray(value.javaClass)) }, builder, value) + fun button(builder: ButtonBuilder.() -> Unit) { + val button = ButtonBuilder().apply(builder) + button.title = transformTranslation(button.title) + button.description = transformTranslation(button.description) + element(ButtonElementKt(button.title, button.description, button.callback::invoke, button.condition, button.text)) + } + + fun separator(builder: SeparatorBuilder.() -> Unit) { + val separator = SeparatorBuilder().apply(builder) + separator.title = transformTranslation(separator.title) + separator.description = transformTranslation(separator.description) + element(SeparatorElementKt(Translated(separator.title), Translated(separator.description), separator.condition)) + } + + internal fun transformTranslation(translation: String): String { + if (baseTranslation.isEmpty() || translation.isEmpty()) return translation + return "$baseTranslation.$translation" + } + internal fun transformTranslation(translation: TranslatableValue): TranslatableValue { + if (baseTranslation.isEmpty() || translation.translation.isEmpty()) return translation + return TranslatableValue(translation.value, "$baseTranslation.${translation.translation}") + } + fun observable(entry: Entry, onChange: (T, T) -> Unit) = ObservableEntry(entry, onChange) fun observable(entry: ConfigDelegateProvider>, onChange: (T, T) -> Unit) = ObservableEntry(entry, onChange) fun transform(entry: Entry, from: (R) -> T, to: (T) -> R) = TransformedEntry(entry, from, to) diff --git a/common/src/main/kotlin/com/teamresourceful/resourcefulconfigkt/api/builders/ObjectBuilder.kt b/common/src/main/kotlin/com/teamresourceful/resourcefulconfigkt/api/builders/ObjectBuilder.kt index 789537a..e9ff962 100644 --- a/common/src/main/kotlin/com/teamresourceful/resourcefulconfigkt/api/builders/ObjectBuilder.kt +++ b/common/src/main/kotlin/com/teamresourceful/resourcefulconfigkt/api/builders/ObjectBuilder.kt @@ -2,23 +2,10 @@ package com.teamresourceful.resourcefulconfigkt.api.builders import com.teamresourceful.resourcefulconfig.api.types.entries.ResourcefulConfigObjectEntry import com.teamresourceful.resourcefulconfig.api.types.options.EntryData -import com.teamresourceful.resourcefulconfig.api.types.options.TranslatableValue import com.teamresourceful.resourcefulconfigkt.KotlinObjectEntry -import com.teamresourceful.resourcefulconfigkt.impl.ButtonElementKt -import com.teamresourceful.resourcefulconfigkt.impl.SeparatorElementKt open class ObjectBuilder internal constructor() : EntriesBuilder() { - fun button(builder: ButtonBuilder.() -> Unit) { - val button = ButtonBuilder().apply(builder) - elements.add(ButtonElementKt(button.title, button.description, button.callback::invoke, button.condition, button.text)) - } - - fun separator(builder: SeparatorBuilder.() -> Unit) { - val separator = SeparatorBuilder().apply(builder) - elements.add(SeparatorElementKt(TranslatableValue("", separator.title), TranslatableValue("", separator.description), separator.condition)) - } - internal fun build(options: EntryData): ResourcefulConfigObjectEntry { return KotlinObjectEntry(this, options, this.elements) }