Allow multiple filename templates

This commit is contained in:
Matthias Gugel 2020-12-13 13:51:36 +01:00
parent a9f1d0d0a1
commit 91090a14fd
5 changed files with 53 additions and 33 deletions

View File

@ -24,14 +24,17 @@ class InitializeFilenameTemplateActivity : StartupActivity {
actionManager.unregisterAction(it) actionManager.unregisterAction(it)
} }
val anchorId = "NewFile" var anchorId = "NewFile"
val action = CreateFileWithFilenameTemplateAction( settings.filenameTemplates.forEach {
settings.filenameTemplate.text, val action = CreateFileWithFilenameTemplateAction(
settings.filenameTemplate.description, it.text,
settings.filenameTemplate.template it.description,
) it.template
val actionId = "FilenameTemplate.${settings.filenameTemplate.text}" )
actionManager.registerAction(actionId, action) val actionId = "FilenameTemplate.${it.text}"
newGroup.addAction(action, Constraints(Anchor.AFTER, anchorId)) actionManager.registerAction(actionId, action)
newGroup.addAction(action, Constraints(Anchor.AFTER, anchorId))
anchorId = actionId
}
} }
} }

View File

@ -8,7 +8,14 @@ import javax.swing.JComponent
class FilenameTemplateConfigurable : Configurable { 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) @Nls(capitalization = Nls.Capitalization.Title)
override fun getDisplayName(): String { override fun getDisplayName(): String {
@ -21,25 +28,37 @@ class FilenameTemplateConfigurable : Configurable {
override fun isModified(): Boolean { override fun isModified(): Boolean {
val settings: FilenameTemplateSettingsState = FilenameTemplateSettingsState.instance val settings: FilenameTemplateSettingsState = FilenameTemplateSettingsState.instance
return component.filenameTemplateTable.getValueAt(0, 0) != settings.filenameTemplate.text ||
component.filenameTemplateTable.getValueAt(0, 1) != settings.filenameTemplate.description || return settings.filenameTemplates.withIndex().any {
component.filenameTemplateTable.getValueAt(0, 2) != settings.filenameTemplate.template 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) @Throws(ConfigurationException::class)
override fun apply() { override fun apply() {
val settings: FilenameTemplateSettingsState = FilenameTemplateSettingsState.instance val settings: FilenameTemplateSettingsState = FilenameTemplateSettingsState.instance
settings.filenameTemplate.text = component.filenameTemplateTable.getValueAt(0, 0) as String settings.filenameTemplates.clear()
settings.filenameTemplate.description = component.filenameTemplateTable.getValueAt(0, 1) as String settings.filenameTemplates.addAll(component.filenameTemplates.map {
settings.filenameTemplate.template = component.filenameTemplateTable.getValueAt(0, 2) as String FilenameTemplateModel(
it.text,
it.description,
it.template
)
})
InitializeFilenameTemplateActivity().initializeActions() InitializeFilenameTemplateActivity().initializeActions()
} }
override fun reset() { override fun reset() {
val settings: FilenameTemplateSettingsState = FilenameTemplateSettingsState.instance val settings: FilenameTemplateSettingsState = FilenameTemplateSettingsState.instance
component.filenameTemplateTable.setValueAt(settings.filenameTemplate.text, 0, 0) component.filenameTemplates.clear()
component.filenameTemplateTable.setValueAt(settings.filenameTemplate.description, 0, 1) component.filenameTemplates.addAll(settings.filenameTemplates.map {
component.filenameTemplateTable.setValueAt(settings.filenameTemplate.template, 0, 2) FilenameTemplateModel(
it.text,
it.description,
it.template
)
})
} }
} }

View File

@ -5,14 +5,12 @@ import com.intellij.ui.layout.panel
import com.intellij.ui.table.JBTable import com.intellij.ui.table.JBTable
import javax.swing.JPanel import javax.swing.JPanel
class FilenameTemplateSettingsComponent { class FilenameTemplateSettingsComponent(val filenameTemplates: ArrayList<FilenameTemplateModel>) {
val panel: JPanel val panel: JPanel
val filenameTemplateTable: JBTable val filenameTemplateTable: JBTable
init { init {
val settings: FilenameTemplateSettingsState = FilenameTemplateSettingsState.instance val filenameTemplateTableModel = FilenameTemplateTableModel(filenameTemplates)
val filenameTemplateTableModel = FilenameTemplateTableModel(settings.filenameTemplate.copy())
filenameTemplateTable = JBTable(filenameTemplateTableModel) filenameTemplateTable = JBTable(filenameTemplateTableModel)
filenameTemplateTable.isStriped = true filenameTemplateTable.isStriped = true
filenameTemplateTable.autoCreateRowSorter = false filenameTemplateTable.autoCreateRowSorter = false

View File

@ -11,7 +11,7 @@ import com.intellij.util.xmlb.XmlSerializerUtil
storages = [Storage("FilenameTemplateSettings.xml")] storages = [Storage("FilenameTemplateSettings.xml")]
) )
class FilenameTemplateSettingsState : PersistentStateComponent<FilenameTemplateSettingsState> { class FilenameTemplateSettingsState : PersistentStateComponent<FilenameTemplateSettingsState> {
var filenameTemplate: FilenameTemplateModel = FilenameTemplateModel("", "", "") var filenameTemplates: ArrayList<FilenameTemplateModel> = ArrayList()
override fun getState(): FilenameTemplateSettingsState { override fun getState(): FilenameTemplateSettingsState {
return this return this

View File

@ -2,27 +2,27 @@ package de.idetools.filename_template.settings
import javax.swing.table.AbstractTableModel import javax.swing.table.AbstractTableModel
class FilenameTemplateTableModel(private val data: FilenameTemplateModel) : AbstractTableModel() { class FilenameTemplateTableModel(val filenameTemplates: List<FilenameTemplateModel>) : AbstractTableModel() {
private val header: List<String> = listOf("Text", "Description", "Template") private val header: List<String> = listOf("Text", "Description", "Template")
override fun getRowCount(): Int = 1 override fun getRowCount(): Int = filenameTemplates.size
override fun getColumnCount(): Int = header.size override fun getColumnCount(): Int = header.size
override fun getValueAt(row: Int, column: Int): Any { override fun getValueAt(row: Int, column: Int): Any {
return when (column) { return when (column) {
0 -> data.text 0 -> filenameTemplates[row].text
1 -> data.description 1 -> filenameTemplates[row].description
2 -> data.template 2 -> filenameTemplates[row].template
else -> throw ArrayIndexOutOfBoundsException() else -> throw ArrayIndexOutOfBoundsException()
} }
} }
override fun setValueAt(value: Any?, row: Int, column: Int) { override fun setValueAt(value: Any?, row: Int, column: Int) {
when (column) { when (column) {
0 -> data.text = value as String 0 -> filenameTemplates[row].text = value as String
1 -> data.description = value as String 1 -> filenameTemplates[row].description = value as String
2 -> data.template = value as String 2 -> filenameTemplates[row].template = value as String
else -> throw ArrayIndexOutOfBoundsException() else -> throw ArrayIndexOutOfBoundsException()
} }
} }