1
0
mirror of https://github.com/chylex/IntelliJ-Keyboard-Master.git synced 2025-05-05 20:34:07 +02:00

Make shortcuts for next/previous menu item work with tree menus

This commit is contained in:
chylex 2021-11-26 22:36:32 +01:00
parent e409821bea
commit 8f3ef71e80
Signed by: chylex
GPG Key ID: 4DE42C8F19A80548
3 changed files with 36 additions and 0 deletions
src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/actions

View File

@ -1,9 +1,17 @@
package com.chylex.intellij.keyboardmaster.feature.actions
import javax.swing.JList
import javax.swing.JTree
class NextMenuItemAction : SelectMenuItemBaseAction() {
override fun updateSelection(list: JList<*>) {
setSelectedIndex(list, list.selectedIndex + 1)
}
override fun updateSelection(tree: JTree) {
val row = tree.selectionRows?.maxOrNull()
if (row != null) {
setSelectedIndex(tree, row + 1)
}
}
}

View File

@ -1,6 +1,7 @@
package com.chylex.intellij.keyboardmaster.feature.actions
import javax.swing.JList
import javax.swing.JTree
class PrevMenuItemAction : SelectMenuItemBaseAction() {
override fun updateSelection(list: JList<*>) {
@ -12,4 +13,11 @@ class PrevMenuItemAction : SelectMenuItemBaseAction() {
setSelectedIndex(list, index - 1)
}
}
override fun updateSelection(tree: JTree) {
val row = tree.selectionRows?.minOrNull()
if (row != null) {
setSelectedIndex(tree, row - 1)
}
}
}

View File

@ -9,6 +9,7 @@ import com.intellij.openapi.project.DumbAwareAction
import com.intellij.ui.ComponentUtil
import java.awt.KeyboardFocusManager
import javax.swing.JList
import javax.swing.JTree
abstract class SelectMenuItemBaseAction internal constructor(): DumbAwareAction() {
init {
@ -31,12 +32,22 @@ abstract class SelectMenuItemBaseAction internal constructor(): DumbAwareAction(
updateSelection(focused)
break
}
else if (focused is JTree) {
updateSelection(focused)
break
}
else if (focused is BigPopupUI) {
val list = ComponentUtil.findComponentsOfType(focused, JList::class.java).singleOrNull()
if (list != null) {
updateSelection(list)
break
}
val tree = ComponentUtil.findComponentsOfType(focused, JTree::class.java).singleOrNull()
if (tree != null) {
updateSelection(tree)
break
}
}
focused = focused.parent
@ -51,4 +62,13 @@ abstract class SelectMenuItemBaseAction internal constructor(): DumbAwareAction(
list.ensureIndexIsVisible(newIndex)
}
}
protected abstract fun updateSelection(tree: JTree)
protected fun setSelectedIndex(list: JTree, newIndex: Int) {
if (newIndex in 0 until list.rowCount) {
list.setSelectionRow(newIndex)
list.scrollRowToVisible(newIndex)
}
}
}