Replace select with buttons in VictoryScreen.kt charts #9254
Closed as not planned
Description
I find the select difficult to use.
- It needs a lot of clicks.
- The click targets are too small.
Can we just use buttons like on the other side? I tried implementing it but failed to make it work. Here's my WIP.
Index: core/src/com/unciv/ui/screens/victoryscreen/VictoryScreenCharts.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/core/src/com/unciv/ui/screens/victoryscreen/VictoryScreenCharts.kt b/core/src/com/unciv/ui/screens/victoryscreen/VictoryScreenCharts.kt
--- a/core/src/com/unciv/ui/screens/victoryscreen/VictoryScreenCharts.kt (revision cafcbbad4b6c1c17d106121fa2f88d0f915e2f88)
+++ b/core/src/com/unciv/ui/screens/victoryscreen/VictoryScreenCharts.kt (date 1682190305899)
@@ -9,12 +9,11 @@
import com.unciv.ui.components.AutoScrollPane
import com.unciv.ui.components.LineChart
import com.unciv.ui.components.TabbedPager
-import com.unciv.ui.components.extensions.onChange
import com.unciv.ui.components.extensions.onClick
import com.unciv.ui.components.extensions.packIfNeeded
+import com.unciv.ui.images.IconTextButton
import com.unciv.ui.images.ImageGetter
import com.unciv.ui.screens.basescreen.BaseScreen
-import com.unciv.ui.screens.newgamescreen.TranslatedSelectBox
import com.unciv.ui.screens.victoryscreen.VictoryScreenCivGroup.DefeatedPlayerStyle
import com.unciv.ui.screens.worldscreen.WorldScreen
@@ -27,10 +26,10 @@
private var selectedCiv = worldScreen.selectedCiv
private val viewingCiv = worldScreen.viewingCiv
- private val rankingTypeSelect = TranslatedSelectBox(RankingType.values().map { it.label }, rankingType.name, skin)
+ private val scoreTypeTable = Table()
+ private val scoreTypeScroll = AutoScrollPane(scoreTypeTable)
private val civButtonsTable = Table()
private val civButtonsScroll = AutoScrollPane(civButtonsTable)
- private val controlsColumn = Table()
private val markerIcon = ImageGetter.getImage("OtherIcons/Star").apply {
color = Color.GOLD
align = Align.center
@@ -39,28 +38,40 @@
private val chartHolder = Container<LineChart?>(null)
init {
+ scoreTypeScroll.setScrollingDisabled(true, false)
+ scoreTypeTable.defaults().space(40f).fillX()
+
civButtonsScroll.setScrollingDisabled(true, false)
- civButtonsTable.defaults().space(20f).fillX()
- controlsColumn.defaults().space(20f).fillX()
- controlsColumn.add(rankingTypeSelect).right().row()
- controlsColumn.add(civButtonsScroll).fillY()
+ civButtonsTable.defaults().space(40f).fillX()
+
defaults().fill().pad(20f)
- add(controlsColumn)
+ add(scoreTypeScroll)
add(chartHolder).growX().top().padLeft(0f)
-
- rankingTypeSelect.onChange {
- rankingType = RankingType.values()
- .firstOrNull { it.name == rankingTypeSelect.selected.value }
- ?: RankingType.Score
- update()
- }
+ add(civButtonsScroll)
}
private fun update() {
+ updateScoreTypes()
updateControls()
updateChart()
}
+ private fun updateScoreTypes() {
+ scoreTypeTable.clear()
+ for (it in RankingType.values()) {
+ val button = IconTextButton(it.label)
+ button.touchable = Touchable.enabled
+ scoreTypeTable.add(button).row()
+ button.onClick {
+ rankingType = it
+ update()
+ }
+ }
+ scoreTypeTable.add().padBottom(20f).row()
+ scoreTypeTable.pack()
+ scoreTypeScroll.layout()
+ }
+
private fun updateControls() {
civButtonsTable.clear()
val sortedCivs = gameInfo.civilizations.asSequence()
@@ -113,7 +124,6 @@
override fun activated(index: Int, caption: String, pager: TabbedPager) {
pager.setScrollDisabled(true)
- getCell(controlsColumn).height(parent.height)
getCell(chartHolder).height(parent.height)
if (chartHolder.actor == null) update()
civButtonsTable.invalidateHierarchy()