Skip to content

Commit

Permalink
Initial skeleton of the key tip manager
Browse files Browse the repository at this point in the history
And handling of left/right arrows to change selected task

For #56
  • Loading branch information
kirill-grouchnikov committed Oct 30, 2023
1 parent d79f069 commit beaa3df
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,10 @@ object AuroraPopupManager {
return match != null
}

fun isShowingPopups(): Boolean {
return shownPath.isNotEmpty()
}

fun dump() {
println("Popups")
for (link in shownPath) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,16 @@ object KeyTipTracker {
}

internal fun getKeyTips(): List<KeyTipInfo> = keyTips

fun isShowingKeyTips(): Boolean = true

fun showPreviousChain() {}

fun hideAllKeyTips() {}

fun showRootKeyTipChain() {}

fun handleKeyPress(char: Char) {}
}

@Immutable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,7 @@ import org.pushingpixels.aurora.theming.utils.getColorSchemeFilter
import org.pushingpixels.aurora.window.WindowSizingConstants.DecoratedBorderThickness
import org.pushingpixels.aurora.window.ribbon.*
import java.awt.*
import java.awt.event.AWTEventListener
import java.awt.event.KeyEvent
import java.awt.event.MouseEvent
import java.awt.event.WindowEvent
import java.awt.event.*
import javax.swing.JFrame
import javax.swing.SwingUtilities
import kotlin.math.max
Expand Down Expand Up @@ -767,13 +764,60 @@ fun AuroraWindowScope.AuroraRibbonWindowContent(
)
}

val prevAltModif = remember(this, window) { mutableStateOf(false) }
val awtEventListener = remember(this, window) {
AWTEventListener { event ->
val src = event.source
if ((event is KeyEvent) && (event.id == KeyEvent.KEY_RELEASED)
&& (event.keyCode == KeyEvent.VK_ESCAPE)
) {
AuroraPopupManager.hideLastPopup()
if ((event is KeyEvent) && (event.id == KeyEvent.KEY_RELEASED)) {
val wasAltModif: Boolean = prevAltModif.value
prevAltModif.value = (event.modifiersEx == InputEvent.ALT_DOWN_MASK)
if (wasAltModif && event.keyCode == KeyEvent.VK_ALT) {
return@AWTEventListener
}

val keyChar: Char = event.keyChar
if (Character.isLetter(keyChar) || Character.isDigit(keyChar)) {
KeyTipTracker.handleKeyPress(keyChar)
}

if ((event.keyCode == KeyEvent.VK_ALT) || (event.getKeyCode() == KeyEvent.VK_F10)) {
if (event.modifiersEx != 0) {
return@AWTEventListener
}
val hadPopups: Boolean = AuroraPopupManager.isShowingPopups()
AuroraPopupManager.hidePopups(null)
if (hadPopups || KeyTipTracker.isShowingKeyTips()) {
KeyTipTracker.hideAllKeyTips()
} else {
KeyTipTracker.showRootKeyTipChain()
}
}
if (event.keyCode == KeyEvent.VK_ESCAPE) {
// Hide last shown popup
AuroraPopupManager.hideLastPopup()
// Dismiss currently shown key tip chain
if (KeyTipTracker.isShowingKeyTips()) {
KeyTipTracker.showPreviousChain()
}
}
if (KeyTipTracker.isShowingKeyTips()) {
// Traversal of ribbon tasks while keytips are showing
when (event.keyCode) {
KeyEvent.VK_LEFT -> {
val selectedIndex = ribbon.tasks.indexOfFirst { it == ribbon.getSelectedTask() }
if (selectedIndex > 0) {
ribbon.tasks[selectedIndex - 1].onClick.invoke()
}
}

KeyEvent.VK_RIGHT -> {
val selectedIndex = ribbon.tasks.indexOfFirst { it == ribbon.getSelectedTask() }
if ((selectedIndex >= 0) && (selectedIndex < (ribbon.tasks.size - 1))) {
ribbon.tasks[selectedIndex + 1].onClick.invoke()
}
}
}
}
}
if ((event is MouseEvent) && (event.id == MouseEvent.MOUSE_PRESSED) && (src is Component)) {
// This can be in our custom popup menu or in the top-level window
Expand Down

0 comments on commit beaa3df

Please sign in to comment.