Wizard: do not allow to edit module name when it is an only root module

This commit is contained in:
Ilya Kirillov
2020-03-20 13:14:14 +03:00
parent 67034546ae
commit d2c8ca9230
3 changed files with 32 additions and 3 deletions
@@ -1,6 +1,8 @@
package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.components
import com.intellij.ui.components.JBTextField
import com.intellij.util.ui.JBUI
import com.intellij.util.ui.UIUtil
import org.jetbrains.kotlin.tools.projectWizard.core.Context
import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingValidator
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.textField
@@ -17,11 +19,27 @@ class TextFieldComponent(
validator,
onValueUpdate
) {
private var isDisabled: Boolean = false
private var cachedValueWhenDisabled: String? = null
override val uiComponent: JBTextField = textField(initialValue.orEmpty(), ::fireValueUpdated)
override fun updateUiValue(newValue: String) = safeUpdateUi {
uiComponent.text = newValue
}
override fun getUiValue(): String = uiComponent.text
fun disable(message: String) {
cachedValueWhenDisabled = getUiValue()
uiComponent.isEditable = false
uiComponent.foreground = UIUtil.getLabelFontColor(UIUtil.FontColor.BRIGHTER)
isDisabled = true
updateUiValue(message)
}
override fun validate(value: String) {
if (isDisabled) return
super.validate(value)
}
override fun getUiValue(): String = cachedValueWhenDisabled ?: uiComponent.text
}
@@ -70,7 +70,7 @@ abstract class UIComponent<V : Any>(
allowEventFiring = allowEventFiringSaved
}
fun validate(value: V) {
open fun validate(value: V) {
if (validator == null) return
if (validationIndicator == null) return
read {
@@ -1,15 +1,18 @@
package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.secondStep
import com.intellij.ui.components.JBTextField
import org.jetbrains.kotlin.idea.projectWizard.UiEditorUsageStats
import org.jetbrains.kotlin.tools.projectWizard.core.Context
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
import org.jetbrains.kotlin.tools.projectWizard.core.entity.StringValidators
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.getConfiguratorSettings
import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.moduleType
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType
import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module.Companion.ALLOWED_SPECIAL_CHARS_IN_MODULE_NAMES
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.isRootModule
import org.jetbrains.kotlin.tools.projectWizard.templates.Template
import org.jetbrains.kotlin.tools.projectWizard.templates.settings
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.DynamicComponent
@@ -62,7 +65,7 @@ class ModuleSettingsComponent(
}
}
private class ModuleNameComponent(context: Context, module: Module) : TitledComponent(context) {
private class ModuleNameComponent(context: Context, private val module: Module) : TitledComponent(context) {
private val textField = TextFieldComponent(
context,
labelText = null,
@@ -78,6 +81,14 @@ private class ModuleNameComponent(context: Context, module: Module) : TitledComp
override val title: String = "Name"
override fun onInit() {
super.onInit()
val isSingleRootMode = read { KotlinPlugin::modules.settingValue }.size == 1
if (isSingleRootMode && module.isRootModule) {
textField.disable("[The same as the project name]")
}
}
companion object {
private val validateModuleName =
StringValidators.shouldNotBeBlank("Module name") and