Provide toolbar to add and remove filename templates

This commit is contained in:
Matthias Gugel 2020-12-13 16:07:24 +01:00
parent 91090a14fd
commit a7724857fb
2 changed files with 48 additions and 10 deletions

View File

@ -1,24 +1,47 @@
package de.idetools.filename_template.settings
import com.intellij.ui.components.JBScrollPane
import com.intellij.ui.layout.panel
import com.intellij.icons.AllIcons
import com.intellij.openapi.actionSystem.ActionManager
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.DefaultActionGroup
import com.intellij.ui.table.JBTable
import java.awt.BorderLayout
import java.awt.FlowLayout
import javax.swing.JPanel
class FilenameTemplateSettingsComponent(val filenameTemplates: ArrayList<FilenameTemplateModel>) {
val panel: JPanel
private var filenameTemplateTableModel: FilenameTemplateTableModel = FilenameTemplateTableModel(filenameTemplates)
val panel: JPanel = JPanel()
val filenameTemplateTable: JBTable
init {
val filenameTemplateTableModel = FilenameTemplateTableModel(filenameTemplates)
panel.layout = BorderLayout()
filenameTemplateTable = JBTable(filenameTemplateTableModel)
filenameTemplateTable.isStriped = true
filenameTemplateTable.autoCreateRowSorter = false
val filenameTemplateTableScrollPane = JBScrollPane(filenameTemplateTable)
panel = panel {
row {
filenameTemplateTableScrollPane()
}
}
panel.add(filenameTemplateTable, BorderLayout.CENTER)
panel.add(createToolbar(filenameTemplateTable), BorderLayout.EAST)
}
private fun createToolbar(table: JBTable): JPanel {
val panel = JPanel()
panel.layout = FlowLayout(FlowLayout.LEFT)
val actionGroup = DefaultActionGroup()
actionGroup.add(object : AnAction("Add", "Add new filename template", AllIcons.General.Add) {
override fun actionPerformed(e: AnActionEvent) {
filenameTemplateTableModel.addRow()
}
})
actionGroup.add(object : AnAction("Remove", "Remove selected filename templates", AllIcons.General.Remove) {
override fun actionPerformed(e: AnActionEvent) {
filenameTemplateTableModel.removeRows(table.selectedRows)
}
})
val toolbar = ActionManager.getInstance().createActionToolbar("MyToolbar", actionGroup, false)
panel.add(toolbar.component)
return panel
}
}

View File

@ -1,8 +1,10 @@
package de.idetools.filename_template.settings
import java.util.*
import javax.swing.table.AbstractTableModel
class FilenameTemplateTableModel(val filenameTemplates: List<FilenameTemplateModel>) : AbstractTableModel() {
class FilenameTemplateTableModel(private val filenameTemplates: ArrayList<FilenameTemplateModel>) :
AbstractTableModel() {
private val header: List<String> = listOf("Text", "Description", "Template")
override fun getRowCount(): Int = filenameTemplates.size
@ -32,4 +34,17 @@ class FilenameTemplateTableModel(val filenameTemplates: List<FilenameTemplateMod
override fun getColumnClass(column: Int): Class<*> = getValueAt(0, column)::class.java
override fun isCellEditable(row: Int, column: Int): Boolean = true
fun addRow() {
filenameTemplates.add(FilenameTemplateModel())
fireTableDataChanged()
}
fun removeRows(selectedRows: IntArray) {
Arrays.sort(selectedRows)
for (i in selectedRows.indices.reversed()) {
filenameTemplates.removeAt(selectedRows[i])
}
fireTableDataChanged()
}
}