Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@ class Entry<T, B : TypeBuilder> internal constructor(
override operator fun provideDelegate(entries: EntriesBuilder, prop: KProperty<*>): EntryDelegate<T> {
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<T>(this.value, this.value)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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() {

Expand Down Expand Up @@ -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<String, ResourcefulConfig>())
for ((id, builder) in this.categories) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<String>()
internal val elements = mutableListOf<ResourcefulConfigElement>()
open val baseTranslation: String = ""
get() = field.removeSuffix(".")

fun element(element: ResourcefulConfigElement) {
if (element is ResourcefulConfigEntryElement) {
Expand Down Expand Up @@ -96,6 +95,29 @@ open class EntriesBuilder {
fun <T : Enum<T>> draggable(vararg value: T, builder: DraggableBuilder<T>.() -> Unit = {}) = Entry(null, EntryType.ENUM, { DraggableBuilder(it, getEmptyArray<T>(value.javaClass)) }, builder, value)
fun <T : Enum<T>> draggable(id: String, vararg value: T, builder: DraggableBuilder<T>.() -> Unit = {}) = Entry(id, EntryType.ENUM, { DraggableBuilder(it, getEmptyArray<T>(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 <T> observable(entry: Entry<T, *>, onChange: (T, T) -> Unit) = ObservableEntry(entry, onChange)
fun <T> observable(entry: ConfigDelegateProvider<RConfigKtEntry<T>>, onChange: (T, T) -> Unit) = ObservableEntry(entry, onChange)
fun <T, R> transform(entry: Entry<T, *>, from: (R) -> T, to: (T) -> R) = TransformedEntry(entry, from, to)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down