diff --git a/extensions/default/src/init.ts b/extensions/default/src/init.ts index 6c449264d..564c6172d 100644 --- a/extensions/default/src/init.ts +++ b/extensions/default/src/init.ts @@ -3,6 +3,7 @@ import { calculateSUVScalingFactors } from '@cornerstonejs/calculate-suv'; import getPTImageIdInstanceMetadata from './getPTImageIdInstanceMetadata'; import { registerHangingProtocolAttributes } from './hangingprotocols'; +import { HotkeysManager } from '@ohif/core' const metadataProvider = classes.MetadataProvider; @@ -11,13 +12,17 @@ const metadataProvider = classes.MetadataProvider; * @param {Object} servicesManager * @param {Object} configuration */ -export default function init({ servicesManager, commandsManager }: withAppTypes): void { +export default function init({ servicesManager, commandsManager, hotkeysManager }: withAppTypes): void { const { toolbarService, cineService, viewportGridService } = servicesManager.services; toolbarService.registerEventForToolbarUpdate(cineService, [ cineService.EVENTS.CINE_STATE_CHANGED, ]); + toolbarService.registerEventForToolbarUpdate(hotkeysManager, [ + HotkeysManager.EVENTS.HOTKEY_PRESSED, + ]); + // Add DicomMetadataStore.subscribe(DicomMetadataStore.EVENTS.INSTANCES_ADDED, handleScalingModules); diff --git a/platform/core/src/classes/HotkeysManager.ts b/platform/core/src/classes/HotkeysManager.ts index 30305c7d8..1febf61e9 100644 --- a/platform/core/src/classes/HotkeysManager.ts +++ b/platform/core/src/classes/HotkeysManager.ts @@ -2,6 +2,7 @@ import objectHash from 'object-hash'; import { hotkeys as mouseTrapAPI } from '../utils'; import Hotkey from './Hotkey'; import migrateOldHotkeyDefinitions from '../utils/hotkeys/migrateHotkeys'; +import pubSubServiceInterface from '../services/_shared/pubSubServiceInterface'; /** * @@ -19,6 +20,16 @@ export class HotkeysManager { public hotkeyDefinitions: Record = {}; public hotkeyDefaults: any[] = []; + public static EVENTS: Record = { + HOTKEY_PRESSED: 'event::hotkeysManager:hotkeyPressed', + }; + public EVENTS: Record; + public listeners: Record void }> | undefined> = {}; + public subscribe: (eventName: string, callback: (data: unknown) => void) => { unsubscribe: () => void }; + public _broadcastEvent: (eventName: string, callbackProps: unknown) => void; + public _unsubscribe: (eventName: string, listenerId: string) => void; + public _isValidEvent: (eventName: string) => boolean; + constructor( commandsManager: AppTypes.CommandsManager, servicesManager: AppTypes.ServicesManager @@ -26,6 +37,12 @@ export class HotkeysManager { this._servicesManager = servicesManager; this._commandsManager = commandsManager; + this.EVENTS = HotkeysManager.EVENTS; + this.subscribe = pubSubServiceInterface.subscribe.bind(this); + this._broadcastEvent = pubSubServiceInterface._broadcastEvent.bind(this); + this._unsubscribe = pubSubServiceInterface._unsubscribe.bind(this); + this._isValidEvent = pubSubServiceInterface._isValidEvent.bind(this); + // Check for old hotkey definitions format and migrate if needed migrateOldHotkeyDefinitions({ generateHash: this.generateHash, @@ -264,6 +281,13 @@ export class HotkeysManager { evt.preventDefault(); evt.stopPropagation(); this._commandsManager.runCommand(commandName, { evt, ...commandOptions }, context); + this._broadcastEvent(HotkeysManager.EVENTS.HOTKEY_PRESSED, { + commandName, + commandOptions, + keys: combinedKeys, + context, + evt, + }); }); }