Wizard: use built-in browse folder button for path component

This commit is contained in:
Ilya Kirillov
2020-03-13 16:14:46 +03:00
parent cbfe05efc8
commit 5e2c762501
2 changed files with 11 additions and 8 deletions
@@ -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(),
@@ -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 : JTextField> 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)