Wizard: introduce Android & JS multiplatform project kinds
#KT-36155 fixed
This commit is contained in:
+3
-7
@@ -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 = {
|
||||
|
||||
+2
-2
@@ -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) {
|
||||
|
||||
+9
@@ -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
|
||||
|
||||
+3
-2
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
+3
-1
@@ -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<Module>.withAllSubModules(includeSourcesets: Boolean = false): List<Module> = buildList {
|
||||
|
||||
+2
-2
@@ -200,7 +200,7 @@ object AndroidApplication : ProjectTemplate() {
|
||||
Simple <b>Android</b> application with single activity
|
||||
""".trimIndent()
|
||||
override val suggestedProjectName = "myAndroidApplication"
|
||||
override val projectKind = ProjectKind.Multiplatform
|
||||
override val projectKind = ProjectKind.Android
|
||||
|
||||
override val setsPluginSettings: List<SettingWithValue<*, *>>
|
||||
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<SettingWithValue<*, *>>
|
||||
get() = listOf(
|
||||
|
||||
+1
@@ -78,6 +78,7 @@ class Module(
|
||||
configurator == MppModuleConfigurator -> "MPP Module"
|
||||
configurator == AndroidSinglePlatformModuleConfigurator -> "Android Module"
|
||||
configurator == IOSSinglePlatformModuleConfigurator -> "IOS Module"
|
||||
configurator == JsSingleplatformModuleConfigurator -> "JS Module"
|
||||
else -> "Module"
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user