nicer UI for choosing a configurator when multiple options are available
This commit is contained in:
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+20
-13
@@ -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,22 +109,28 @@ 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 step = object : BaseListPopupStep<KotlinProjectConfigurator>("Choose Configurator", configurators) {
|
val configuratorsPopup = createConfiguratorsPopup(module.project, configurators)
|
||||||
override fun getTextFor(value: KotlinProjectConfigurator?): String {
|
configuratorsPopup.showUnderneathOf(label)
|
||||||
return value?.presentableText ?: "<none>"
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onChosen(selectedValue: KotlinProjectConfigurator?, finalChoice: Boolean): PopupStep<*>? {
|
|
||||||
selectedValue?.let {
|
|
||||||
it.configure(module.project, emptyList())
|
|
||||||
}
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
JBPopupFactory.getInstance().createListPopup(step).showUnderneathOf(label)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun createConfiguratorsPopup(project: Project, configurators: List<KotlinProjectConfigurator>): ListPopup {
|
||||||
|
val step = object : BaseListPopupStep<KotlinProjectConfigurator>("Choose Configurator", configurators) {
|
||||||
|
override fun getTextFor(value: KotlinProjectConfigurator?): String {
|
||||||
|
return value?.presentableText ?: "<none>"
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onChosen(selectedValue: KotlinProjectConfigurator?, finalChoice: Boolean): PopupStep<*>? {
|
||||||
|
selectedValue?.let {
|
||||||
|
it.configure(project, emptyList())
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
val configuratorsPopup = JBPopupFactory.getInstance().createListPopup(step)
|
||||||
|
return configuratorsPopup
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user