#include <YShortcutManager.h>
Public Member Functions | |
YShortcutManager (YDialog *dialog) | |
virtual | ~YShortcutManager () |
void | checkShortcuts (bool autoResolve=true) |
int | conflictCount () |
void | resolveAllConflicts () |
YDialog * | dialog () |
Protected Member Functions | |
void | clearShortcutList () |
void | findShortcutWidgets () |
void | resolveConflict (YShortcut *shortcut) |
Protected Attributes | |
YDialog * | _dialog |
YShortcutList | _shortcutList |
int | _wanted [sizeof(char)<< 8] |
bool | _used [sizeof(char)<< 8] |
int | _conflictCount |
Private Attributes | |
bool | _did_check |
|
Constructor |
|
Destructor |
|
Checks the keyboard shortcuts of all children of this dialog ( not for sub-dialogs! ). Runs resolveAllConflicts() if 'autoResolve' is 'true'. |
|
Delete all members of the internal shortcut list, then empty the list. |
|
Returns the number of shortcut conflicts. Valid only after checkShortcuts() or resolveAllConflicts(). |
|
Returns the dialog this shortcut manager works on. |
|
Search all children of _dialog ( not those of any sub-dialogs! ) for child widgets that could accept a keyboard shortcut and add these to _shortcutList. |
|
Resolve shortcut conflicts. Requires checkShortcuts() to be called first. Note: This may or may not work. There is no general solution to that problem. This method tries its best, but you may end up with widgets that don't have any ( more ) shortcut. Why? Just picture the following ( admittedly pathologic ) situation: [& OK] [& OK] [& OK] This will result in something like this: [& OK] [O& K] [OK] I.e. the first OK button will retain its preferred shortcut ( 'O' ), the second OK button's shortcut will be reassigned to 'K' and the third won't get any - there are simply not enough eligible shortcut characters. This may even fail in much less pathological situations. This example is only supposed to give you a general idea why not to blindly rely on automatic shortcut resolving. It's always best to resolve conflicts manually. This will generally result in much better shortcuts: Easier to memorize, less chance of picking characters that cannot really do a good job showing their shortcut like very narrow characters ( .e.g., 'i' ) or descender characters ( e.g., 'g', 'p', 'q' - imagine those underlined! ). Pick a conflict widget to resolve. Use the widget with the least number of eligible shortcut characters first to maximize chances for success. |
|
Pick a new shortcut character for 'shortcut' - one that isn't marked as used in the '_used' array. Unset the conflict marker if that succeeded. |
|
Counter for shortcut conflicts |
|
The dialog this shortcut manager works on. |
|
|
|
List of all the shortcuts in this dialog. |
|
Flags for used shortcut characters. |
|
Counters for wanted shortcut characters. |