From 26e7adbfae97a251ccc5a859f36e6ac2b9c97e24 Mon Sep 17 00:00:00 2001 From: Matthias Gugel Date: Sun, 13 Dec 2020 09:47:07 +0100 Subject: [PATCH] Show filename template configuration as table --- .../InitializeFilenameTemplateActivity.kt | 8 +++- .../settings/FilenameTemplateConfigurable.kt | 18 ++++---- .../settings/FilenameTemplateModel.kt | 7 +++ .../FilenameTemplateSettingsComponent.kt | 46 +++++++------------ .../settings/FilenameTemplateSettingsState.kt | 4 +- .../settings/FilenameTemplateTableModel.kt | 35 ++++++++++++++ 6 files changed, 74 insertions(+), 44 deletions(-) create mode 100644 src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateModel.kt create mode 100644 src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateTableModel.kt diff --git a/src/main/kotlin/de/idetools/filename_template/InitializeFilenameTemplateActivity.kt b/src/main/kotlin/de/idetools/filename_template/InitializeFilenameTemplateActivity.kt index c3ed913..f08603a 100644 --- a/src/main/kotlin/de/idetools/filename_template/InitializeFilenameTemplateActivity.kt +++ b/src/main/kotlin/de/idetools/filename_template/InitializeFilenameTemplateActivity.kt @@ -25,8 +25,12 @@ class InitializeFilenameTemplateActivity : StartupActivity { } val anchorId = "NewFile" - val action = CreateFileWithFilenameTemplateAction(settings.text, settings.description, settings.template) - val actionId = "FilenameTemplate.${settings.text}" + val action = CreateFileWithFilenameTemplateAction( + settings.filenameTemplate.text, + settings.filenameTemplate.description, + settings.filenameTemplate.template + ) + val actionId = "FilenameTemplate.${settings.filenameTemplate.text}" actionManager.registerAction(actionId, action) newGroup.addAction(action, Constraints(Anchor.AFTER, anchorId)) } diff --git a/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateConfigurable.kt b/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateConfigurable.kt index c7b4492..b2833b3 100644 --- a/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateConfigurable.kt +++ b/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateConfigurable.kt @@ -21,25 +21,25 @@ class FilenameTemplateConfigurable : Configurable { override fun isModified(): Boolean { val settings: FilenameTemplateSettingsState = FilenameTemplateSettingsState.instance - return component.text != settings.text || - component.description != settings.description || - component.template != settings.template + return component.filenameTemplateTable.getValueAt(0, 0) != settings.filenameTemplate.text || + component.filenameTemplateTable.getValueAt(0, 1) != settings.filenameTemplate.description || + component.filenameTemplateTable.getValueAt(0, 2) != settings.filenameTemplate.template } @Throws(ConfigurationException::class) override fun apply() { val settings: FilenameTemplateSettingsState = FilenameTemplateSettingsState.instance - settings.text = component.text - settings.description = component.description - settings.template = component.template + settings.filenameTemplate.text = component.filenameTemplateTable.getValueAt(0, 0) as String + settings.filenameTemplate.description = component.filenameTemplateTable.getValueAt(0, 1) as String + settings.filenameTemplate.template = component.filenameTemplateTable.getValueAt(0, 2) as String InitializeFilenameTemplateActivity().initializeActions() } override fun reset() { val settings: FilenameTemplateSettingsState = FilenameTemplateSettingsState.instance - component.text = settings.text - component.description = settings.description - component.template = settings.template + component.filenameTemplateTable.setValueAt(settings.filenameTemplate.text, 0, 0) + component.filenameTemplateTable.setValueAt(settings.filenameTemplate.description, 0, 1) + component.filenameTemplateTable.setValueAt(settings.filenameTemplate.template, 0, 2) } } diff --git a/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateModel.kt b/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateModel.kt new file mode 100644 index 0000000..02c9dfd --- /dev/null +++ b/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateModel.kt @@ -0,0 +1,7 @@ +package de.idetools.filename_template.settings + +data class FilenameTemplateModel( + var text: String, + var description: String, + var template: String +) diff --git a/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateSettingsComponent.kt b/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateSettingsComponent.kt index 12f08f5..4f2d721 100644 --- a/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateSettingsComponent.kt +++ b/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateSettingsComponent.kt @@ -1,40 +1,26 @@ package de.idetools.filename_template.settings -import com.intellij.ui.components.JBLabel -import com.intellij.ui.components.JBTextField -import com.intellij.util.ui.FormBuilder +import com.intellij.ui.components.JBScrollPane +import com.intellij.ui.layout.panel +import com.intellij.ui.table.JBTable import javax.swing.JPanel class FilenameTemplateSettingsComponent { val panel: JPanel - private val textField: JBTextField = JBTextField() - private val descriptionField: JBTextField = JBTextField() - private val templateField: JBTextField = JBTextField() - - var text: String - get() = textField.text - set(value) { - textField.text = value - } - - var description: String - get() = descriptionField.text - set(value) { - descriptionField.text = value - } - - var template: String - get() = templateField.text - set(value) { - templateField.text = value - } + val filenameTemplateTable: JBTable init { - panel = FormBuilder.createFormBuilder() - .addLabeledComponent(JBLabel("Text"), textField, 1, false) - .addLabeledComponent(JBLabel("Description"), descriptionField, 1, false) - .addLabeledComponent(JBLabel("Template"), templateField, 1, false) - .addComponentFillVertically(JPanel(), 0) - .panel + val settings: FilenameTemplateSettingsState = FilenameTemplateSettingsState.instance + + val filenameTemplateTableModel = FilenameTemplateTableModel(settings.filenameTemplate.copy()) + filenameTemplateTable = JBTable(filenameTemplateTableModel) + filenameTemplateTable.isStriped = true + filenameTemplateTable.autoCreateRowSorter = false + val filenameTemplateTableScrollPane = JBScrollPane(filenameTemplateTable) + panel = panel { + row { + filenameTemplateTableScrollPane() + } + } } } diff --git a/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateSettingsState.kt b/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateSettingsState.kt index 3c31a9d..6fcea74 100644 --- a/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateSettingsState.kt +++ b/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateSettingsState.kt @@ -11,9 +11,7 @@ import com.intellij.util.xmlb.XmlSerializerUtil storages = [Storage("FilenameTemplateSettings.xml")] ) class FilenameTemplateSettingsState : PersistentStateComponent { - var text = "" - var description = "" - var template = "" + var filenameTemplate: FilenameTemplateModel = FilenameTemplateModel("", "", "") override fun getState(): FilenameTemplateSettingsState { return this diff --git a/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateTableModel.kt b/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateTableModel.kt new file mode 100644 index 0000000..046fee3 --- /dev/null +++ b/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateTableModel.kt @@ -0,0 +1,35 @@ +package de.idetools.filename_template.settings + +import javax.swing.table.AbstractTableModel + +class FilenameTemplateTableModel(private val data: FilenameTemplateModel) : AbstractTableModel() { + private val header: List = listOf("Text", "Description", "Template") + + override fun getRowCount(): Int = 1 + + override fun getColumnCount(): Int = header.size + + override fun getValueAt(row: Int, column: Int): Any { + return when (column) { + 0 -> data.text + 1 -> data.description + 2 -> data.template + else -> throw ArrayIndexOutOfBoundsException() + } + } + + override fun setValueAt(value: Any?, row: Int, column: Int) { + when (column) { + 0 -> data.text = value as String + 1 -> data.description = value as String + 2 -> data.template = value as String + else -> throw ArrayIndexOutOfBoundsException() + } + } + + override fun getColumnName(column: Int): String = header[column] + + override fun getColumnClass(column: Int): Class<*> = getValueAt(0, column)::class.java + + override fun isCellEditable(row: Int, column: Int): Boolean = true +}