blob: 75554c00787e1b676cf65906bcf9481826bba7d6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
/*
* SPDX-FileCopyrightText: 2023 Linnea Gräf <nea@nea.moe>
*
* SPDX-License-Identifier: GPL-3.0-or-later
*/
package moe.nea.firmament.gui.config
import io.github.cottonmc.cotton.gui.client.BackgroundPainter
import io.github.cottonmc.cotton.gui.client.CottonClientScreen
import io.github.cottonmc.cotton.gui.client.LightweightGuiDescription
import io.github.cottonmc.cotton.gui.widget.WBox
import io.github.cottonmc.cotton.gui.widget.WButton
import io.github.cottonmc.cotton.gui.widget.WLabel
import io.github.cottonmc.cotton.gui.widget.WScrollPanel
import io.github.cottonmc.cotton.gui.widget.data.Axis
import io.github.cottonmc.cotton.gui.widget.data.Insets
import moe.nea.firmament.features.FeatureManager
import moe.nea.firmament.gui.WFixedPanel
import moe.nea.firmament.gui.WSplitPanel
import moe.nea.firmament.repo.RepoManager
import moe.nea.firmament.util.MC
import moe.nea.firmament.util.ScreenUtil.setScreenLater
import net.minecraft.client.gui.screen.Screen
import net.minecraft.text.Text
import kotlin.streams.asSequence
object AllConfigsGui {
val allConfigs
get() = listOf(
RepoManager.Config
) + FeatureManager.allFeatures.mapNotNull { it.config }
fun makeScreen(parent: Screen? = null): CottonClientScreen {
val lwgd = LightweightGuiDescription()
var screen: CottonClientScreen? = null
val configs = allConfigs
val box = WBox(Axis.VERTICAL)
configs.forEach { config ->
val panel = WSplitPanel(
WLabel(Text.translatable("firmament.config.${config.name}")),
WButton(Text.translatable("firmanent.config.edit")).also {
it.setOnClick {
config.showConfigEditor(screen)
}
it.setSize(40, 18)
}
)
panel.insets = Insets.ROOT_PANEL
panel.backgroundPainter = BackgroundPainter.VANILLA
box.add((panel))
}
box.streamChildren().asSequence()
.forEach { it.setSize(380, 0) }
lwgd.setRootPanel(WBox(
Axis.VERTICAL
).also {
it.insets = Insets.ROOT_PANEL
box.layout()
it.add(WFixedPanel((WScrollPanel((box)).also {
it.setSize(400, 300)
})))
it.setSize(400, 300)
})
screen = object : CottonClientScreen(lwgd) {
override fun close() {
MC.screen = parent
}
}
return screen
}
fun showAllGuis() {
setScreenLater(makeScreen())
}
}
|