nicer UI for choosing a configurator when multiple options are available

This commit is contained in:
Dmitry Jemerov
2016-01-26 20:15:05 +01:00
parent 7c8a5b0b83
commit e3e463ef70
2 changed files with 22 additions and 15 deletions
@@ -45,8 +45,8 @@ abstract class ConfigureKotlinInProjectAction : AnAction() {
configurators.size == 1 -> configurators.first().configure(project, emptyList()) configurators.size == 1 -> configurators.first().configure(project, emptyList())
configurators.isEmpty() -> Messages.showErrorDialog("There aren't configurators available", e.presentation.text!!) configurators.isEmpty() -> Messages.showErrorDialog("There aren't configurators available", e.presentation.text!!)
else -> { else -> {
Messages.showErrorDialog("More than one configurator is available", e.presentation.text!!) val configuratorsPopup = KotlinSetupEnvironmentNotificationProvider.createConfiguratorsPopup(project, configurators.toList())
showConfigureKotlinNotificationIfNeeded(project) configuratorsPopup.showInBestPositionFor(e.dataContext)
} }
} }
} }
@@ -28,6 +28,7 @@ import com.intellij.openapi.roots.ModuleRootManager
import com.intellij.openapi.roots.ModuleRootModificationUtil import com.intellij.openapi.roots.ModuleRootModificationUtil
import com.intellij.openapi.roots.ui.configuration.ProjectSettingsService import com.intellij.openapi.roots.ui.configuration.ProjectSettingsService
import com.intellij.openapi.ui.popup.JBPopupFactory 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.PopupStep
import com.intellij.openapi.ui.popup.util.BaseListPopupStep import com.intellij.openapi.ui.popup.util.BaseListPopupStep
import com.intellij.openapi.util.Key import com.intellij.openapi.util.Key
@@ -108,6 +109,14 @@ class KotlinSetupEnvironmentNotificationProvider(
val configurators = getApplicableConfigurators(module).toList() val configurators = getApplicableConfigurators(module).toList()
if (!configurators.isEmpty()) { if (!configurators.isEmpty()) {
createComponentActionLabel("Configure") { label -> createComponentActionLabel("Configure") { label ->
val configuratorsPopup = createConfiguratorsPopup(module.project, configurators)
configuratorsPopup.showUnderneathOf(label)
}
}
}
}
fun createConfiguratorsPopup(project: Project, configurators: List<KotlinProjectConfigurator>): ListPopup {
val step = object : BaseListPopupStep<KotlinProjectConfigurator>("Choose Configurator", configurators) { val step = object : BaseListPopupStep<KotlinProjectConfigurator>("Choose Configurator", configurators) {
override fun getTextFor(value: KotlinProjectConfigurator?): String { override fun getTextFor(value: KotlinProjectConfigurator?): String {
return value?.presentableText ?: "<none>" return value?.presentableText ?: "<none>"
@@ -115,15 +124,13 @@ class KotlinSetupEnvironmentNotificationProvider(
override fun onChosen(selectedValue: KotlinProjectConfigurator?, finalChoice: Boolean): PopupStep<*>? { override fun onChosen(selectedValue: KotlinProjectConfigurator?, finalChoice: Boolean): PopupStep<*>? {
selectedValue?.let { selectedValue?.let {
it.configure(module.project, emptyList()) it.configure(project, emptyList())
} }
return null return null
} }
} }
JBPopupFactory.getInstance().createListPopup(step).showUnderneathOf(label) val configuratorsPopup = JBPopupFactory.getInstance().createListPopup(step)
} return configuratorsPopup
}
}
} }
} }
} }