diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/TextFieldComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/TextFieldComponent.kt index 10b1640c031..e138c747976 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/TextFieldComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/TextFieldComponent.kt @@ -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 } \ No newline at end of file diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/UIComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/UIComponent.kt index f370533ecd1..b32cdf77fe9 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/UIComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/UIComponent.kt @@ -70,7 +70,7 @@ abstract class UIComponent( allowEventFiring = allowEventFiringSaved } - fun validate(value: V) { + open fun validate(value: V) { if (validator == null) return if (validationIndicator == null) return read { diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/ModuleSettingsComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/ModuleSettingsComponent.kt index 3c565e70dc9..c414d99b95a 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/ModuleSettingsComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/ModuleSettingsComponent.kt @@ -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