From 91090a14fd140492606bc0a80535379030968a27 Mon Sep 17 00:00:00 2001 From: Matthias Gugel Date: Sun, 13 Dec 2020 13:51:36 +0100 Subject: [PATCH] Allow multiple filename templates --- .../InitializeFilenameTemplateActivity.kt | 21 ++++++---- .../settings/FilenameTemplateConfigurable.kt | 41 ++++++++++++++----- .../FilenameTemplateSettingsComponent.kt | 6 +-- .../settings/FilenameTemplateSettingsState.kt | 2 +- .../settings/FilenameTemplateTableModel.kt | 16 ++++---- 5 files changed, 53 insertions(+), 33 deletions(-) diff --git a/src/main/kotlin/de/idetools/filename_template/InitializeFilenameTemplateActivity.kt b/src/main/kotlin/de/idetools/filename_template/InitializeFilenameTemplateActivity.kt index f08603a..0a515ed 100644 --- a/src/main/kotlin/de/idetools/filename_template/InitializeFilenameTemplateActivity.kt +++ b/src/main/kotlin/de/idetools/filename_template/InitializeFilenameTemplateActivity.kt @@ -24,14 +24,17 @@ class InitializeFilenameTemplateActivity : StartupActivity { actionManager.unregisterAction(it) } - val anchorId = "NewFile" - 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)) + var anchorId = "NewFile" + settings.filenameTemplates.forEach { + val action = CreateFileWithFilenameTemplateAction( + it.text, + it.description, + it.template + ) + val actionId = "FilenameTemplate.${it.text}" + actionManager.registerAction(actionId, action) + newGroup.addAction(action, Constraints(Anchor.AFTER, anchorId)) + anchorId = actionId + } } } 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 b2833b3..9a64cc1 100644 --- a/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateConfigurable.kt +++ b/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateConfigurable.kt @@ -8,7 +8,14 @@ import javax.swing.JComponent class FilenameTemplateConfigurable : Configurable { - private var component: FilenameTemplateSettingsComponent = FilenameTemplateSettingsComponent() + private var component: FilenameTemplateSettingsComponent + + init { + val settings: FilenameTemplateSettingsState = FilenameTemplateSettingsState.instance + component = FilenameTemplateSettingsComponent(ArrayList(settings.filenameTemplates.map { + FilenameTemplateModel(it.text, it.description, it.template) + })) + } @Nls(capitalization = Nls.Capitalization.Title) override fun getDisplayName(): String { @@ -21,25 +28,37 @@ class FilenameTemplateConfigurable : Configurable { override fun isModified(): Boolean { val settings: FilenameTemplateSettingsState = FilenameTemplateSettingsState.instance - 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 + + return settings.filenameTemplates.withIndex().any { + component.filenameTemplateTable.getValueAt(it.index, 0) != it.value.text + || component.filenameTemplateTable.getValueAt(it.index, 1) != it.value.description + || component.filenameTemplateTable.getValueAt(it.index, 2) != it.value.template + } } @Throws(ConfigurationException::class) override fun apply() { val settings: FilenameTemplateSettingsState = FilenameTemplateSettingsState.instance - 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 - + settings.filenameTemplates.clear() + settings.filenameTemplates.addAll(component.filenameTemplates.map { + FilenameTemplateModel( + it.text, + it.description, + it.template + ) + }) InitializeFilenameTemplateActivity().initializeActions() } override fun reset() { val settings: FilenameTemplateSettingsState = FilenameTemplateSettingsState.instance - component.filenameTemplateTable.setValueAt(settings.filenameTemplate.text, 0, 0) - component.filenameTemplateTable.setValueAt(settings.filenameTemplate.description, 0, 1) - component.filenameTemplateTable.setValueAt(settings.filenameTemplate.template, 0, 2) + component.filenameTemplates.clear() + component.filenameTemplates.addAll(settings.filenameTemplates.map { + FilenameTemplateModel( + it.text, + it.description, + it.template + ) + }) } } 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 4f2d721..bf7474f 100644 --- a/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateSettingsComponent.kt +++ b/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateSettingsComponent.kt @@ -5,14 +5,12 @@ import com.intellij.ui.layout.panel import com.intellij.ui.table.JBTable import javax.swing.JPanel -class FilenameTemplateSettingsComponent { +class FilenameTemplateSettingsComponent(val filenameTemplates: ArrayList) { val panel: JPanel val filenameTemplateTable: JBTable init { - val settings: FilenameTemplateSettingsState = FilenameTemplateSettingsState.instance - - val filenameTemplateTableModel = FilenameTemplateTableModel(settings.filenameTemplate.copy()) + val filenameTemplateTableModel = FilenameTemplateTableModel(filenameTemplates) filenameTemplateTable = JBTable(filenameTemplateTableModel) filenameTemplateTable.isStriped = true filenameTemplateTable.autoCreateRowSorter = false 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 6fcea74..2584fb0 100644 --- a/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateSettingsState.kt +++ b/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateSettingsState.kt @@ -11,7 +11,7 @@ import com.intellij.util.xmlb.XmlSerializerUtil storages = [Storage("FilenameTemplateSettings.xml")] ) class FilenameTemplateSettingsState : PersistentStateComponent { - var filenameTemplate: FilenameTemplateModel = FilenameTemplateModel("", "", "") + var filenameTemplates: ArrayList = ArrayList() 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 index 046fee3..8a156f3 100644 --- a/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateTableModel.kt +++ b/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateTableModel.kt @@ -2,27 +2,27 @@ package de.idetools.filename_template.settings import javax.swing.table.AbstractTableModel -class FilenameTemplateTableModel(private val data: FilenameTemplateModel) : AbstractTableModel() { +class FilenameTemplateTableModel(val filenameTemplates: List) : AbstractTableModel() { private val header: List = listOf("Text", "Description", "Template") - override fun getRowCount(): Int = 1 + override fun getRowCount(): Int = filenameTemplates.size 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 + 0 -> filenameTemplates[row].text + 1 -> filenameTemplates[row].description + 2 -> filenameTemplates[row].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 + 0 -> filenameTemplates[row].text = value as String + 1 -> filenameTemplates[row].description = value as String + 2 -> filenameTemplates[row].template = value as String else -> throw ArrayIndexOutOfBoundsException() } }