diff options
| author | Kyren223 <ulmliad223@gmail.com> | 2024-02-22 22:34:10 +0200 |
|---|---|---|
| committer | Kyren223 <ulmliad223@gmail.com> | 2024-02-22 22:34:10 +0200 |
| commit | 02b1533ff4002f1015b9c26cf69256d821ddb6b1 (patch) | |
| tree | a53ba1aed8abd703eb6c47164f1b5a553d3b09c0 /src/main/kotlin/me/kyren223/trident/TridentQuickMenu.kt | |
| parent | 883fd7f58b2ef0254cb3c3fa79cc24f6dcdf9efd (diff) | |
Rebranded to "Trident"
Diffstat (limited to 'src/main/kotlin/me/kyren223/trident/TridentQuickMenu.kt')
| -rw-r--r-- | src/main/kotlin/me/kyren223/trident/TridentQuickMenu.kt | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/main/kotlin/me/kyren223/trident/TridentQuickMenu.kt b/src/main/kotlin/me/kyren223/trident/TridentQuickMenu.kt new file mode 100644 index 0000000..e7903e0 --- /dev/null +++ b/src/main/kotlin/me/kyren223/trident/TridentQuickMenu.kt @@ -0,0 +1,78 @@ +@file:Suppress("SameParameterValue") + +package me.kyren223.trident + +import com.intellij.openapi.editor.LogicalPosition +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 TridentQuickMenu(private val content: String) : DialogWrapper(true) { + private lateinit var editorTextField: EditorTextField + + init { + val settings = AppSettingsState.instance + this.title = "Trident Quick Menu" + setSize(settings.width, settings.height) + super.init() + } + + override fun createCenterPanel(): JComponent { + val settings = AppSettingsState.instance + editorTextField = EditorTextField(this.content) + editorTextField.setOneLineMode(false) + editorTextField.addSettingsProvider { + it.setFontSize(settings.fontSize) + 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 + TridentState.quickMenuSelectedIndex = this.editorTextField.editor!!.caretModel.logicalPosition.line + doOKAction() + } + + override fun doOKAction() { + TridentState.quickMenuContent = editorTextField.text + super.doOKAction() + } + + override fun doCancelAction() { + TridentState.quickMenuContent = editorTextField.text + super.doCancelAction() + } + + override fun createSouthPanel(): JComponent? { + return null + } +} |
