From e3e463ef70e4e4a48ad00837149bdc1147a0b15b Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 26 Jan 2016 20:15:05 +0100 Subject: [PATCH] nicer UI for choosing a configurator when multiple options are available --- .../actions/ConfigureKotlinInProjectAction.kt | 4 +-- ...linSetupEnvironmentNotificationProvider.kt | 33 +++++++++++-------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/actions/ConfigureKotlinInProjectAction.kt b/idea/src/org/jetbrains/kotlin/idea/actions/ConfigureKotlinInProjectAction.kt index 9b5851572a3..24c21ab0d86 100644 --- a/idea/src/org/jetbrains/kotlin/idea/actions/ConfigureKotlinInProjectAction.kt +++ b/idea/src/org/jetbrains/kotlin/idea/actions/ConfigureKotlinInProjectAction.kt @@ -45,8 +45,8 @@ abstract class ConfigureKotlinInProjectAction : AnAction() { configurators.size == 1 -> configurators.first().configure(project, emptyList()) configurators.isEmpty() -> Messages.showErrorDialog("There aren't configurators available", e.presentation.text!!) else -> { - Messages.showErrorDialog("More than one configurator is available", e.presentation.text!!) - showConfigureKotlinNotificationIfNeeded(project) + val configuratorsPopup = KotlinSetupEnvironmentNotificationProvider.createConfiguratorsPopup(project, configurators.toList()) + configuratorsPopup.showInBestPositionFor(e.dataContext) } } } diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinSetupEnvironmentNotificationProvider.kt b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinSetupEnvironmentNotificationProvider.kt index b0b662c2ffa..d0a1932697f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinSetupEnvironmentNotificationProvider.kt +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinSetupEnvironmentNotificationProvider.kt @@ -28,6 +28,7 @@ import com.intellij.openapi.roots.ModuleRootManager import com.intellij.openapi.roots.ModuleRootModificationUtil import com.intellij.openapi.roots.ui.configuration.ProjectSettingsService import com.intellij.openapi.ui.popup.JBPopupFactory +import com.intellij.openapi.ui.popup.ListPopup import com.intellij.openapi.ui.popup.PopupStep import com.intellij.openapi.ui.popup.util.BaseListPopupStep import com.intellij.openapi.util.Key @@ -108,22 +109,28 @@ class KotlinSetupEnvironmentNotificationProvider( val configurators = getApplicableConfigurators(module).toList() if (!configurators.isEmpty()) { createComponentActionLabel("Configure") { label -> - val step = object : BaseListPopupStep("Choose Configurator", configurators) { - override fun getTextFor(value: KotlinProjectConfigurator?): String { - return value?.presentableText ?: "" - } - - override fun onChosen(selectedValue: KotlinProjectConfigurator?, finalChoice: Boolean): PopupStep<*>? { - selectedValue?.let { - it.configure(module.project, emptyList()) - } - return null - } - } - JBPopupFactory.getInstance().createListPopup(step).showUnderneathOf(label) + val configuratorsPopup = createConfiguratorsPopup(module.project, configurators) + configuratorsPopup.showUnderneathOf(label) } } } } + + fun createConfiguratorsPopup(project: Project, configurators: List): ListPopup { + val step = object : BaseListPopupStep("Choose Configurator", configurators) { + override fun getTextFor(value: KotlinProjectConfigurator?): String { + return value?.presentableText ?: "" + } + + override fun onChosen(selectedValue: KotlinProjectConfigurator?, finalChoice: Boolean): PopupStep<*>? { + selectedValue?.let { + it.configure(project, emptyList()) + } + return null + } + } + val configuratorsPopup = JBPopupFactory.getInstance().createListPopup(step) + return configuratorsPopup + } } }