User: strokkur24 Date: 19 Jan 26 19:12 Revision: 8effb1f558941e9089bd69527ba46c7a8f56222f Summary: Simplify checkbox enabled toggle logic TeamCity URL: http://ci.mcdev.io:80/viewModification.html?tab=vcsModificationFiles&modId=10400&personal=false Index: src/main/kotlin/creator/custom/types/BooleanCreatorProperty.kt =================================================================== --- src/main/kotlin/creator/custom/types/BooleanCreatorProperty.kt (revision 8076ef0889f55ee89d9869e5e170f1b6d0ef2c3a) +++ src/main/kotlin/creator/custom/types/BooleanCreatorProperty.kt (revision 8effb1f558941e9089bd69527ba46c7a8f56222f) @@ -57,19 +57,9 @@ .bindSelected(graphProperty) .enabled(descriptor.editable != false) - var previousEnabledStatus = graphProperty.get() - forceValueProperty?.afterChange { str -> - if (str == null) { - checkbox.enabled(descriptor.editable != false) - graphProperty.set(previousEnabledStatus) - } else { - str.toBooleanStrictOrNull()?.let { - checkbox.enabled(false) - previousEnabledStatus = graphProperty.get() - graphProperty.set(it) - } - } - } + val checkboxUpdater = createCheckboxEnabledToggleMethod(graphProperty, checkbox) + checkboxUpdater.update(forceValueProperty?.get()) + forceValueProperty?.afterChange(checkboxUpdater::update) }.propertyVisibility() } Index: src/main/kotlin/creator/custom/types/CreatorProperty.kt =================================================================== --- src/main/kotlin/creator/custom/types/CreatorProperty.kt (revision 8076ef0889f55ee89d9869e5e170f1b6d0ef2c3a) +++ src/main/kotlin/creator/custom/types/CreatorProperty.kt (revision 8effb1f558941e9089bd69527ba46c7a8f56222f) @@ -35,6 +35,8 @@ import com.intellij.openapi.observable.properties.PropertyGraph import com.intellij.openapi.observable.util.bindStorage import com.intellij.openapi.observable.util.transform +import com.intellij.ui.components.JBCheckBox +import com.intellij.ui.dsl.builder.Cell import com.intellij.ui.dsl.builder.Panel import com.intellij.ui.dsl.builder.Row @@ -248,6 +250,29 @@ return this } + fun createCheckboxEnabledToggleMethod( + property: ObservableMutableProperty, + checkbox: Cell + ): CheckboxUpdater { + class Inner : CheckboxUpdater { + private var previousEnabledStatus = property.get() + override fun update(str: String?) { + if (str == null) { + checkbox.enabled(descriptor.editable != false) + property.set(previousEnabledStatus) + } else { + str.toBooleanStrictOrNull()?.let { + checkbox.enabled(false) + previousEnabledStatus = property.get() + property.set(it) + } + } + } + } + + return Inner() + } + companion object { private fun obtainDependencies( properties: Map>, @@ -397,4 +422,9 @@ return out } } + + @FunctionalInterface + interface CheckboxUpdater { + fun update(str: String?) -} + } +} Index: src/main/kotlin/creator/custom/types/GradlePluginSelectorCreatorProperty.kt =================================================================== --- src/main/kotlin/creator/custom/types/GradlePluginSelectorCreatorProperty.kt (revision 8076ef0889f55ee89d9869e5e170f1b6d0ef2c3a) +++ src/main/kotlin/creator/custom/types/GradlePluginSelectorCreatorProperty.kt (revision 8effb1f558941e9089bd69527ba46c7a8f56222f) @@ -95,19 +95,9 @@ .bindSelected(enabledProperty) .enabled(descriptor.editable != false) - var previousEnabledStatus = enabledProperty.get() - forceValueProperty?.afterChange { str -> - if (str == null) { - checkbox.enabled(descriptor.editable != false) - enabledProperty.set(previousEnabledStatus) - } else { - str.toBooleanStrictOrNull()?.let { - checkbox.enabled(false) - previousEnabledStatus = enabledProperty.get() - enabledProperty.set(it) - } - } - } + val checkboxUpdater = createCheckboxEnabledToggleMethod(enabledProperty, checkbox) + checkboxUpdater.update(forceValueProperty?.get()) + forceValueProperty?.afterChange(checkboxUpdater::update) label("Version:").gap(RightGap.SMALL) val combobox = comboBox(versionsModel.get())