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)
}
val anchorId = "NewFile"
var anchorId = "NewFile"
settings.filenameTemplates.forEach {
val action = CreateFileWithFilenameTemplateAction(
settings.filenameTemplate.text,
settings.filenameTemplate.description,
settings.filenameTemplate.template
it.text,
it.description,
it.template
)
val actionId = "FilenameTemplate.${settings.filenameTemplate.text}"
val actionId = "FilenameTemplate.${it.text}"
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 {
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
)
})
}
}

View File

@ -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<FilenameTemplateModel>) {
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

View File

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

View File

@ -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<FilenameTemplateModel>) : AbstractTableModel() {
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 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()
}
}