diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/ProjectTemplateSettingComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/ProjectTemplateSettingComponent.kt index e0e2f8d2ee3..71d2c969db0 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/ProjectTemplateSettingComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/firstStep/ProjectTemplateSettingComponent.kt @@ -1,15 +1,11 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.ui.firstStep -import org.jetbrains.kotlin.idea.KotlinIcons -import org.jetbrains.kotlin.tools.projectWizard.core.entity.DropDownSettingType import org.jetbrains.kotlin.tools.projectWizard.core.ValuesReadingContext +import org.jetbrains.kotlin.tools.projectWizard.core.entity.DropDownSettingType import org.jetbrains.kotlin.tools.projectWizard.core.entity.reference import org.jetbrains.kotlin.tools.projectWizard.plugins.projectTemplates.ProjectTemplatesPlugin import org.jetbrains.kotlin.tools.projectWizard.projectTemplates.ProjectTemplate -import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.ImmutableSingleSelectableListWithIcon -import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.UiConstants -import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.bordered -import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.panel +import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.* import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.setting.SettingComponent import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.setting.ValidationIndicator import java.awt.BorderLayout @@ -28,7 +24,7 @@ class ProjectTemplateSettingComponent( private val list = ImmutableSingleSelectableListWithIcon( setting.type.values, renderValue = { value -> - icon = KotlinIcons.SMALL_LOGO + icon = value.projectKind.icon append(value.title) }, onValueSelected = { diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorComponent.kt index 1971f21609a..eda2043514f 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/secondStep/modulesEditor/ModulesEditorComponent.kt @@ -28,7 +28,7 @@ class ModulesEditorComponent( ModulesEditorTree( onSelected = { oneEntrySelected(it) }, addModule = { component -> - val isMppProject = KotlinPlugin::projectKind.value == ProjectKind.Multiplatform + val isMppProject = KotlinPlugin::projectKind.value == ProjectKind.Singleplatform moduleCreator.create( target = null, // The empty tree case allowMultiplatform = isMppProject, @@ -55,7 +55,7 @@ class ModulesEditorComponent( moduleCreator = moduleCreator, model = model, getModules = { value ?: emptyList() }, - isMultiplatformProject = { KotlinPlugin::projectKind.value == ProjectKind.Multiplatform } + isMultiplatformProject = { KotlinPlugin::projectKind.value != ProjectKind.Singleplatform } ) override val component: JComponent by lazy(LazyThreadSafetyMode.NONE) { diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/ui.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/ui.kt index 4384125f5d0..9d8b960c5b1 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/ui.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/ui.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.SimpleTarget import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.TargetConfigurator import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleSubType import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType +import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ProjectKind import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind @@ -95,6 +96,14 @@ val Module.icon: Icon ModuleKind.singleplatformJvm -> AllIcons.Nodes.Module } +val ProjectKind.icon: Icon + get() = when (this) { + ProjectKind.Singleplatform -> KotlinIcons.SMALL_LOGO + ProjectKind.Multiplatform -> KotlinIcons.MPP + ProjectKind.Android -> KotlinIcons.SMALL_LOGO + ProjectKind.Js -> KotlinIcons.JS + } + val ModuleSubType.icon: Icon get() = moduleType.icon diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/BuildSystemPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/BuildSystemPlugin.kt index f75aba51f80..b652337b077 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/BuildSystemPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/buildSystem/BuildSystemPlugin.kt @@ -31,9 +31,10 @@ abstract class BuildSystemPlugin(context: Context) : Plugin(context) { validate { buildSystemType -> if (!buildSystemType.isGradle - && KotlinPlugin::projectKind.reference.notRequiredSettingValue == ProjectKind.Multiplatform + && KotlinPlugin::projectKind.reference.notRequiredSettingValue != ProjectKind.Singleplatform ) { - ValidationResult.ValidationError("Multiplatform project cannot be generated using ${buildSystemType.text}") + val projectKind = KotlinPlugin::projectKind.reference.notRequiredSettingValue?.text?.capitalize() ?: "Project" + ValidationResult.ValidationError("$projectKind cannot be generated using ${buildSystemType.text}") } else ValidationResult.OK } } diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt index fe84ce35dc5..75c6563af18 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt @@ -123,7 +123,9 @@ class KotlinPlugin(context: Context) : Plugin(context) { enum class ProjectKind(override val text: String) : DisplayableSettingItem { Singleplatform("Singleplatform JVM project"), - Multiplatform("Multiplatform project") + Multiplatform("Multiplatform project"), + Android("Android project"), + Js("Kotlin/JS project") } fun List.withAllSubModules(includeSourcesets: Boolean = false): List = buildList { diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt index 672d284329d..8858c9f16a3 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/projectTemplates/ProjectTemplate.kt @@ -200,7 +200,7 @@ object AndroidApplication : ProjectTemplate() { Simple Android application with single activity """.trimIndent() override val suggestedProjectName = "myAndroidApplication" - override val projectKind = ProjectKind.Multiplatform + override val projectKind = ProjectKind.Android override val setsPluginSettings: List> get() = listOf( @@ -248,7 +248,7 @@ object JsBrowserApplication : ProjectTemplate() { override val title = "Kotlin/JS Frontend Application" override val htmlDescription = "Gradle project for a Kotlin/JS frontend web application" override val suggestedProjectName = "myKotlinJsApplication" - override val projectKind = ProjectKind.Multiplatform + override val projectKind = ProjectKind.Js override val setsPluginSettings: List> get() = listOf( diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Module.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Module.kt index 1c17bcab176..1eccf64d1bc 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Module.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Module.kt @@ -78,6 +78,7 @@ class Module( configurator == MppModuleConfigurator -> "MPP Module" configurator == AndroidSinglePlatformModuleConfigurator -> "Android Module" configurator == IOSSinglePlatformModuleConfigurator -> "IOS Module" + configurator == JsSingleplatformModuleConfigurator -> "JS Module" else -> "Module" }