blob: baf027b594da75fbb38c47b7256cdfe6fa59e396 (
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
|
@file:Suppress("SameParameterValue")
package me.kyren223.harpoonforjb
import com.intellij.ide.plugins.PluginManagerCore
import com.intellij.openapi.editor.LogicalPosition
import com.intellij.openapi.extensions.PluginId
import com.intellij.openapi.ui.DialogWrapper
import com.intellij.ui.EditorTextField
import com.maddyhome.idea.vim.KeyHandler
import com.maddyhome.idea.vim.api.ExecutionContext
import com.maddyhome.idea.vim.api.VimEditor
import com.maddyhome.idea.vim.api.injector
import com.maddyhome.idea.vim.newapi.vim
import java.awt.event.FocusEvent
import java.awt.event.FocusListener
import javax.swing.JComponent
class HarpoonQuickMenu(private val content: String) : DialogWrapper(true) {
private lateinit var editorTextField: EditorTextField
init {
val settings = AppSettingsState.instance
this.title = "Harpoon Quick Menu"
setSize(settings.harpoonWidth, settings.harpoonHeight)
super.init()
}
override fun createCenterPanel(): JComponent {
println("Content: \n$content")
val settings = AppSettingsState.instance
editorTextField = EditorTextField(this.content)
editorTextField.setOneLineMode(false)
editorTextField.addSettingsProvider {
it.setFontSize(settings.harpoonFontSize)
it.isInsertMode = true
it.caretModel.moveToLogicalPosition(LogicalPosition(0, 0))
it.settings.isLineNumbersShown = true
}
editorTextField.addFocusListener(object : FocusListener {
override fun focusGained(e: FocusEvent?) {
val editor = editorTextField.editor!!.vim
val context = injector.executionContextManager.onEditor(editor, null)
simulateKeyPress("<ESC>", editor, context)
}
override fun focusLost(e: FocusEvent?) { /* Do nothing */ }
})
return editorTextField
}
private fun simulateKeyPress(key: String, editor: VimEditor, context: ExecutionContext.Editor) {
KeyHandler.getInstance().handleKey(editor, injector.parser.parseKeys(key)[0], context)
}
override fun getPreferredFocusedComponent(): JComponent? {
return this.editorTextField
}
fun select() {
if (this.editorTextField.editor == null) return
HarpoonState.quickMenuContent = this.editorTextField.text
HarpoonState.quickMenuSelectedIndex = this.editorTextField.editor!!.caretModel.logicalPosition.line
doOKAction()
}
override fun createSouthPanel(): JComponent? {
return null
}
}
|