blob: a84b561ad604807efd6f72412ea2e050a8a6dcc4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
package me.kyren223.trident.ui
import com.intellij.openapi.editor.EditorSettings
import com.intellij.openapi.editor.LogicalPosition
import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.DialogWrapper
import com.intellij.ui.EditorTextField
import com.maddyhome.idea.vim.newapi.vim
import com.maddyhome.idea.vim.state.mode.Mode
import me.kyren223.trident.data.SettingsState
import me.kyren223.trident.utils.TridentMappings
import me.kyren223.trident.utils.setEditorMode
import java.awt.event.FocusEvent
import java.awt.event.FocusListener
import javax.swing.JComponent
class TridentMappingsMenu(private val content: String) : DialogWrapper(true) {
private lateinit var editor: EditorTextField
init {
val settings = SettingsState.instance
this.title = "Trident Mappings"
setSize(settings.width, settings.height)
super.init()
}
override fun createCenterPanel(): JComponent {
editor = EditorTextField(this.content)
editor.setOneLineMode(false)
editor.addSettingsProvider {
it.setFontSize(SettingsState.instance.fontSize)
it.isInsertMode = false
it.caretModel.moveToLogicalPosition(LogicalPosition(0, 0))
it.settings.isLineNumbersShown = true
it.settings.lineNumerationType = EditorSettings.LineNumerationType.ABSOLUTE
}
editor.addFocusListener(object : FocusListener {
override fun focusGained(e: FocusEvent?) {
val editor = editor.editor!!.vim
setEditorMode(editor, Mode.NORMAL())
}
override fun focusLost(e: FocusEvent?) { /* Do nothing */ }
})
return editor
}
override fun getPreferredFocusedComponent(): JComponent {
return this.editor
}
override fun doOKAction() {
save()
super.doOKAction()
}
override fun doCancelAction() {
save()
super.doCancelAction()
}
private fun save() {
val map = editor.text.split("\n")
.map { entry -> entry.split("=") }
.filter { entry -> entry.size == 2 }
.associate { it[0] to it[1] }
TridentMappings.set(editor.project, map)
}
override fun createSouthPanel(): JComponent? {
return null
}
companion object {
fun open(project: Project) {
val content = TridentMappings.get(project).entries
.joinToString("\n") { "${it.key}=${it.value}" }
val menu = TridentMappingsMenu(content)
menu.show()
}
}
}
|