summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorKyren223 <ulmliad223@gmail.com>2024-02-13 16:41:48 +0200
committerKyren223 <ulmliad223@gmail.com>2024-02-13 16:41:48 +0200
commitf5462d7b4b50fe05b98cee3274c26a9b9f52dd93 (patch)
tree9537a2083571c1d14b4141b04c7c24e912c11437 /src/main
parent6f6bd6a028f48a1685370049406986425f889a50 (diff)
Registered actions, implemented saving/loading functionality, added and tested append functionality and action
Diffstat (limited to 'src/main')
-rw-r--r--src/main/kotlin/me/kyren223/harpoonforjb/HarpoonAppendAction.kt15
-rw-r--r--src/main/kotlin/me/kyren223/harpoonforjb/HarpoonSelectAction.kt29
-rw-r--r--src/main/kotlin/me/kyren223/harpoonforjb/HarpoonSetAction.kt19
-rw-r--r--src/main/kotlin/me/kyren223/harpoonforjb/HarpoonState.kt69
-rw-r--r--src/main/kotlin/me/kyren223/harpoonforjb/HarpoonToggleQuickMenuAction.kt10
-rw-r--r--src/main/resources/META-INF/plugin.xml56
6 files changed, 198 insertions, 0 deletions
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<String, MutableList<VirtualFile>> = 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"/>
<applicationService serviceImplementation="me.kyren223.harpoonforjb.AppSettingsState"/>
</extensions>
+
+ <actions>
+ <group id="me.kyren223.harpoonforjb.mainGroup"
+ text="Harpoon" description="Harpoon"
+ popup="true">
+ </group>
+
+ <!-- Harpoon Select Buffer -->
+ <action id="HarpoonSelect1"
+ class="me.kyren223.harpoonforjb.HarpoonSelectAction"
+ text="Select Buffer 1">
+ <add-to-group group-id="me.kyren223.harpoonforjb.mainGroup"/>
+ </action>
+ <action id="HarpoonSelect2"
+ class="me.kyren223.harpoonforjb.HarpoonSelectAction"
+ text="Select Buffer 2">
+ <add-to-group group-id="me.kyren223.harpoonforjb.mainGroup"/>
+ </action>
+ <action id="HarpoonSelect3"
+ class="me.kyren223.harpoonforjb.HarpoonSelectAction"
+ text="Select Buffer 3">
+ <add-to-group group-id="me.kyren223.harpoonforjb.mainGroup"/>
+ </action>
+ <action id="HarpoonSelect4"
+ class="me.kyren223.harpoonforjb.HarpoonSelectAction"
+ text="Select Buffer 4">
+ <add-to-group group-id="me.kyren223.harpoonforjb.mainGroup"/>
+ </action>
+
+ <!-- Select Previous & Next Buffer -->
+ <action id="HarpoonSelectPrev"
+ class="me.kyren223.harpoonforjb.HarpoonSelectAction"
+ text="Select Previous Buffer">
+ <add-to-group group-id="me.kyren223.harpoonforjb.mainGroup"/>
+ </action>
+ <action id="HarpoonSelectNext"
+ class="me.kyren223.harpoonforjb.HarpoonSelectAction"
+ text="Select Next Buffer">
+ <add-to-group group-id="me.kyren223.harpoonforjb.mainGroup"/>
+ </action>
+
+ <!-- Append -->
+ <action id="HarpoonAppend"
+ class="me.kyren223.harpoonforjb.HarpoonAppendAction"
+ text="Append File">
+ <add-to-group group-id="me.kyren223.harpoonforjb.mainGroup"/>
+ </action>
+
+ <!-- UI Actions -->
+ <action id="HarpoonToggleQuickMenu"
+ class="me.kyren223.harpoonforjb.HarpoonToggleQuickMenuAction"
+ text="Toggle Quick Menu">
+ <add-to-group group-id="me.kyren223.harpoonforjb.mainGroup"/>
+ </action>
+
+ </actions>
</idea-plugin> \ No newline at end of file