Wizard: use built-in browse folder button for path component
This commit is contained in:
+5
-3
@@ -4,8 +4,10 @@ import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory
|
|||||||
import com.intellij.openapi.ui.TextBrowseFolderListener
|
import com.intellij.openapi.ui.TextBrowseFolderListener
|
||||||
import com.intellij.openapi.ui.TextFieldWithBrowseButton
|
import com.intellij.openapi.ui.TextFieldWithBrowseButton
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.Context
|
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.core.entity.SettingValidator
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.textField
|
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.Path
|
||||||
import java.nio.file.Paths
|
import java.nio.file.Paths
|
||||||
import javax.swing.JComponent
|
import javax.swing.JComponent
|
||||||
@@ -22,9 +24,9 @@ class PathFieldComponent(
|
|||||||
validator,
|
validator,
|
||||||
onValueUpdate
|
onValueUpdate
|
||||||
) {
|
) {
|
||||||
override val uiComponent: TextFieldWithBrowseButton = TextFieldWithBrowseButton(
|
override val uiComponent: TextFieldWithBrowseButton = TextFieldWithBrowseButton().apply {
|
||||||
textField(initialValue?.toString().orEmpty()) { path -> fireValueUpdated(Paths.get(path.trim())) }
|
textField.text = initialValue?.toString().orEmpty()
|
||||||
).apply {
|
textField.withOnUpdatedListener { path -> fireValueUpdated(path.trim().asPath()) }
|
||||||
addBrowseFolderListener(
|
addBrowseFolderListener(
|
||||||
TextBrowseFolderListener(
|
TextBrowseFolderListener(
|
||||||
FileChooserDescriptorFactory.createSingleFolderDescriptor(),
|
FileChooserDescriptorFactory.createSingleFolderDescriptor(),
|
||||||
|
|||||||
+6
-5
@@ -27,10 +27,7 @@ import org.jetbrains.kotlin.tools.projectWizard.wizard.ui.UiConstants.GAP_BORDER
|
|||||||
import java.awt.*
|
import java.awt.*
|
||||||
import java.awt.event.MouseAdapter
|
import java.awt.event.MouseAdapter
|
||||||
import java.awt.event.MouseEvent
|
import java.awt.event.MouseEvent
|
||||||
import javax.swing.BorderFactory
|
import javax.swing.*
|
||||||
import javax.swing.Icon
|
|
||||||
import javax.swing.JComponent
|
|
||||||
import javax.swing.JPanel
|
|
||||||
import javax.swing.border.Border
|
import javax.swing.border.Border
|
||||||
import javax.swing.event.DocumentEvent
|
import javax.swing.event.DocumentEvent
|
||||||
import javax.swing.event.DocumentListener
|
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)
|
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 {
|
document.addDocumentListener(object : DocumentListener {
|
||||||
override fun insertUpdate(e: DocumentEvent?) = onUpdated(this@apply.text)
|
override fun insertUpdate(e: DocumentEvent?) = onUpdated(this@apply.text)
|
||||||
override fun removeUpdate(e: DocumentEvent?) = onUpdated(this@apply.text)
|
override fun removeUpdate(e: DocumentEvent?) = onUpdated(this@apply.text)
|
||||||
|
|||||||
Reference in New Issue
Block a user