Show filename template configuration as table

This commit is contained in:
Matthias Gugel 2020-12-13 09:47:07 +01:00
parent f0a683a6dc
commit 26e7adbfae
6 changed files with 74 additions and 44 deletions

View File

@ -25,8 +25,12 @@ class InitializeFilenameTemplateActivity : StartupActivity {
} }
val anchorId = "NewFile" val anchorId = "NewFile"
val action = CreateFileWithFilenameTemplateAction(settings.text, settings.description, settings.template) val action = CreateFileWithFilenameTemplateAction(
val actionId = "FilenameTemplate.${settings.text}" settings.filenameTemplate.text,
settings.filenameTemplate.description,
settings.filenameTemplate.template
)
val actionId = "FilenameTemplate.${settings.filenameTemplate.text}"
actionManager.registerAction(actionId, action) actionManager.registerAction(actionId, action)
newGroup.addAction(action, Constraints(Anchor.AFTER, anchorId)) newGroup.addAction(action, Constraints(Anchor.AFTER, anchorId))
} }

View File

@ -21,25 +21,25 @@ class FilenameTemplateConfigurable : Configurable {
override fun isModified(): Boolean { override fun isModified(): Boolean {
val settings: FilenameTemplateSettingsState = FilenameTemplateSettingsState.instance val settings: FilenameTemplateSettingsState = FilenameTemplateSettingsState.instance
return component.text != settings.text || return component.filenameTemplateTable.getValueAt(0, 0) != settings.filenameTemplate.text ||
component.description != settings.description || component.filenameTemplateTable.getValueAt(0, 1) != settings.filenameTemplate.description ||
component.template != settings.template component.filenameTemplateTable.getValueAt(0, 2) != settings.filenameTemplate.template
} }
@Throws(ConfigurationException::class) @Throws(ConfigurationException::class)
override fun apply() { override fun apply() {
val settings: FilenameTemplateSettingsState = FilenameTemplateSettingsState.instance val settings: FilenameTemplateSettingsState = FilenameTemplateSettingsState.instance
settings.text = component.text settings.filenameTemplate.text = component.filenameTemplateTable.getValueAt(0, 0) as String
settings.description = component.description settings.filenameTemplate.description = component.filenameTemplateTable.getValueAt(0, 1) as String
settings.template = component.template settings.filenameTemplate.template = component.filenameTemplateTable.getValueAt(0, 2) as String
InitializeFilenameTemplateActivity().initializeActions() InitializeFilenameTemplateActivity().initializeActions()
} }
override fun reset() { override fun reset() {
val settings: FilenameTemplateSettingsState = FilenameTemplateSettingsState.instance val settings: FilenameTemplateSettingsState = FilenameTemplateSettingsState.instance
component.text = settings.text component.filenameTemplateTable.setValueAt(settings.filenameTemplate.text, 0, 0)
component.description = settings.description component.filenameTemplateTable.setValueAt(settings.filenameTemplate.description, 0, 1)
component.template = settings.template component.filenameTemplateTable.setValueAt(settings.filenameTemplate.template, 0, 2)
} }
} }

View File

@ -0,0 +1,7 @@
package de.idetools.filename_template.settings
data class FilenameTemplateModel(
var text: String,
var description: String,
var template: String
)

View File

@ -1,40 +1,26 @@
package de.idetools.filename_template.settings package de.idetools.filename_template.settings
import com.intellij.ui.components.JBLabel import com.intellij.ui.components.JBScrollPane
import com.intellij.ui.components.JBTextField import com.intellij.ui.layout.panel
import com.intellij.util.ui.FormBuilder import com.intellij.ui.table.JBTable
import javax.swing.JPanel import javax.swing.JPanel
class FilenameTemplateSettingsComponent { class FilenameTemplateSettingsComponent {
val panel: JPanel val panel: JPanel
private val textField: JBTextField = JBTextField() val filenameTemplateTable: JBTable
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
}
init { init {
panel = FormBuilder.createFormBuilder() val settings: FilenameTemplateSettingsState = FilenameTemplateSettingsState.instance
.addLabeledComponent(JBLabel("Text"), textField, 1, false)
.addLabeledComponent(JBLabel("Description"), descriptionField, 1, false) val filenameTemplateTableModel = FilenameTemplateTableModel(settings.filenameTemplate.copy())
.addLabeledComponent(JBLabel("Template"), templateField, 1, false) filenameTemplateTable = JBTable(filenameTemplateTableModel)
.addComponentFillVertically(JPanel(), 0) filenameTemplateTable.isStriped = true
.panel filenameTemplateTable.autoCreateRowSorter = false
val filenameTemplateTableScrollPane = JBScrollPane(filenameTemplateTable)
panel = panel {
row {
filenameTemplateTableScrollPane()
}
}
} }
} }

View File

@ -11,9 +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 text = "" var filenameTemplate: FilenameTemplateModel = FilenameTemplateModel("", "", "")
var description = ""
var template = ""
override fun getState(): FilenameTemplateSettingsState { override fun getState(): FilenameTemplateSettingsState {
return this return this

View File

@ -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<String> = 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
}