mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-28 06:16:37 -04:00
Options screen cleanup (#3934)
* Options popup linting and minor visual improvements * Options popup - mod checker - missing test?
This commit is contained in:
parent
7b0ea32c47
commit
fc7859e4e7
@ -328,7 +328,7 @@ class Ruleset {
|
|||||||
|
|
||||||
val allOtherPrereqs = tech.prerequisites.asSequence().filterNot { it == prereq }.flatMap { getPrereqTree(it) }
|
val allOtherPrereqs = tech.prerequisites.asSequence().filterNot { it == prereq }.flatMap { getPrereqTree(it) }
|
||||||
if (allOtherPrereqs.contains(prereq))
|
if (allOtherPrereqs.contains(prereq))
|
||||||
println("No need to add $prereq as a prerequisite of ${tech.name} - it is already implicit from the other prerequisites!")
|
lines += "No need to add $prereq as a prerequisite of ${tech.name} - it is already implicit from the other prerequisites!"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return lines.joinToString("\n")
|
return lines.joinToString("\n")
|
||||||
@ -409,4 +409,4 @@ class Specialist: NamedStats() {
|
|||||||
else -> TODO()
|
else -> TODO()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,15 +29,16 @@ class Language(val language:String, val percentComplete:Int){
|
|||||||
class OptionsPopup(val previousScreen:CameraStageBaseScreen) : Popup(previousScreen) {
|
class OptionsPopup(val previousScreen:CameraStageBaseScreen) : Popup(previousScreen) {
|
||||||
private var selectedLanguage: String = "English"
|
private var selectedLanguage: String = "English"
|
||||||
private val settings = previousScreen.game.settings
|
private val settings = previousScreen.game.settings
|
||||||
private val innerTable2 = Table(CameraStageBaseScreen.skin)
|
private val optionsTable = Table(CameraStageBaseScreen.skin)
|
||||||
private val resolutionArray = GdxArray(arrayOf("750x500", "900x600", "1050x700", "1200x800", "1500x1000"))
|
private val resolutionArray = GdxArray(arrayOf("750x500", "900x600", "1050x700", "1200x800", "1500x1000"))
|
||||||
|
|
||||||
init {
|
init {
|
||||||
settings.addCompletedTutorialTask("Open the options table")
|
settings.addCompletedTutorialTask("Open the options table")
|
||||||
|
|
||||||
rebuildInnerTable()
|
optionsTable.defaults().pad(2.5f)
|
||||||
|
rebuildOptionsTable()
|
||||||
|
|
||||||
val scrollPane = ScrollPane(innerTable2, skin)
|
val scrollPane = ScrollPane(optionsTable, skin)
|
||||||
scrollPane.setOverscroll(false, false)
|
scrollPane.setOverscroll(false, false)
|
||||||
scrollPane.fadeScrollBars = false
|
scrollPane.fadeScrollBars = false
|
||||||
scrollPane.setScrollingDisabled(true, false)
|
scrollPane.setScrollingDisabled(true, false)
|
||||||
@ -53,18 +54,18 @@ class OptionsPopup(val previousScreen:CameraStageBaseScreen) : Popup(previousScr
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun addHeader(text: String) {
|
private fun addHeader(text: String) {
|
||||||
innerTable2.add(text.toLabel(fontSize = 24)).colspan(2).padTop(if (innerTable2.cells.isEmpty) 0f else 20f).row()
|
optionsTable.add(text.toLabel(fontSize = 24)).colspan(2).padTop(if (optionsTable.cells.isEmpty) 0f else 20f).row()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addYesNoRow(text: String, initialValue: Boolean, updateWorld: Boolean = false, action: ((Boolean) -> Unit)) {
|
private fun addYesNoRow(text: String, initialValue: Boolean, updateWorld: Boolean = false, action: ((Boolean) -> Unit)) {
|
||||||
innerTable2.add(text.toLabel())
|
optionsTable.add(text.toLabel())
|
||||||
val button = YesNoButton(initialValue, CameraStageBaseScreen.skin) {
|
val button = YesNoButton(initialValue, CameraStageBaseScreen.skin) {
|
||||||
action(it)
|
action(it)
|
||||||
settings.save()
|
settings.save()
|
||||||
if (updateWorld && previousScreen is WorldScreen)
|
if (updateWorld && previousScreen is WorldScreen)
|
||||||
previousScreen.shouldUpdate = true
|
previousScreen.shouldUpdate = true
|
||||||
}
|
}
|
||||||
innerTable2.add(button).row()
|
optionsTable.add(button).row()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun reloadWorldAndOptions() {
|
private fun reloadWorldAndOptions() {
|
||||||
@ -78,9 +79,9 @@ class OptionsPopup(val previousScreen:CameraStageBaseScreen) : Popup(previousScr
|
|||||||
OptionsPopup(previousScreen.game.screen as CameraStageBaseScreen).open()
|
OptionsPopup(previousScreen.game.screen as CameraStageBaseScreen).open()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun rebuildInnerTable() {
|
private fun rebuildOptionsTable() {
|
||||||
settings.save()
|
settings.save()
|
||||||
innerTable2.clear()
|
optionsTable.clear()
|
||||||
|
|
||||||
addHeader("Display options")
|
addHeader("Display options")
|
||||||
|
|
||||||
@ -88,7 +89,6 @@ class OptionsPopup(val previousScreen:CameraStageBaseScreen) : Popup(previousScr
|
|||||||
addYesNoRow("Show resources and improvements", settings.showResourcesAndImprovements, true) { settings.showResourcesAndImprovements = it }
|
addYesNoRow("Show resources and improvements", settings.showResourcesAndImprovements, true) { settings.showResourcesAndImprovements = it }
|
||||||
addYesNoRow("Show tile yields", settings.showTileYields, true) { settings.showTileYields = it } // JN
|
addYesNoRow("Show tile yields", settings.showTileYields, true) { settings.showTileYields = it } // JN
|
||||||
addYesNoRow("Show tutorials", settings.showTutorials, true) { settings.showTutorials = it }
|
addYesNoRow("Show tutorials", settings.showTutorials, true) { settings.showTutorials = it }
|
||||||
//addYesNoRow("Show minimap", settings.showMinimap, true) { settings.showMinimap = it }
|
|
||||||
addMinimapSizeSlider()
|
addMinimapSizeSlider()
|
||||||
|
|
||||||
addYesNoRow("Show pixel units", settings.showPixelUnits, true) { settings.showPixelUnits = it }
|
addYesNoRow("Show pixel units", settings.showPixelUnits, true) { settings.showPixelUnits = it }
|
||||||
@ -106,7 +106,7 @@ class OptionsPopup(val previousScreen:CameraStageBaseScreen) : Popup(previousScr
|
|||||||
}
|
}
|
||||||
|
|
||||||
val continuousRenderingDescription = "When disabled, saves battery life but certain animations will be suspended"
|
val continuousRenderingDescription = "When disabled, saves battery life but certain animations will be suspended"
|
||||||
innerTable2.add(continuousRenderingDescription.toLabel(fontSize = 14)).colspan(2).padTop(20f).row()
|
optionsTable.add(continuousRenderingDescription.toLabel(fontSize = 14)).colspan(2).padTop(20f).row()
|
||||||
|
|
||||||
addHeader("Gameplay options")
|
addHeader("Gameplay options")
|
||||||
|
|
||||||
@ -141,15 +141,22 @@ class OptionsPopup(val previousScreen:CameraStageBaseScreen) : Popup(previousScr
|
|||||||
addSoundEffectsVolumeSlider()
|
addSoundEffectsVolumeSlider()
|
||||||
addMusicVolumeSlider()
|
addMusicVolumeSlider()
|
||||||
addTranslationGeneration()
|
addTranslationGeneration()
|
||||||
addModPopup()
|
addModCheckerPopup()
|
||||||
addSetUserId()
|
addSetUserId()
|
||||||
|
|
||||||
innerTable2.add("Version".toLabel()).pad(10f)
|
optionsTable.add("Version".toLabel()).pad(10f)
|
||||||
innerTable2.add(previousScreen.game.version.toLabel()).pad(10f).row()
|
val versionLabel = previousScreen.game.version.toLabel()
|
||||||
|
if (previousScreen.game.version[0] in '0'..'9')
|
||||||
|
versionLabel.onClick {
|
||||||
|
val url = "https://github.com/yairm210/Unciv/blob/master/changelog.md#" +
|
||||||
|
previousScreen.game.version.replace(".","")
|
||||||
|
Gdx.net.openURI(url)
|
||||||
|
}
|
||||||
|
optionsTable.add(versionLabel).pad(10f).row()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addMinimapSizeSlider() {
|
private fun addMinimapSizeSlider() {
|
||||||
innerTable2.add("Show minimap".tr())
|
optionsTable.add("Show minimap".tr())
|
||||||
|
|
||||||
val minimapSliderLimit = resolutionArray.indexOf(settings.resolution) + 1
|
val minimapSliderLimit = resolutionArray.indexOf(settings.resolution) + 1
|
||||||
val minimapSlider = Slider(0f, minimapSliderLimit.toFloat(), 1f, false, skin)
|
val minimapSlider = Slider(0f, minimapSliderLimit.toFloat(), 1f, false, skin)
|
||||||
@ -167,7 +174,7 @@ class OptionsPopup(val previousScreen:CameraStageBaseScreen) : Popup(previousScr
|
|||||||
if (previousScreen is WorldScreen)
|
if (previousScreen is WorldScreen)
|
||||||
previousScreen.shouldUpdate = true
|
previousScreen.shouldUpdate = true
|
||||||
}
|
}
|
||||||
innerTable2.add(minimapSlider).pad(10f).row()
|
optionsTable.add(minimapSlider).pad(10f).row()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addSetUserId() {
|
private fun addSetUserId() {
|
||||||
@ -189,8 +196,8 @@ class OptionsPopup(val previousScreen:CameraStageBaseScreen) : Popup(previousScr
|
|||||||
idSetLabel.setFontColor(Color.RED).setText("Invalid ID!".tr())
|
idSetLabel.setFontColor(Color.RED).setText("Invalid ID!".tr())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
innerTable2.add(takeUserIdFromClipboardButton).pad(5f).colspan(2).row()
|
optionsTable.add(takeUserIdFromClipboardButton).pad(5f).colspan(2).row()
|
||||||
innerTable2.add(idSetLabel).colspan(2).row()
|
optionsTable.add(idSetLabel).colspan(2).row()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addNotificationOptions() {
|
private fun addNotificationOptions() {
|
||||||
@ -220,30 +227,38 @@ class OptionsPopup(val previousScreen:CameraStageBaseScreen) : Popup(previousScr
|
|||||||
generateTranslationsButton.setText("Translation files are generated successfully.".tr())
|
generateTranslationsButton.setText("Translation files are generated successfully.".tr())
|
||||||
generateTranslationsButton.disable()
|
generateTranslationsButton.disable()
|
||||||
}
|
}
|
||||||
innerTable2.add(generateTranslationsButton).colspan(2).row()
|
optionsTable.add(generateTranslationsButton).colspan(2).row()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addModPopup() {
|
private fun addModCheckerPopup() {
|
||||||
val generateTranslationsButton = "Locate mod errors".toTextButton()
|
//if (RulesetCache.isEmpty()) return
|
||||||
generateTranslationsButton.onClick {
|
val modCheckerButton = "Locate mod errors".toTextButton()
|
||||||
var text = ""
|
modCheckerButton.onClick {
|
||||||
|
val lines = ArrayList<String>()
|
||||||
for (mod in RulesetCache.values) {
|
for (mod in RulesetCache.values) {
|
||||||
val modLinks = mod.checkModLinks()
|
val modLinks = mod.checkModLinks()
|
||||||
if (modLinks != "")
|
if (modLinks != "") {
|
||||||
text += "\n\n" + mod.name + "\n\n" + modLinks
|
lines += ""
|
||||||
|
lines += mod.name
|
||||||
|
lines += ""
|
||||||
|
lines += modLinks
|
||||||
|
lines += ""
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if (lines.isEmpty()) lines += "{No problems found}."
|
||||||
val popup = Popup(screen)
|
val popup = Popup(screen)
|
||||||
popup.add(ScrollPane(text.toLabel()).apply { setOverscroll(false, false) })
|
popup.name = "ModCheckerPopup"
|
||||||
|
popup.add(ScrollPane(lines.joinToString("\n").toLabel()).apply { setOverscroll(false, false) })
|
||||||
.maxHeight(screen.stage.height / 2).row()
|
.maxHeight(screen.stage.height / 2).row()
|
||||||
popup.addCloseButton()
|
popup.addCloseButton()
|
||||||
popup.open(true)
|
popup.open(true)
|
||||||
}
|
}
|
||||||
innerTable2.add(generateTranslationsButton).colspan(2).row()
|
optionsTable.add(modCheckerButton).colspan(2).row()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addSoundEffectsVolumeSlider() {
|
private fun addSoundEffectsVolumeSlider() {
|
||||||
innerTable2.add("Sound effects volume".tr())
|
optionsTable.add("Sound effects volume".tr())
|
||||||
|
|
||||||
val soundEffectsVolumeSlider = Slider(0f, 1.0f, 0.1f, false, skin)
|
val soundEffectsVolumeSlider = Slider(0f, 1.0f, 0.1f, false, skin)
|
||||||
soundEffectsVolumeSlider.value = settings.soundEffectsVolume
|
soundEffectsVolumeSlider.value = settings.soundEffectsVolume
|
||||||
@ -252,13 +267,13 @@ class OptionsPopup(val previousScreen:CameraStageBaseScreen) : Popup(previousScr
|
|||||||
settings.save()
|
settings.save()
|
||||||
Sounds.play(UncivSound.Click)
|
Sounds.play(UncivSound.Click)
|
||||||
}
|
}
|
||||||
innerTable2.add(soundEffectsVolumeSlider).pad(10f).row()
|
optionsTable.add(soundEffectsVolumeSlider).pad(5f).row()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun addMusicVolumeSlider() {
|
private fun addMusicVolumeSlider() {
|
||||||
val musicLocation = Gdx.files.local(previousScreen.game.musicLocation)
|
val musicLocation = Gdx.files.local(previousScreen.game.musicLocation)
|
||||||
if (musicLocation.exists()) {
|
if (musicLocation.exists()) {
|
||||||
innerTable2.add("Music volume".tr())
|
optionsTable.add("Music volume".tr())
|
||||||
|
|
||||||
val musicVolumeSlider = Slider(0f, 1.0f, 0.1f, false, skin)
|
val musicVolumeSlider = Slider(0f, 1.0f, 0.1f, false, skin)
|
||||||
musicVolumeSlider.value = settings.musicVolume
|
musicVolumeSlider.value = settings.musicVolume
|
||||||
@ -272,12 +287,12 @@ class OptionsPopup(val previousScreen:CameraStageBaseScreen) : Popup(previousScr
|
|||||||
|
|
||||||
music?.volume = 0.4f * musicVolumeSlider.value
|
music?.volume = 0.4f * musicVolumeSlider.value
|
||||||
}
|
}
|
||||||
innerTable2.add(musicVolumeSlider).pad(10f).row()
|
optionsTable.add(musicVolumeSlider).pad(5f).row()
|
||||||
} else {
|
} else {
|
||||||
val downloadMusicButton = "Download music".toTextButton()
|
val downloadMusicButton = "Download music".toTextButton()
|
||||||
innerTable2.add(downloadMusicButton).colspan(2).row()
|
optionsTable.add(downloadMusicButton).colspan(2).row()
|
||||||
val errorTable = Table()
|
val errorTable = Table()
|
||||||
innerTable2.add(errorTable).colspan(2).row()
|
optionsTable.add(errorTable).colspan(2).row()
|
||||||
|
|
||||||
downloadMusicButton.onClick {
|
downloadMusicButton.onClick {
|
||||||
downloadMusicButton.disable()
|
downloadMusicButton.disable()
|
||||||
@ -290,7 +305,7 @@ class OptionsPopup(val previousScreen:CameraStageBaseScreen) : Popup(previousScr
|
|||||||
val file = DropBox.downloadFile("/Music/thatched-villagers.mp3")
|
val file = DropBox.downloadFile("/Music/thatched-villagers.mp3")
|
||||||
musicLocation.write(file, false)
|
musicLocation.write(file, false)
|
||||||
Gdx.app.postRunnable {
|
Gdx.app.postRunnable {
|
||||||
rebuildInnerTable()
|
rebuildOptionsTable()
|
||||||
previousScreen.game.startMusic()
|
previousScreen.game.startMusic()
|
||||||
}
|
}
|
||||||
} catch (ex: Exception) {
|
} catch (ex: Exception) {
|
||||||
@ -305,12 +320,12 @@ class OptionsPopup(val previousScreen:CameraStageBaseScreen) : Popup(previousScr
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun addResolutionSelectBox() {
|
private fun addResolutionSelectBox() {
|
||||||
innerTable2.add("Resolution".toLabel())
|
optionsTable.add("Resolution".toLabel())
|
||||||
|
|
||||||
val resolutionSelectBox = SelectBox<String>(skin)
|
val resolutionSelectBox = SelectBox<String>(skin)
|
||||||
resolutionSelectBox.items = resolutionArray
|
resolutionSelectBox.items = resolutionArray
|
||||||
resolutionSelectBox.selected = settings.resolution
|
resolutionSelectBox.selected = settings.resolution
|
||||||
innerTable2.add(resolutionSelectBox).minWidth(240f).pad(10f).row()
|
optionsTable.add(resolutionSelectBox).minWidth(240f).pad(10f).row()
|
||||||
|
|
||||||
resolutionSelectBox.onChange {
|
resolutionSelectBox.onChange {
|
||||||
settings.resolution = resolutionSelectBox.selected
|
settings.resolution = resolutionSelectBox.selected
|
||||||
@ -319,7 +334,7 @@ class OptionsPopup(val previousScreen:CameraStageBaseScreen) : Popup(previousScr
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun addTileSetSelectBox() {
|
private fun addTileSetSelectBox() {
|
||||||
innerTable2.add("Tileset".toLabel())
|
optionsTable.add("Tileset".toLabel())
|
||||||
|
|
||||||
val tileSetSelectBox = SelectBox<String>(skin)
|
val tileSetSelectBox = SelectBox<String>(skin)
|
||||||
val tileSetArray = GdxArray<String>()
|
val tileSetArray = GdxArray<String>()
|
||||||
@ -327,7 +342,7 @@ class OptionsPopup(val previousScreen:CameraStageBaseScreen) : Popup(previousScr
|
|||||||
for (tileset in tileSets) tileSetArray.add(tileset)
|
for (tileset in tileSets) tileSetArray.add(tileset)
|
||||||
tileSetSelectBox.items = tileSetArray
|
tileSetSelectBox.items = tileSetArray
|
||||||
tileSetSelectBox.selected = settings.tileSet
|
tileSetSelectBox.selected = settings.tileSet
|
||||||
innerTable2.add(tileSetSelectBox).minWidth(240f).pad(10f).row()
|
optionsTable.add(tileSetSelectBox).minWidth(240f).pad(10f).row()
|
||||||
|
|
||||||
tileSetSelectBox.onChange {
|
tileSetSelectBox.onChange {
|
||||||
settings.tileSet = tileSetSelectBox.selected
|
settings.tileSet = tileSetSelectBox.selected
|
||||||
@ -336,7 +351,7 @@ class OptionsPopup(val previousScreen:CameraStageBaseScreen) : Popup(previousScr
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun addAutosaveTurnsSelectBox() {
|
private fun addAutosaveTurnsSelectBox() {
|
||||||
innerTable2.add("Turns between autosaves".toLabel())
|
optionsTable.add("Turns between autosaves".toLabel())
|
||||||
|
|
||||||
val autosaveTurnsSelectBox = SelectBox<Int>(skin)
|
val autosaveTurnsSelectBox = SelectBox<Int>(skin)
|
||||||
val autosaveTurnsArray = GdxArray<Int>()
|
val autosaveTurnsArray = GdxArray<Int>()
|
||||||
@ -344,7 +359,7 @@ class OptionsPopup(val previousScreen:CameraStageBaseScreen) : Popup(previousScr
|
|||||||
autosaveTurnsSelectBox.items = autosaveTurnsArray
|
autosaveTurnsSelectBox.items = autosaveTurnsArray
|
||||||
autosaveTurnsSelectBox.selected = settings.turnsBetweenAutosaves
|
autosaveTurnsSelectBox.selected = settings.turnsBetweenAutosaves
|
||||||
|
|
||||||
innerTable2.add(autosaveTurnsSelectBox).pad(10f).row()
|
optionsTable.add(autosaveTurnsSelectBox).pad(10f).row()
|
||||||
|
|
||||||
autosaveTurnsSelectBox.onChange {
|
autosaveTurnsSelectBox.onChange {
|
||||||
settings.turnsBetweenAutosaves = autosaveTurnsSelectBox.selected
|
settings.turnsBetweenAutosaves = autosaveTurnsSelectBox.selected
|
||||||
@ -353,7 +368,7 @@ class OptionsPopup(val previousScreen:CameraStageBaseScreen) : Popup(previousScr
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun addMultiplayerTurnCheckerDelayBox() {
|
private fun addMultiplayerTurnCheckerDelayBox() {
|
||||||
innerTable2.add("Time between turn checks out-of-game (in minutes)".toLabel())
|
optionsTable.add("Time between turn checks out-of-game (in minutes)".toLabel())
|
||||||
|
|
||||||
val checkDelaySelectBox = SelectBox<Int>(skin)
|
val checkDelaySelectBox = SelectBox<Int>(skin)
|
||||||
val possibleDelaysArray = GdxArray<Int>()
|
val possibleDelaysArray = GdxArray<Int>()
|
||||||
@ -361,7 +376,7 @@ class OptionsPopup(val previousScreen:CameraStageBaseScreen) : Popup(previousScr
|
|||||||
checkDelaySelectBox.items = possibleDelaysArray
|
checkDelaySelectBox.items = possibleDelaysArray
|
||||||
checkDelaySelectBox.selected = settings.multiplayerTurnCheckerDelayInMinutes
|
checkDelaySelectBox.selected = settings.multiplayerTurnCheckerDelayInMinutes
|
||||||
|
|
||||||
innerTable2.add(checkDelaySelectBox).pad(10f).row()
|
optionsTable.add(checkDelaySelectBox).pad(10f).row()
|
||||||
|
|
||||||
checkDelaySelectBox.onChange {
|
checkDelaySelectBox.onChange {
|
||||||
settings.multiplayerTurnCheckerDelayInMinutes = checkDelaySelectBox.selected
|
settings.multiplayerTurnCheckerDelayInMinutes = checkDelaySelectBox.selected
|
||||||
@ -378,11 +393,11 @@ class OptionsPopup(val previousScreen:CameraStageBaseScreen) : Popup(previousScr
|
|||||||
.forEach { languageArray.add(it) }
|
.forEach { languageArray.add(it) }
|
||||||
if (languageArray.size == 0) return
|
if (languageArray.size == 0) return
|
||||||
|
|
||||||
innerTable2.add("Language".toLabel())
|
optionsTable.add("Language".toLabel())
|
||||||
languageSelectBox.items = languageArray
|
languageSelectBox.items = languageArray
|
||||||
val matchingLanguage = languageArray.firstOrNull { it.language == settings.language }
|
val matchingLanguage = languageArray.firstOrNull { it.language == settings.language }
|
||||||
languageSelectBox.selected = matchingLanguage ?: languageArray.first()
|
languageSelectBox.selected = matchingLanguage ?: languageArray.first()
|
||||||
innerTable2.add(languageSelectBox).minWidth(240f).pad(10f).row()
|
optionsTable.add(languageSelectBox).minWidth(240f).pad(10f).row()
|
||||||
|
|
||||||
languageSelectBox.onChange {
|
languageSelectBox.onChange {
|
||||||
// Sometimes the "changed" is triggered even when we didn't choose something
|
// Sometimes the "changed" is triggered even when we didn't choose something
|
||||||
|
Loading…
x
Reference in New Issue
Block a user