|
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 | 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.
| YShortcutManager::~YShortcutManager | ( | ) | [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'.
| void YShortcutManager::clearShortcutList | ( | ) | [protected] |
Delete all members of the internal shortcut list, then empty the list.
| int YShortcutManager::conflictCount | ( | ) | [inline] |
Returns the number of shortcut conflicts. Valid only after checkShortcuts() or resolveAllConflicts().
| YDialog* YShortcutManager::dialog | ( | ) | [inline] |
Returns the dialog this shortcut manager works on.
| void YShortcutManager::findShortcutWidgets | ( | YWidgetListConstIterator | begin, |
| YWidgetListConstIterator | end | ||
| ) | [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.
| unsigned YShortcutManager::findShortestWidget | ( | const YShortcutList & | conflictList | ) | [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.
| int YShortcutManager::findShortestWizardButton | ( | const YShortcutList & | conflictList | ) | [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.
| 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! ).
| void YShortcutManager::resolveConflict | ( | YShortcut * | shortcut | ) | [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.
int YShortcutManager::_conflictCount [protected] |
Counter for shortcut conflicts
YDialog* YShortcutManager::_dialog [protected] |
The dialog this shortcut manager works on.
YShortcutList YShortcutManager::_shortcutList [protected] |
List of all the shortcuts in this dialog.
bool YShortcutManager::_used[sizeof(char)<< 8] [protected] |
Flags for used shortcut characters.
int YShortcutManager::_wanted[sizeof(char)<< 8] [protected] |
Counters for wanted shortcut characters.
1.7.3