From 5e2c76250114e9b681d93feab5807d565e9abc6a Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Fri, 13 Mar 2020 16:14:46 +0300 Subject: [PATCH] Wizard: use built-in browse folder button for path component --- .../wizard/ui/components/PathFieldComponent.kt | 8 +++++--- .../kotlin/tools/projectWizard/wizard/ui/ui.kt | 11 ++++++----- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/PathFieldComponent.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/PathFieldComponent.kt index b54187e5dc6..cf3906d8f72 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/PathFieldComponent.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/components/PathFieldComponent.kt @@ -4,8 +4,10 @@ import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory import com.intellij.openapi.ui.TextBrowseFolderListener import com.intellij.openapi.ui.TextFieldWithBrowseButton import org.jetbrains.kotlin.tools.projectWizard.core.Context +import org.jetbrains.kotlin.tools.projectWizard.core.asPath import org.jetbrains.kotlin.tools.projectWizard.core.entity.SettingValidator import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.textField +import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.withOnUpdatedListener import java.nio.file.Path import java.nio.file.Paths import javax.swing.JComponent @@ -22,9 +24,9 @@ class PathFieldComponent( validator, onValueUpdate ) { - override val uiComponent: TextFieldWithBrowseButton = TextFieldWithBrowseButton( - textField(initialValue?.toString().orEmpty()) { path -> fireValueUpdated(Paths.get(path.trim())) } - ).apply { + override val uiComponent: TextFieldWithBrowseButton = TextFieldWithBrowseButton().apply { + textField.text = initialValue?.toString().orEmpty() + textField.withOnUpdatedListener { path -> fireValueUpdated(path.trim().asPath()) } addBrowseFolderListener( TextBrowseFolderListener( FileChooserDescriptorFactory.createSingleFolderDescriptor(), diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/ui.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/ui.kt index f2ecdc59063..5a653609750 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/ui.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/ui/ui.kt @@ -27,10 +27,7 @@ import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.UiConstants.GAP_BORDER import java.awt.* import java.awt.event.MouseAdapter import java.awt.event.MouseEvent -import javax.swing.BorderFactory -import javax.swing.Icon -import javax.swing.JComponent -import javax.swing.JPanel +import javax.swing.* import javax.swing.border.Border import javax.swing.event.DocumentEvent import javax.swing.event.DocumentListener @@ -43,7 +40,11 @@ internal inline fun label(text: String, bold: Boolean = false, init: JBLabel.() inline fun panel(layout: LayoutManager = BorderLayout(), init: JPanel.() -> Unit = {}) = JPanel(layout).apply(init) -fun textField(defaultValue: String?, onUpdated: (value: String) -> Unit) = JBTextField(defaultValue).apply { +fun textField(defaultValue: String?, onUpdated: (value: String) -> Unit) = + JBTextField(defaultValue) + .withOnUpdatedListener(onUpdated) + +fun F.withOnUpdatedListener(onUpdated: (value: String) -> Unit) = apply { document.addDocumentListener(object : DocumentListener { override fun insertUpdate(e: DocumentEvent?) = onUpdated(this@apply.text) override fun removeUpdate(e: DocumentEvent?) = onUpdated(this@apply.text)