summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/kotlin/me/kyren223/harpoonforjb/HarpoonQuickMenu.kt57
-rw-r--r--src/main/kotlin/me/kyren223/harpoonforjb/HarpoonState.kt23
-rw-r--r--src/main/kotlin/me/kyren223/harpoonforjb/HarpoonToggleQuickMenuAction.kt4
3 files changed, 83 insertions, 1 deletions
diff --git a/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonQuickMenu.kt b/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonQuickMenu.kt
new file mode 100644
index 0000000..9740470
--- /dev/null
+++ b/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonQuickMenu.kt
@@ -0,0 +1,57 @@
+package me.kyren223.harpoonforjb
+
+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 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
+ }
+}
diff --git a/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonState.kt b/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonState.kt
index fcb20a5..73c82b2 100644
--- a/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonState.kt
+++ b/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonState.kt
@@ -1,6 +1,7 @@
package me.kyren223.harpoonforjb
import com.intellij.ide.util.PropertiesComponent
+import com.intellij.openapi.fileEditor.FileEditorManager
import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.LocalFileSystem
import com.intellij.openapi.vfs.VirtualFile
@@ -8,6 +9,8 @@ import com.intellij.openapi.vfs.VirtualFile
object HarpoonState {
private var projectFiles: MutableMap<String, MutableList<VirtualFile>> = mutableMapOf()
private const val HARPOON_LIST_KEY = "HarpoonList"
+ private var quickMenuSelectedIndex: Int? = null
+ private var quickMenuContent: String? = ""
fun setFile(project: Project, index: Int, file: VirtualFile) {
if (index < 0) return
@@ -74,4 +77,24 @@ object HarpoonState {
loadProject(project)
return projectFiles[project.name]!!.size
}
+
+ fun toggleQuickMenu(project: Project) {
+ loadProject(project)
+ val content = projectFiles[project.name]!!
+ .joinToString("\n") { it.path }
+ .replace(project.basePath!!, "...")
+ .trim()
+
+ val quickMenu = HarpoonQuickMenu(content)
+ val result = quickMenu.showAndGet()
+
+ if (content != quickMenuContent) {
+ // Update the content
+ // TODO: Update the content
+ }
+
+ if (!result || quickMenuSelectedIndex == null) return
+ val file = selectFile(project, quickMenuSelectedIndex!!) ?: return
+ FileEditorManager.getInstance(project).openFile(file, true)
+ }
} \ No newline at end of file
diff --git a/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonToggleQuickMenuAction.kt b/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonToggleQuickMenuAction.kt
index 1a70ac9..fbf00bd 100644
--- a/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonToggleQuickMenuAction.kt
+++ b/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonToggleQuickMenuAction.kt
@@ -5,6 +5,8 @@ import com.intellij.openapi.actionSystem.AnActionEvent
class HarpoonToggleQuickMenuAction : AnAction() {
override fun actionPerformed(e: AnActionEvent) {
- TODO("Not yet implemented")
+ if (e.project != null) {
+ HarpoonState.toggleQuickMenu(e.project!!)
+ }
}
}