diff options
Diffstat (limited to 'src/main/kotlin/me/kyren223/harpoonforjb')
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!!) + } } } |
