summaryrefslogtreecommitdiff
path: root/src/main/kotlin/me/kyren223/trident/TridentQuickMenu.kt
diff options
context:
space:
mode:
authorKyren223 <ulmliad223@gmail.com>2024-02-22 22:34:10 +0200
committerKyren223 <ulmliad223@gmail.com>2024-02-22 22:34:10 +0200
commit02b1533ff4002f1015b9c26cf69256d821ddb6b1 (patch)
treea53ba1aed8abd703eb6c47164f1b5a553d3b09c0 /src/main/kotlin/me/kyren223/trident/TridentQuickMenu.kt
parent883fd7f58b2ef0254cb3c3fa79cc24f6dcdf9efd (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.kt78
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
+ }
+}