User: joe Date: 01 Mar 23 20:27 Revision: af6d94a51becaa82b7f50ac2fae9453325218b2e Summary: Fire item changed event on combo box model change. Fixes #1947 TeamCity URL: https://ci.mcdev.io/viewModification.html?tab=vcsModificationFiles&modId=8353&personal=false Index: src/main/kotlin/creator/PlatformVersion.kt =================================================================== --- src/main/kotlin/creator/PlatformVersion.kt (revision d3a6168ad3cde9bff594babc0d2648f57dd978f6) +++ src/main/kotlin/creator/PlatformVersion.kt (revision af6d94a51becaa82b7f50ac2fae9453325218b2e) @@ -23,7 +23,6 @@ import java.io.IOException import java.net.Proxy import java.net.URI -import javax.swing.JComboBox import kotlin.reflect.KClass private const val CLOUDFLARE_BASE_URL = "https://minecraftdev.org/versions/" @@ -93,12 +92,4 @@ return null } -data class PlatformVersion(var versions: List, var selectedIndex: Int) { - fun set(combo: JComboBox) { - combo.removeAllItems() - for (version in this.versions) { - combo.addItem(version) - } - combo.selectedIndex = this.selectedIndex - } -} +data class PlatformVersion(var versions: List, var selectedIndex: Int) Index: src/main/kotlin/creator/step/AbstractVersionChainStep.kt =================================================================== --- src/main/kotlin/creator/step/AbstractVersionChainStep.kt (revision d3a6168ad3cde9bff594babc0d2648f57dd978f6) +++ src/main/kotlin/creator/step/AbstractVersionChainStep.kt (revision af6d94a51becaa82b7f50ac2fae9453325218b2e) @@ -141,7 +141,7 @@ VersionProperties(this, versionProperties.toTypedArray(), preferredVersions.toTypedArray()) } - internal var comboBoxes: Array>>? = null + internal var comboBoxes: Array? = null abstract fun getAvailableVersions(versionsAbove: List>): List> @@ -152,15 +152,15 @@ fun getVersionBox(index: Int) = comboBoxes?.let { it[index] } open fun setSelectableItems(index: Int, items: List>) { - getVersionBox(index)!!.model = CollectionComboBoxModel(items) + getVersionBox(index)!!.setSelectableItems(items) } - open fun createComboBox(row: Row, index: Int, items: List>): Cell>> { - return row.comboBox(items) + open fun createComboBox(row: Row, index: Int, items: List>): Cell { + return row.cell(VersionChainComboBox(items)) } override fun setupUI(builder: Panel) { - val comboBoxes = mutableListOf>>() + val comboBoxes = mutableListOf() with(builder) { for ((i, label) in labels.withIndex()) { row(label) { @@ -180,6 +180,21 @@ } } +class VersionChainComboBox(items: List>) : ComboBox>() { + init { + setSelectableItems(items) + } + + fun setSelectableItems(items: List>) { + val currentItem = selectedItem + model = CollectionComboBoxModel(items) + if (selectedItem != currentItem) { + // changing the model doesn't fire item change, which we want to receive + selectedItemChanged() + } + } +} + private typealias PreferredVersionStateValue = List, String>> @Service Index: src/main/kotlin/platform/architectury/creator/ui-steps.kt =================================================================== --- src/main/kotlin/platform/architectury/creator/ui-steps.kt (revision d3a6168ad3cde9bff594babc0d2648f57dd978f6) +++ src/main/kotlin/platform/architectury/creator/ui-steps.kt (revision af6d94a51becaa82b7f50ac2fae9453325218b2e) @@ -22,6 +22,7 @@ import com.demonwav.mcdev.creator.step.NewProjectWizardChainStep.Companion.nextStep import com.demonwav.mcdev.creator.step.RepositoryStep import com.demonwav.mcdev.creator.step.UseMixinsStep +import com.demonwav.mcdev.creator.step.VersionChainComboBox import com.demonwav.mcdev.creator.step.WebsiteStep import com.demonwav.mcdev.platform.architectury.ArchitecturyVersion import com.demonwav.mcdev.platform.fabric.util.FabricApiVersions @@ -34,7 +35,6 @@ import com.intellij.openapi.observable.util.bindBooleanStorage import com.intellij.openapi.observable.util.transform import com.intellij.openapi.project.Project -import com.intellij.openapi.ui.ComboBox import com.intellij.openapi.util.Key import com.intellij.ui.JBColor import com.intellij.ui.dsl.builder.Cell @@ -129,7 +129,7 @@ .bindBooleanStorage("${javaClass.name}.useArchApi") private var useArchApi by useArchApiProperty - override fun createComboBox(row: Row, index: Int, items: List>): Cell>> { + override fun createComboBox(row: Row, index: Int, items: List>): Cell { return when (index) { FABRIC_API_VERSION -> { val comboBox = super.createComboBox(row, index, items).bindEnabled(useFabricApiProperty) Index: src/main/kotlin/platform/fabric/creator/ui-steps.kt =================================================================== --- src/main/kotlin/platform/fabric/creator/ui-steps.kt (revision d3a6168ad3cde9bff594babc0d2648f57dd978f6) +++ src/main/kotlin/platform/fabric/creator/ui-steps.kt (revision af6d94a51becaa82b7f50ac2fae9453325218b2e) @@ -21,6 +21,7 @@ import com.demonwav.mcdev.creator.step.NewProjectWizardChainStep.Companion.nextStep import com.demonwav.mcdev.creator.step.RepositoryStep import com.demonwav.mcdev.creator.step.UseMixinsStep +import com.demonwav.mcdev.creator.step.VersionChainComboBox import com.demonwav.mcdev.creator.step.WaitForSmartModeStep import com.demonwav.mcdev.creator.step.WebsiteStep import com.demonwav.mcdev.platform.fabric.util.FabricApiVersions @@ -35,7 +36,6 @@ import com.intellij.openapi.observable.util.bindStorage import com.intellij.openapi.observable.util.transform import com.intellij.openapi.project.Project -import com.intellij.openapi.ui.ComboBox import com.intellij.openapi.util.Key import com.intellij.ui.JBColor import com.intellij.ui.dsl.builder.Cell @@ -114,7 +114,7 @@ } } - override fun createComboBox(row: Row, index: Int, items: List>): Cell>> { + override fun createComboBox(row: Row, index: Int, items: List>): Cell { return when (index) { MINECRAFT_VERSION -> { val comboBox = super.createComboBox(row, index, items) @@ -188,12 +188,7 @@ private fun updateVersionBox() { val versionBox = getVersionBox(MINECRAFT_VERSION) ?: return val selectedItem = versionBox.selectedItem - versionBox.removeAllItems() - for (gameVer in mcVersions) { - if (showSnapshots || gameVer.stable) { - versionBox.addItem(gameVer) - } - } + versionBox.setSelectableItems(mcVersions.filter { gameVer -> showSnapshots || gameVer.stable }) versionBox.selectedItem = selectedItem } Index: src/main/kotlin/platform/sponge/SpongeVersion.kt =================================================================== --- src/main/kotlin/platform/sponge/SpongeVersion.kt (revision d3a6168ad3cde9bff594babc0d2648f57dd978f6) +++ src/main/kotlin/platform/sponge/SpongeVersion.kt (revision af6d94a51becaa82b7f50ac2fae9453325218b2e) @@ -14,18 +14,8 @@ import com.demonwav.mcdev.util.fromJson import com.google.gson.Gson import com.intellij.openapi.diagnostic.logger -import javax.swing.JComboBox data class SpongeVersion(var versions: LinkedHashMap, var selectedIndex: Int) { - - fun set(combo: JComboBox) { - combo.removeAllItems() - for ((key, _) in this.versions) { - combo.addItem(key) - } - combo.selectedIndex = this.selectedIndex - } - companion object { private val LOGGER = logger()