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
|
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.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.core.entity.reference
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.projectTemplates.ProjectTemplatesPlugin
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.projectTemplates.ProjectTemplatesPlugin
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.projectTemplates.ProjectTemplate
|
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.*
|
||||||
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.setting.SettingComponent
|
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.setting.SettingComponent
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.setting.ValidationIndicator
|
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.setting.ValidationIndicator
|
||||||
import java.awt.BorderLayout
|
import java.awt.BorderLayout
|
||||||
@@ -28,7 +24,7 @@ class ProjectTemplateSettingComponent(
|
|||||||
private val list = ImmutableSingleSelectableListWithIcon(
|
private val list = ImmutableSingleSelectableListWithIcon(
|
||||||
setting.type.values,
|
setting.type.values,
|
||||||
renderValue = { value ->
|
renderValue = { value ->
|
||||||
icon = KotlinIcons.SMALL_LOGO
|
icon = value.projectKind.icon
|
||||||
append(value.title)
|
append(value.title)
|
||||||
},
|
},
|
||||||
onValueSelected = {
|
onValueSelected = {
|
||||||
|
|||||||
+2
-2
@@ -28,7 +28,7 @@ class ModulesEditorComponent(
|
|||||||
ModulesEditorTree(
|
ModulesEditorTree(
|
||||||
onSelected = { oneEntrySelected(it) },
|
onSelected = { oneEntrySelected(it) },
|
||||||
addModule = { component ->
|
addModule = { component ->
|
||||||
val isMppProject = KotlinPlugin::projectKind.value == ProjectKind.Multiplatform
|
val isMppProject = KotlinPlugin::projectKind.value == ProjectKind.Singleplatform
|
||||||
moduleCreator.create(
|
moduleCreator.create(
|
||||||
target = null, // The empty tree case
|
target = null, // The empty tree case
|
||||||
allowMultiplatform = isMppProject,
|
allowMultiplatform = isMppProject,
|
||||||
@@ -55,7 +55,7 @@ class ModulesEditorComponent(
|
|||||||
moduleCreator = moduleCreator,
|
moduleCreator = moduleCreator,
|
||||||
model = model,
|
model = model,
|
||||||
getModules = { value ?: emptyList() },
|
getModules = { value ?: emptyList() },
|
||||||
isMultiplatformProject = { KotlinPlugin::projectKind.value == ProjectKind.Multiplatform }
|
isMultiplatformProject = { KotlinPlugin::projectKind.value != ProjectKind.Singleplatform }
|
||||||
)
|
)
|
||||||
|
|
||||||
override val component: JComponent by lazy(LazyThreadSafetyMode.NONE) {
|
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.moduleConfigurators.TargetConfigurator
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleSubType
|
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.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.DisplayableSettingItem
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module
|
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind
|
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind
|
||||||
@@ -95,6 +96,14 @@ val Module.icon: Icon
|
|||||||
ModuleKind.singleplatformJvm -> AllIcons.Nodes.Module
|
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
|
val ModuleSubType.icon: Icon
|
||||||
get() = moduleType.icon
|
get() = moduleType.icon
|
||||||
|
|||||||
+3
-2
@@ -31,9 +31,10 @@ abstract class BuildSystemPlugin(context: Context) : Plugin(context) {
|
|||||||
|
|
||||||
validate { buildSystemType ->
|
validate { buildSystemType ->
|
||||||
if (!buildSystemType.isGradle
|
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
|
} else ValidationResult.OK
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-1
@@ -123,7 +123,9 @@ class KotlinPlugin(context: Context) : Plugin(context) {
|
|||||||
|
|
||||||
enum class ProjectKind(override val text: String) : DisplayableSettingItem {
|
enum class ProjectKind(override val text: String) : DisplayableSettingItem {
|
||||||
Singleplatform("Singleplatform JVM project"),
|
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 {
|
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
|
Simple <b>Android</b> application with single activity
|
||||||
""".trimIndent()
|
""".trimIndent()
|
||||||
override val suggestedProjectName = "myAndroidApplication"
|
override val suggestedProjectName = "myAndroidApplication"
|
||||||
override val projectKind = ProjectKind.Multiplatform
|
override val projectKind = ProjectKind.Android
|
||||||
|
|
||||||
override val setsPluginSettings: List<SettingWithValue<*, *>>
|
override val setsPluginSettings: List<SettingWithValue<*, *>>
|
||||||
get() = listOf(
|
get() = listOf(
|
||||||
@@ -248,7 +248,7 @@ object JsBrowserApplication : ProjectTemplate() {
|
|||||||
override val title = "Kotlin/JS Frontend Application"
|
override val title = "Kotlin/JS Frontend Application"
|
||||||
override val htmlDescription = "Gradle project for a Kotlin/JS frontend web application"
|
override val htmlDescription = "Gradle project for a Kotlin/JS frontend web application"
|
||||||
override val suggestedProjectName = "myKotlinJsApplication"
|
override val suggestedProjectName = "myKotlinJsApplication"
|
||||||
override val projectKind = ProjectKind.Multiplatform
|
override val projectKind = ProjectKind.Js
|
||||||
|
|
||||||
override val setsPluginSettings: List<SettingWithValue<*, *>>
|
override val setsPluginSettings: List<SettingWithValue<*, *>>
|
||||||
get() = listOf(
|
get() = listOf(
|
||||||
|
|||||||
+1
@@ -78,6 +78,7 @@ class Module(
|
|||||||
configurator == MppModuleConfigurator -> "MPP Module"
|
configurator == MppModuleConfigurator -> "MPP Module"
|
||||||
configurator == AndroidSinglePlatformModuleConfigurator -> "Android Module"
|
configurator == AndroidSinglePlatformModuleConfigurator -> "Android Module"
|
||||||
configurator == IOSSinglePlatformModuleConfigurator -> "IOS Module"
|
configurator == IOSSinglePlatformModuleConfigurator -> "IOS Module"
|
||||||
|
configurator == JsSingleplatformModuleConfigurator -> "JS Module"
|
||||||
else -> "Module"
|
else -> "Module"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user