|
libyui
|
#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 (YWidgetListConstIterator begin, YWidgetListConstIterator end) |
| void | resolveConflict (YShortcut *shortcut) |
| int | pickConflictToResolve (const YShortcutList &conflictList) |
| int | findShortestMenuItem (const YShortcutList &conflictList) |
| int | findShortestWizardButton (const YShortcutList &conflictList) |
| unsigned | findShortestWidget (const YShortcutList &conflictList) |
Protected Attributes | |
| YDialog * | _dialog |
| YShortcutList | _shortcutList |
| int | _wanted [sizeof(char)<< 8] |
| bool | _used [sizeof(char)<< 8] |
| int | _conflictCount |
Helper class to manage keyboard shortcuts within one dialog and resolve keyboard shortcut conflicts.
| YShortcutManager::YShortcutManager | ( | YDialog * | dialog | ) |
Constructor.
|
virtual |
Destructor
| void YShortcutManager::checkShortcuts | ( | bool | autoResolve = true | ) |
Check the keyboard shortcuts of all children of this dialog (not for sub-dialogs!).
Call resolveAllConflicts() if 'autoResolve' is 'true'.
|
protected |
Delete all members of the internal shortcut list, then empty the list.
|
inline |
Returns the number of shortcut conflicts. Valid only after checkShortcuts() or resolveAllConflicts().
|
inline |
Returns the dialog this shortcut manager works on.
|
protected |
Recursively search all widgets between iterators 'begin' and 'end' (not those of any sub-dialogs!) for child widgets that could accept a keyboard shortcut and add these to _shortcutList.
|
protected |
Find the shortest menu item in 'conflictList', if there is any. Returns the index of that shortest menu item or -1 if there is none.
|
protected |
Find the shortest widget in 'conflictList'. Buttons get priority if they have the same number of eligible shortcut characters as another widget.
Returns the index of the shortest widget.
|
protected |
Find the shortest wizard button in 'conflictList', if there is any. Returns the index of that shortest wizard button or -1 if there is none.
|
protected |
Pick a conflict to resolve from 'conflictList' according to priorities (menu items, wizard buttons, buttons, other widgets) and return its index within 'conflictList'.
| void YShortcutManager::resolveAllConflicts | ( | ) |
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! ).
|
protected |
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.
|
protected |
Counter for shortcut conflicts
|
protected |
The dialog this shortcut manager works on.
|
protected |
List (owning) of all the shortcuts in this dialog.
|
protected |
Flags for used shortcut characters.
|
protected |
Counters for wanted shortcut characters.