From 7a57a6d28c9b12ae17b0ad00513d1f09338754af Mon Sep 17 00:00:00 2001 From: yairm210 Date: Sat, 13 Jul 2024 23:40:40 +0300 Subject: [PATCH] Move from translated select box to regular one for unique builder --- .../unciv/models/ruleset/unique/UniqueType.kt | 2 ++ .../extensions/Scene2dExtensions.kt | 8 +++++ .../components/widgets/TranslatedSelectBox.kt | 8 ++--- .../unciv/ui/screens/UniqueBuilderScreen.kt | 33 +++++++++---------- 4 files changed, 29 insertions(+), 22 deletions(-) diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index 3ad5828e0f..81e798d41f 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -1386,6 +1386,8 @@ enum class UniqueType( fun canAcceptUniqueTarget(uniqueTarget: UniqueTarget) = targetTypes.any { uniqueTarget.canAcceptUniqueTarget(it) } + override fun toString() = text + companion object { val uniqueTypeMap: Map = entries.associateBy { it.placeholderText } } diff --git a/core/src/com/unciv/ui/components/extensions/Scene2dExtensions.kt b/core/src/com/unciv/ui/components/extensions/Scene2dExtensions.kt index 0e400335a9..30b5002783 100644 --- a/core/src/com/unciv/ui/components/extensions/Scene2dExtensions.kt +++ b/core/src/com/unciv/ui/components/extensions/Scene2dExtensions.kt @@ -20,11 +20,13 @@ import com.badlogic.gdx.scenes.scene2d.ui.Image import com.badlogic.gdx.scenes.scene2d.ui.ImageButton import com.badlogic.gdx.scenes.scene2d.ui.Label import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane +import com.badlogic.gdx.scenes.scene2d.ui.SelectBox import com.badlogic.gdx.scenes.scene2d.ui.Table import com.badlogic.gdx.scenes.scene2d.ui.TextButton import com.badlogic.gdx.scenes.scene2d.ui.TextButton.TextButtonStyle import com.badlogic.gdx.scenes.scene2d.ui.WidgetGroup import com.badlogic.gdx.utils.Align +import com.badlogic.gdx.utils.Array import com.unciv.Constants import com.unciv.models.translations.tr import com.unciv.ui.components.extensions.GdxKeyCodeFixes.DEL @@ -234,6 +236,12 @@ fun Cell.pad(vertical: Float, horizontal: Float): Cell { return pad(vertical, horizontal, vertical, horizontal) } +fun SelectBox.setItems(newItems: Collection){ + val array = Array() + newItems.forEach { array.add(it) } + items = array +} + /** Sets both the width and height to [size] */ fun Image.setSize(size: Float) { setSize(size, size) diff --git a/core/src/com/unciv/ui/components/widgets/TranslatedSelectBox.kt b/core/src/com/unciv/ui/components/widgets/TranslatedSelectBox.kt index 4977fca368..5969079d2c 100644 --- a/core/src/com/unciv/ui/components/widgets/TranslatedSelectBox.kt +++ b/core/src/com/unciv/ui/components/widgets/TranslatedSelectBox.kt @@ -1,8 +1,8 @@ package com.unciv.ui.components.widgets import com.badlogic.gdx.scenes.scene2d.ui.SelectBox -import com.badlogic.gdx.utils.Array import com.unciv.models.translations.tr +import com.unciv.ui.components.extensions.setItems import com.unciv.ui.screens.basescreen.BaseScreen class TranslatedSelectBox(values: Collection, default: String) : SelectBox(BaseScreen.skin) { @@ -15,10 +15,8 @@ class TranslatedSelectBox(values: Collection, default: String) : SelectB } init { - val array = Array() - values.forEach { array.add(TranslatedString(it)) } - items = array - selected = array.firstOrNull { it.value == default } ?: array.first() + setItems(values.map { TranslatedString(it) }) + selected = items.firstOrNull { it.value == default } ?: items.first() } fun setSelected(newValue: String) { diff --git a/core/src/com/unciv/ui/screens/UniqueBuilderScreen.kt b/core/src/com/unciv/ui/screens/UniqueBuilderScreen.kt index a27e5cba69..408c2d1cc2 100644 --- a/core/src/com/unciv/ui/screens/UniqueBuilderScreen.kt +++ b/core/src/com/unciv/ui/screens/UniqueBuilderScreen.kt @@ -3,6 +3,7 @@ package com.unciv.ui.screens import com.badlogic.gdx.Gdx import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.scenes.scene2d.Stage +import com.badlogic.gdx.scenes.scene2d.ui.SelectBox import com.badlogic.gdx.scenes.scene2d.ui.Table import com.badlogic.gdx.scenes.scene2d.ui.TextField import com.unciv.models.ruleset.Ruleset @@ -12,14 +13,11 @@ import com.unciv.models.ruleset.unique.UniqueType import com.unciv.models.ruleset.validation.UniqueValidator import com.unciv.models.translations.fillPlaceholders import com.unciv.models.translations.getPlaceholderParameters -import com.unciv.ui.components.extensions.enable -import com.unciv.ui.components.extensions.toLabel -import com.unciv.ui.components.extensions.toTextButton +import com.unciv.ui.components.extensions.* import com.unciv.ui.components.input.onChange import com.unciv.ui.components.input.onClick import com.unciv.ui.components.widgets.LanguageTable import com.unciv.ui.components.widgets.LanguageTable.Companion.addLanguageTables -import com.unciv.ui.components.widgets.TranslatedSelectBox import com.unciv.ui.images.ImageGetter import com.unciv.ui.popups.options.OptionsPopup import com.unciv.ui.screens.basescreen.BaseScreen @@ -74,23 +72,23 @@ class UniqueTable(isMainUnique: Boolean, val ruleset: Ruleset, stage: Stage, private val uniqueErrorTable = Table().apply { defaults().pad(5f) } val uniqueTextField = TextField("Unique", BaseScreen.skin) - private var uniqueTargetsSelectBox: TranslatedSelectBox + private var uniqueTargetsSelectBox: SelectBox init { this.stage = stage // required for width // Main unique should be non-modifier val uniqueTargets = if (isMainUnique) UniqueTarget.entries .filter { it.modifierType == UniqueTarget.ModifierType.None } - .map { it.name } // Additional ones should be modifiers else UniqueTarget.entries .filter { it.modifierType != UniqueTarget.ModifierType.None } - .map { it.name } defaults().pad(10f) background = ImageGetter.getWhiteDotDrawable().tint(Color.BLACK.cpy().apply { a=0.3f }) val uniqueTargetSelectBoxTable = Table().apply { defaults().pad(5f) } - uniqueTargetsSelectBox = TranslatedSelectBox(uniqueTargets, UniqueTarget.Global.name) + uniqueTargetsSelectBox = SelectBox(BaseScreen.skin) + uniqueTargetsSelectBox.setItems(uniqueTargets) + uniqueTargetsSelectBox.selected = UniqueTarget.Global uniqueTargetSelectBoxTable.add(uniqueTargetsSelectBox) uniqueTargetSelectBoxTable.add(uniqueSelectBoxTable).row() @@ -116,28 +114,28 @@ class UniqueTable(isMainUnique: Boolean, val ruleset: Ruleset, stage: Stage, } private fun onUniqueTargetChange( - uniqueTargetsSelectBox: TranslatedSelectBox, + uniqueTargetsSelectBox: SelectBox, ruleset: Ruleset, ) { - val selected = UniqueTarget.entries.first { it.name == uniqueTargetsSelectBox.selected.value } + val selected = uniqueTargetsSelectBox.selected val uniquesForTarget = UniqueType.entries.filter { it.canAcceptUniqueTarget(selected) } - val uniqueSelectBox = TranslatedSelectBox(uniquesForTarget.filter { it.getDeprecationAnnotation() == null } - .map { it.name }, uniquesForTarget.first().name) + val uniqueSelectBox = SelectBox(BaseScreen.skin) + uniqueSelectBox.setItems(uniquesForTarget.filter { it.getDeprecationAnnotation() == null }) uniqueSelectBox.onChange { onUniqueSelected(uniqueSelectBox, uniqueTextField, ruleset, parameterSelectBoxTable) } onUniqueSelected(uniqueSelectBox, uniqueTextField, ruleset, parameterSelectBoxTable) uniqueSelectBoxTable.clear() - uniqueSelectBoxTable.add(uniqueSelectBox) + uniqueSelectBoxTable.add(uniqueSelectBox).width(stage.width * 0.5f) } private fun onUniqueSelected( - uniqueSelectBox: TranslatedSelectBox, + uniqueSelectBox: SelectBox, uniqueTextField: TextField, ruleset: Ruleset, parameterSelectBoxTable: Table ) { - val uniqueType = UniqueType.entries.first { it.name == uniqueSelectBox.selected.value } + val uniqueType = uniqueSelectBox.selected uniqueTextField.text = uniqueType.text updateUnique(ruleset, uniqueTextField) @@ -150,10 +148,11 @@ class UniqueTable(isMainUnique: Boolean, val ruleset: Ruleset, stage: Stage, .flatMap { it.getKnownValuesForAutocomplete(ruleset) }.toSet() if (knownParamValues.isNotEmpty()) { - val paramSelectBox = TranslatedSelectBox(knownParamValues.toList(), knownParamValues.first()) + val paramSelectBox = SelectBox(BaseScreen.skin) + paramSelectBox.setItems(knownParamValues) paramSelectBox.onChange { val currentParams = uniqueTextField.text.getPlaceholderParameters().toMutableList() - currentParams[index] = paramSelectBox.selected.value + currentParams[index] = paramSelectBox.selected val newText = uniqueType.text.fillPlaceholders(*currentParams.toTypedArray()) uniqueTextField.text = newText updateUnique(ruleset, uniqueTextField)