Skip to main content
Version: 3.10.0-beta.125 (Latest)

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 key ohif.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 key user-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​

  1. Consistent API: Hotkeys now follow the same customization pattern as other OHIF features
  2. More flexible: Easier to modify specific hotkeys without replacing the entire set
  3. Better user preferences: User customizations are better preserved and migrated
  4. Runtime updates: Hotkeys can be modified at runtime through the customization service
  5. Improved cleanup: Better lifecycle management of hotkey bindings