You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add an in-app Keyboard Shortcuts dialog listing all keyboard bindings available in the workout player, main window, and workout creator, accessible from the Help menu and via ? key.
Motivation
Keyboard shortcuts for space (pause), arrow keys (interval skip), +/- (difficulty), L (lap), and Esc (quit) exist but are undiscoverable. Users unaware of these shortcuts miss significant productivity gains during workouts.
Acceptance Criteria
A Keyboard Shortcuts action in the Help menu opens a non-modal dialog
The ? key opens the dialog from any context (main window, workout player, workout creator)
The dialog is organised into sections: Workout Player, Workout Creator, Main Window
Each row shows the key combination and its action description
All currently-implemented shortcuts are listed (at minimum: Space, →, ←, +, -, L, Esc, F11)
The dialog is generated from a central ShortcutRegistry data structure (single source of truth) rather than hard-coded UI text, ensuring the dialog and actual bindings stay in sync
Works on all platforms including WASM (no native menu bar required; accessible via toolbar button as fallback)
Unit test verifies that every shortcut in ShortcutRegistry maps to a real QShortcut or keyPressEvent handler
Summary
Add an in-app Keyboard Shortcuts dialog listing all keyboard bindings available in the workout player, main window, and workout creator, accessible from the Help menu and via
?key.Motivation
Keyboard shortcuts for space (pause), arrow keys (interval skip), +/- (difficulty), L (lap), and Esc (quit) exist but are undiscoverable. Users unaware of these shortcuts miss significant productivity gains during workouts.
Acceptance Criteria
?key opens the dialog from any context (main window, workout player, workout creator)ShortcutRegistrydata structure (single source of truth) rather than hard-coded UI text, ensuring the dialog and actual bindings stay in syncShortcutRegistrymaps to a realQShortcutorkeyPressEventhandler