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 bf7474f..6435468 100644 --- a/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateSettingsComponent.kt +++ b/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateSettingsComponent.kt @@ -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) { - 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 } } 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 8a156f3..bf40f49 100644 --- a/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateTableModel.kt +++ b/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateTableModel.kt @@ -1,8 +1,10 @@ package de.idetools.filename_template.settings +import java.util.* import javax.swing.table.AbstractTableModel -class FilenameTemplateTableModel(val filenameTemplates: List) : AbstractTableModel() { +class FilenameTemplateTableModel(private val filenameTemplates: ArrayList) : + AbstractTableModel() { private val header: List = listOf("Text", "Description", "Template") override fun getRowCount(): Int = filenameTemplates.size @@ -32,4 +34,17 @@ class FilenameTemplateTableModel(val filenameTemplates: List = 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() + } }