Skip to content

Commit c0bb61f

Browse files
Add TabGuiDsl activeTab provider
1 parent 07bd6eb commit c0bb61f

File tree

2 files changed

+23
-10
lines changed

2 files changed

+23
-10
lines changed

invui-kotlin/src/main/kotlin/xyz/xenondevs/invui/dsl/IngredientsDsl.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ sealed interface IngredientsDsl {
5252

5353
fun scrollInventoriesGui(vararg structure: String, gui: ScrollGuiDsl<Inventory>.() -> Unit): ScrollGui<Inventory>
5454

55-
fun tabGui(vararg structure: String, gui: TabGuiDsl.() -> Unit): TabGui
55+
fun <G : Gui> tabGui(vararg structure: String, gui: TabGuiDsl<G>.() -> Unit): TabGui
5656

5757
}
5858

@@ -119,7 +119,7 @@ internal open class IngredientsDslImpl(
119119
override fun scrollInventoriesGui(vararg structure: String, gui: ScrollGuiDsl<Inventory>.() -> Unit): ScrollGui<Inventory> =
120120
ScrollGuiDslImpl.Inventories(structure, presets + ingredients.build()).apply(gui).build()
121121

122-
override fun tabGui(vararg structure: String, gui: TabGuiDsl.() -> Unit): TabGui =
123-
TabGuiDslImpl(structure, presets + ingredients.build()).apply(gui).build()
122+
override fun <G : Gui> tabGui(vararg structure: String, gui: TabGuiDsl<G>.() -> Unit): TabGui =
123+
TabGuiDslImpl<G>(structure, presets + ingredients.build()).apply(gui).build()
124124

125125
}

invui-kotlin/src/main/kotlin/xyz/xenondevs/invui/dsl/TabGuiDsl.kt

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,42 +2,55 @@
22

33
package xyz.xenondevs.invui.dsl
44

5+
import xyz.xenondevs.commons.provider.Provider
6+
import xyz.xenondevs.commons.provider.flatten
7+
import xyz.xenondevs.commons.provider.mutableProvider
8+
import xyz.xenondevs.commons.provider.provider
59
import xyz.xenondevs.invui.ExperimentalReactiveApi
610
import xyz.xenondevs.invui.dsl.property.MutableProviderDslProperty
711
import xyz.xenondevs.invui.dsl.property.ProviderDslProperty
812
import xyz.xenondevs.invui.gui.Gui
913
import xyz.xenondevs.invui.gui.IngredientPreset
1014
import xyz.xenondevs.invui.gui.TabGui
15+
import xyz.xenondevs.invui.gui.activeTabProvider
1116
import xyz.xenondevs.invui.gui.setTab
1217
import xyz.xenondevs.invui.gui.setTabs
1318

1419
@ExperimentalDslApi
15-
fun tabGui(vararg structure: String, gui: TabGuiDsl.() -> Unit): TabGui =
16-
TabGuiDslImpl(structure).apply(gui).build()
20+
fun <G : Gui> tabGui(vararg structure: String, gui: TabGuiDsl<G>.() -> Unit): TabGui =
21+
TabGuiDslImpl<G>(structure).apply(gui).build()
1722

1823
@ExperimentalDslApi
19-
sealed interface TabGuiDsl : GuiDsl {
24+
sealed interface TabGuiDsl<G : Gui> : GuiDsl {
2025

21-
val tabs: ProviderDslProperty<List<Gui?>>
26+
val tabs: ProviderDslProperty<List<G?>>
2227
val tab: MutableProviderDslProperty<Int>
28+
val activeTab: Provider<G?>
2329

2430
}
2531

2632
@ExperimentalDslApi
27-
internal class TabGuiDslImpl(
33+
internal class TabGuiDslImpl<G: Gui>(
2834
structure: Array<out String>,
2935
presets: List<IngredientPreset> = emptyList()
30-
) : GuiDslImpl<TabGui, TabGui.Builder>(structure, presets), TabGuiDsl {
36+
) : GuiDslImpl<TabGui, TabGui.Builder>(structure, presets), TabGuiDsl<G> {
3137

32-
override val tabs = ProviderDslProperty(emptyList<Gui?>())
38+
private val internalActiveTab = mutableProvider { provider<G?>(null) }
39+
40+
override val tabs = ProviderDslProperty(emptyList<G?>())
3341
override val tab = MutableProviderDslProperty(-1)
42+
override val activeTab = internalActiveTab.flatten()
3443

3544
override fun createBuilder() = TabGui.builder()
3645

3746
override fun applyToBuilder(builder: TabGui.Builder) {
3847
super.applyToBuilder(builder)
3948
builder.setTabs(tabs)
4049
builder.setTab(tab)
50+
builder.addModifier { gui ->
51+
@Suppress("UNCHECKED_CAST")
52+
internalActiveTab.set(gui.activeTabProvider as Provider<G?>)
53+
}
4154
}
4255

4356
}

0 commit comments

Comments
 (0)