Merge branch 'idea-191' into idea-183
This commit is contained in:
commit
0e67234d2d
|
|
@ -23,6 +23,13 @@ intellij {
|
|||
}
|
||||
tasks.getByName<org.jetbrains.intellij.tasks.PatchPluginXmlTask>("patchPluginXml") {
|
||||
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>
|
||||
|
||||
<ul>
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 72 KiB |
|
|
@ -1,4 +1,4 @@
|
|||
kotlin.code.style=official
|
||||
|
||||
pluginVersion = 1.1.0-183
|
||||
pluginVersion = 1.2.0-183
|
||||
platformVersion = 2018.3
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package de.idetools.filename_template.settings
|
||||
|
||||
data class FilenameTemplateModel(
|
||||
var isActive: Boolean = false,
|
||||
var isActive: Boolean = true,
|
||||
var name: String = "",
|
||||
var description: String = "",
|
||||
var template: String = ""
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import com.intellij.ui.table.JBTable
|
|||
import java.awt.BorderLayout
|
||||
import java.awt.FlowLayout
|
||||
import javax.swing.JPanel
|
||||
import javax.swing.table.TableColumn
|
||||
|
||||
class FilenameTemplateSettingsComponent(val filenameTemplates: ArrayList<FilenameTemplateModel>) {
|
||||
private var filenameTemplateTableModel: FilenameTemplateTableModel = FilenameTemplateTableModel(filenameTemplates)
|
||||
|
|
@ -21,12 +22,29 @@ class FilenameTemplateSettingsComponent(val filenameTemplates: ArrayList<Filenam
|
|||
|
||||
filenameTemplateTable = JBTable(filenameTemplateTableModel)
|
||||
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)
|
||||
|
||||
panel.add(filenameTemplateTableScrollPane, BorderLayout.CENTER)
|
||||
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 {
|
||||
val actionGroup = DefaultActionGroup()
|
||||
actionGroup.add(object : AnAction("Add", "Add new filename template", AllIcons.General.Add) {
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user