How to implement keyboard shortcut modes in a complex, paneled application?
My application is a fairly complex desktop app (for Windows) and looks like this:
(other than the image obfuscation and the numbered bullets, which I added as annotations just for this question).
So there are 4 main panels, each of which is dedicated to one aspect of the task. Each of the panels has shortcuts relevant to what that task is. But in the bottom right panel, things get complex, because there are two different tasks you need to perform do in that window.
One of them (indicated by the 4 bullet), is to edit the text. But we also have (bullet 5) these pushpins that show something else that you have to do, and I'd like shortcuts to do things like:
- jump to the previous one
- jump to the next one
- delete the current one
- move the edit caret to the position of the current one
Thinking up distinct shortcuts for all of these is getting cumbersome AND it would be confusing to have arbitrary keystrokes like Ctrl+Shift+H for Go to Previous Pin
and Ctrl+Shift+J for Go to Next Pin
.
So I figured: have a mode just for working with pins, and a keystroke for entering that mode, and within that mode, use much more natural keys like Left Arrow and Right Arrow. And then in other modes, like in panel 3, the arrow keys would also mean previous and next item in that list.
But what I'm not sure about is how panel focus should work with the modes.
A given panel might have modes that may or may not overlap with functionality of other panels. Should a mode be restricted to when window focus is in a given panel that supports it, or should the mode be global, and if you invoke a mode that only makes sense in another panel, focus is switched to that panel? If a mode is used by more than one panel, which one would get focus?
Or is there an entirely different and better way to handle families of keyboard shortcuts?