From f5462d7b4b50fe05b98cee3274c26a9b9f52dd93 Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Tue, 13 Feb 2024 16:41:48 +0200 Subject: Registered actions, implemented saving/loading functionality, added and tested append functionality and action --- .../kyren223/harpoonforjb/HarpoonAppendAction.kt | 15 +++++ .../kyren223/harpoonforjb/HarpoonSelectAction.kt | 29 +++++++++ .../me/kyren223/harpoonforjb/HarpoonSetAction.kt | 19 ++++++ .../me/kyren223/harpoonforjb/HarpoonState.kt | 69 ++++++++++++++++++++++ .../harpoonforjb/HarpoonToggleQuickMenuAction.kt | 10 ++++ src/main/resources/META-INF/plugin.xml | 56 ++++++++++++++++++ 6 files changed, 198 insertions(+) create mode 100644 src/main/kotlin/me/kyren223/harpoonforjb/HarpoonAppendAction.kt create mode 100644 src/main/kotlin/me/kyren223/harpoonforjb/HarpoonSelectAction.kt create mode 100644 src/main/kotlin/me/kyren223/harpoonforjb/HarpoonSetAction.kt create mode 100644 src/main/kotlin/me/kyren223/harpoonforjb/HarpoonState.kt create mode 100644 src/main/kotlin/me/kyren223/harpoonforjb/HarpoonToggleQuickMenuAction.kt (limited to 'src/main') diff --git a/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonAppendAction.kt b/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonAppendAction.kt new file mode 100644 index 0000000..724f6c8 --- /dev/null +++ b/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonAppendAction.kt @@ -0,0 +1,15 @@ +package me.kyren223.harpoonforjb + +import com.intellij.openapi.actionSystem.AnAction +import com.intellij.openapi.actionSystem.AnActionEvent +import com.intellij.openapi.actionSystem.PlatformDataKeys +import com.intellij.openapi.project.Project +import com.intellij.openapi.vfs.VirtualFile + +class HarpoonAppendAction : AnAction() { + override fun actionPerformed(e: AnActionEvent) { + val project: Project = e.project ?: return + val file: VirtualFile = e.getData(PlatformDataKeys.VIRTUAL_FILE) ?: return + HarpoonState.appendFile(project, file) + } +} diff --git a/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonSelectAction.kt b/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonSelectAction.kt new file mode 100644 index 0000000..d63b6f7 --- /dev/null +++ b/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonSelectAction.kt @@ -0,0 +1,29 @@ +package me.kyren223.harpoonforjb + +import com.intellij.openapi.actionSystem.AnAction +import com.intellij.openapi.actionSystem.AnActionEvent + +class HarpoonSelectAction : AnAction() { + override fun actionPerformed(e: AnActionEvent) { + val actionId = e.actionManager.getId(this) + if (actionId == NEXT) { + println("Next") + } else if (actionId.equals(PREV)) { + println("Previous") + } else { + val index = getIndex(actionId) + println("Goto $index") + } + } + + private fun getIndex(actionId: String): Int { + return actionId.substring("HarpoonGoto".length).toInt() + } + + companion object { + const val NEXT = "HarpoonSelectNext" + const val PREV = "HarpoonSelectPrev" + const val SELECT = "HarpoonSelect" + } +} + diff --git a/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonSetAction.kt b/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonSetAction.kt new file mode 100644 index 0000000..80d31bc --- /dev/null +++ b/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonSetAction.kt @@ -0,0 +1,19 @@ +package me.kyren223.harpoonforjb + +import com.intellij.openapi.actionSystem.AnAction +import com.intellij.openapi.actionSystem.AnActionEvent + +class HarpoonSetAction : AnAction() { + override fun actionPerformed(e: AnActionEvent) { + val actionId = e.actionManager.getId(this) + if (!actionId.startsWith("HarpoonSet")) { + return + } + val index = getIndex(actionId) + println("Set $index") + } + + private fun getIndex(actionId: String): Int { + return actionId.substring("HarpoonSet".length).toInt() + } +} \ No newline at end of file diff --git a/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonState.kt b/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonState.kt new file mode 100644 index 0000000..75db721 --- /dev/null +++ b/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonState.kt @@ -0,0 +1,69 @@ +package me.kyren223.harpoonforjb + +import com.intellij.ide.util.PropertiesComponent +import com.intellij.openapi.project.Project +import com.intellij.openapi.vfs.LocalFileSystem +import com.intellij.openapi.vfs.VirtualFile + +object HarpoonState { + private var previousIndex: Int? = null + private var currentIndex: Int? = null + private var nextIndex: Int? = null + + private var projectFiles: MutableMap> = mutableMapOf() + private val HARPOON_LIST_KEY = "HarpoonList" + + fun setFile(project: Project, index: Int, file: VirtualFile) { + if (index < 0) return + loadProject(project) + val files = projectFiles[project.name] + if (files!!.size <= index) return + files[index] = file + saveProject(project) + } + + fun appendFile(project: Project, file: VirtualFile) { + if (!file.isValid) return + loadProject(project) + val files = projectFiles[project.name] + files!!.add(file) + saveProject(project) + } + + fun selectFile(project: Project, index: Int): VirtualFile? { + if (index < 0) return null + loadProject(project) + val files = projectFiles[project.name] + if (files!!.size <= index) return null + return files[index] + } + + private fun loadProject(project: Project) { + if (project.name in projectFiles) return + val properties = PropertiesComponent.getInstance(project) + val list = properties.getList(HARPOON_LIST_KEY) + if (list == null) { + projectFiles[project.name] = mutableListOf() + return + } + val fs = LocalFileSystem.getInstance() + val files = list.stream() + .map { fs.findFileByPath(it) } + .toList() + .filterNotNull() + .filter { it.isValid } + .toMutableList() + projectFiles[project.name] = files + } + + private fun saveProject(project: Project) { + if (project.name !in projectFiles) return + val files = projectFiles[project.name] + val properties = PropertiesComponent.getInstance(project) + val stringList = files!!.stream() + .filter { it.isValid } + .map { it.path } + .toList() + properties.setList(HARPOON_LIST_KEY, stringList) + } +} \ 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 new file mode 100644 index 0000000..1a70ac9 --- /dev/null +++ b/src/main/kotlin/me/kyren223/harpoonforjb/HarpoonToggleQuickMenuAction.kt @@ -0,0 +1,10 @@ +package me.kyren223.harpoonforjb + +import com.intellij.openapi.actionSystem.AnAction +import com.intellij.openapi.actionSystem.AnActionEvent + +class HarpoonToggleQuickMenuAction : AnAction() { + override fun actionPerformed(e: AnActionEvent) { + TODO("Not yet implemented") + } +} diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 7469358..be94f48 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -38,4 +38,60 @@ displayName="HarpoonForJB Settings"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file -- cgit v1.3.1