summaryrefslogtreecommitdiff
path: root/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonQuickMenu.kt
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
    }
}