Hotkeys
Key Changes:
- Hotkeys are no longer defined in mode factory via
hotkeys: [...hotkeys.defaults.hotkeyBindings]
- Hotkeys are now managed through the
customizationService
under the keyohif.hotkeyBindings
- Default hotkeys are set automatically and can be customized using the customization service
- User-defined hotkey preferences are now stored in a new format in localStorage
- The
HotkeysManager
has undergone significant updates including better handling of defaults, key persistence, and cleanup
Migration Steps:
1. Remove hotkeys array from mode factory definition
Before:
- function modeFactory({ modeConfiguration }) {
- return {
- id: 'basic',
- // ... other configuration
- hotkeys: [...hotkeys.defaults.hotkeyBindings],
- };
- }
After:
+ function modeFactory({ modeConfiguration }) {
+ return {
+ id: 'basic',
+ // ... other configuration
+ // No hotkeys array necessary
+ };
+ }
2. Set custom hotkeys using the customization service
There are several methods to modify hotkeys using the customization service:
a. Completely replace all hotkeys using $set
:
+ onModeEnter: function ({ servicesManager }) {
+ const { customizationService } = servicesManager.services;
+ customizationService.setCustomizations({
+ 'ohif.hotkeyBindings': {
+ $set: [
+ {
+ commandName: 'setToolActive',
+ commandOptions: { toolName: 'Zoom' },
+ label: 'Zoom',
+ keys: ['z'],
+ isEditable: true,
+ },
+ ],
+ },
+ });
b. Add new hotkeys using $push
:
+ onModeEnter: function ({ servicesManager }) {
+ const { customizationService } = servicesManager.services;
+ customizationService.setCustomizations({
+ 'ohif.hotkeyBindings': {
+ $push: [
+ {
+ commandName: 'myCustomCommand',
+ label: 'My Custom Function',
+ keys: ['ctrl+m'],
+ isEditable: true,
+ },
+ ],
+ },
+ });
+}
4. Update configuration file if you were setting window.config.hotkeys
If you were previously defining hotkeys in your window.config.js file, it was not really taken into account. So you can safely remove it now.
Before:
- window.config = {
- // ...other config
- hotkeys: [
- {
- commandName: 'incrementActiveViewport',
- label: 'Next Viewport',
- keys: ['right'],
- },
- // ...more hotkeys
- ],
- };
After:
+ window.config = {
+ // ...other config
+ };
5. Be aware that user preferences are now handled differently
The new system automatically handles user-preferred hotkey mappings:
- User hotkey preferences are stored in
localStorage
under the keyuser-preferred-keys
- The format is a hash-based mapping rather than a full array of definitions
- There's a migration utility that converts old preferences to the new format
- You don't need to manually handle this, but be aware of it if you're accessing localStorage directly
Benefits of the Change
- Consistent API: Hotkeys now follow the same customization pattern as other OHIF features
- More flexible: Easier to modify specific hotkeys without replacing the entire set
- Better user preferences: User customizations are better preserved and migrated
- Runtime updates: Hotkeys can be modified at runtime through the customization service
- Improved cleanup: Better lifecycle management of hotkey bindings