diff --git a/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/actions/NextMenuItemAction.kt b/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/actions/NextMenuItemAction.kt index 13987c7..5f1e7e3 100644 --- a/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/actions/NextMenuItemAction.kt +++ b/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/actions/NextMenuItemAction.kt @@ -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) + } + } } diff --git a/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/actions/PrevMenuItemAction.kt b/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/actions/PrevMenuItemAction.kt index c8faf62..c685ac5 100644 --- a/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/actions/PrevMenuItemAction.kt +++ b/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/actions/PrevMenuItemAction.kt @@ -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) + } + } } diff --git a/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/actions/SelectMenuItemBaseAction.kt b/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/actions/SelectMenuItemBaseAction.kt index 4bc1245..9a99618 100644 --- a/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/actions/SelectMenuItemBaseAction.kt +++ b/src/main/kotlin/com/chylex/intellij/keyboardmaster/feature/actions/SelectMenuItemBaseAction.kt @@ -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) + } + } }