Merge branch 'idea-191' into idea-183

This commit is contained in:
Matthias Gugel 2021-08-07 09:37:52 +02:00
commit 0e67234d2d
6 changed files with 95 additions and 2 deletions

View File

@ -23,6 +23,13 @@ intellij {
} }
tasks.getByName<org.jetbrains.intellij.tasks.PatchPluginXmlTask>("patchPluginXml") { tasks.getByName<org.jetbrains.intellij.tasks.PatchPluginXmlTask>("patchPluginXml") {
changeNotes(""" changeNotes("""
<h3>[1.2]</h3>
<ul>
<li>Simplify template configuration with placeholder auto completion</li>
<li>New templates are active by default</li>
</ul>
<h3>[1.1]</h3> <h3>[1.1]</h3>
<ul> <ul>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 72 KiB

View File

@ -1,4 +1,4 @@
kotlin.code.style=official kotlin.code.style=official
pluginVersion = 1.1.0-183 pluginVersion = 1.2.0-183
platformVersion = 2018.3 platformVersion = 2018.3

View File

@ -1,7 +1,7 @@
package de.idetools.filename_template.settings package de.idetools.filename_template.settings
data class FilenameTemplateModel( data class FilenameTemplateModel(
var isActive: Boolean = false, var isActive: Boolean = true,
var name: String = "", var name: String = "",
var description: String = "", var description: String = "",
var template: String = "" var template: String = ""

View File

@ -10,6 +10,7 @@ import com.intellij.ui.table.JBTable
import java.awt.BorderLayout import java.awt.BorderLayout
import java.awt.FlowLayout import java.awt.FlowLayout
import javax.swing.JPanel import javax.swing.JPanel
import javax.swing.table.TableColumn
class FilenameTemplateSettingsComponent(val filenameTemplates: ArrayList<FilenameTemplateModel>) { class FilenameTemplateSettingsComponent(val filenameTemplates: ArrayList<FilenameTemplateModel>) {
private var filenameTemplateTableModel: FilenameTemplateTableModel = FilenameTemplateTableModel(filenameTemplates) private var filenameTemplateTableModel: FilenameTemplateTableModel = FilenameTemplateTableModel(filenameTemplates)
@ -21,12 +22,29 @@ class FilenameTemplateSettingsComponent(val filenameTemplates: ArrayList<Filenam
filenameTemplateTable = JBTable(filenameTemplateTableModel) filenameTemplateTable = JBTable(filenameTemplateTableModel)
filenameTemplateTable.autoCreateRowSorter = false filenameTemplateTable.autoCreateRowSorter = false
val activeColumn = filenameTemplateTable.columnModel.getColumn(0)
activeColumn.resizable = false
activeColumn.maxWidth = determineRequiredWidth(activeColumn)
val templateColumn = filenameTemplateTable.columnModel.getColumn(3)
templateColumn.cellEditor = PlaceholderCompletionCellEditor()
val filenameTemplateTableScrollPane = JBScrollPane(filenameTemplateTable) val filenameTemplateTableScrollPane = JBScrollPane(filenameTemplateTable)
panel.add(filenameTemplateTableScrollPane, BorderLayout.CENTER) panel.add(filenameTemplateTableScrollPane, BorderLayout.CENTER)
panel.add(createToolbar(filenameTemplateTable), BorderLayout.EAST) panel.add(createToolbar(filenameTemplateTable), BorderLayout.EAST)
} }
private fun determineRequiredWidth(column: TableColumn): Int =
filenameTemplateTable.tableHeader.defaultRenderer.getTableCellRendererComponent(
filenameTemplateTable,
column.headerValue,
false,
false,
0,
0
).preferredSize.width + 8
private fun createToolbar(table: JBTable): JPanel { private fun createToolbar(table: JBTable): JPanel {
val actionGroup = DefaultActionGroup() val actionGroup = DefaultActionGroup()
actionGroup.add(object : AnAction("Add", "Add new filename template", AllIcons.General.Add) { actionGroup.add(object : AnAction("Add", "Add new filename template", AllIcons.General.Add) {

View File

@ -0,0 +1,68 @@
package de.idetools.filename_template.settings
import com.intellij.codeInsight.completion.CompletionResultSet
import com.intellij.codeInsight.completion.InsertHandler
import com.intellij.codeInsight.completion.InsertionContext
import com.intellij.codeInsight.lookup.LookupElement
import com.intellij.codeInsight.lookup.LookupElementBuilder
import com.intellij.openapi.project.ProjectManager
import com.intellij.util.TextFieldCompletionProviderDumbAware
import com.intellij.util.textCompletion.TextFieldWithCompletion
import java.awt.Component
import javax.swing.AbstractCellEditor
import javax.swing.JTable
import javax.swing.table.TableCellEditor
internal class PlaceholderCompletionCellEditor : AbstractCellEditor(), TableCellEditor {
private var component = TextFieldWithCompletion(
ProjectManager.getInstance().defaultProject,
PlaceholderCompletionProvider(),
"",
true,
true,
true
)
override fun getCellEditorValue(): Any {
return component.text
}
override fun getTableCellEditorComponent(
table: JTable,
value: Any,
isSelected: Boolean,
rowIndex: Int,
vColIndex: Int
): Component {
component.text = value as String
return component
}
class PlaceholderCompletionProvider : TextFieldCompletionProviderDumbAware(true) {
object PlaceholderInsertHandler : InsertHandler<LookupElement> {
override fun handleInsert(context: InsertionContext, lookupElement: LookupElement) {
val text = context.document.text
if (context.tailOffset < text.length && text[context.tailOffset] == '}') {
context.document.replaceString(context.tailOffset - 1, context.tailOffset + 1, "}")
}
if (0 < context.startOffset && text[context.startOffset - 1] == '{') {
context.document.replaceString(context.startOffset - 1, context.startOffset + 1, "{")
}
}
}
override fun getPrefix(currentTextPrefix: String): String {
if (-1 < currentTextPrefix.indexOf('{')) {
return currentTextPrefix.removeRange(0, currentTextPrefix.lastIndexOf('{'))
}
return currentTextPrefix
}
override fun addCompletionVariants(text: String, offset: Int, prefix: String, result: CompletionResultSet) {
listOf("|", "0", "DATE", "EPOCH", "HOST", "PROJECT", "USER").forEach {
result.addElement(LookupElementBuilder.create("{${it}}").withInsertHandler(PlaceholderInsertHandler))
}
}
}
}