22
33package 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
59import xyz.xenondevs.invui.ExperimentalReactiveApi
610import xyz.xenondevs.invui.dsl.property.MutableProviderDslProperty
711import xyz.xenondevs.invui.dsl.property.ProviderDslProperty
812import xyz.xenondevs.invui.gui.Gui
913import xyz.xenondevs.invui.gui.IngredientPreset
1014import xyz.xenondevs.invui.gui.TabGui
15+ import xyz.xenondevs.invui.gui.activeTabProvider
1116import xyz.xenondevs.invui.gui.setTab
1217import 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