import { hotkeys } from '@ohif/core'; import { initToolGroups, toolbarButtons } from '@ohif/mode-longitudinal'; import { id } from './id'; const ohif = { layout: '@ohif/extension-default.layoutTemplateModule.viewerLayout', sopClassHandler: '@ohif/extension-default.sopClassHandlerModule.stack', hangingProtocol: '@ohif/extension-default.hangingProtocolModule.default', leftPanel: '@ohif/extension-default.panelModule.seriesList', rightPanel: '@ohif/extension-default.panelModule.measure', }; const cornerstone = { viewport: '@ohif/extension-cornerstone.viewportModule.cornerstone', }; /** * Just two dependencies to be able to render a viewport with panels in order * to make sure that the mode is working. */ const extensionDependencies = { '@ohif/extension-default': '^3.0.0', '@ohif/extension-cornerstone': '^3.0.0', }; function modeFactory({ modeConfiguration }) { return { /** * Mode ID, which should be unique among modes used by the viewer. This ID * is used to identify the mode in the viewer's state. */ id, routeName: 'template', /** * Mode name, which is displayed in the viewer's UI in the workList, for the * user to select the mode. */ displayName: 'Template Mode', /** * Runs when the Mode Route is mounted to the DOM. Usually used to initialize * Services and other resources. */ onModeEnter: ({ servicesManager, extensionManager, commandsManager }: withAppTypes) => { const { measurementService, toolbarService, toolGroupService } = servicesManager.services; measurementService.clearMeasurements(); // Init Default and SR ToolGroups initToolGroups(extensionManager, toolGroupService, commandsManager); toolbarService.addButtons(toolbarButtons); toolbarService.createButtonSection('primary', [ 'MeasurementTools', 'Zoom', 'WindowLevel', 'Pan', 'Capture', 'Layout', 'Crosshairs', 'MoreTools', ]); }, onModeExit: ({ servicesManager }: withAppTypes) => { const { toolGroupService, syncGroupService, segmentationService, cornerstoneViewportService, uiDialogService, uiModalService, } = servicesManager.services; uiDialogService.dismissAll(); uiModalService.hide(); toolGroupService.destroy(); syncGroupService.destroy(); segmentationService.destroy(); cornerstoneViewportService.destroy(); }, /** */ validationTags: { study: [], series: [], }, /** * A boolean return value that indicates whether the mode is valid for the * modalities of the selected studies. For instance a PET/CT mode should be */ isValidMode: ({ modalities }) => { return { valid: true }; }, /** * Mode Routes are used to define the mode's behavior. A list of Mode Route * that includes the mode's path and the layout to be used. The layout will * include the components that are used in the layout. For instance, if the * default layoutTemplate is used (id: '@ohif/extension-default.layoutTemplateModule.viewerLayout') * it will include the leftPanels, rightPanels, and viewports. However, if * you define another layoutTemplate that includes a Footer for instance, * you should provide the Footer component here too. Note: We use Strings * to reference the component's ID as they are registered in the internal * ExtensionManager. The template for the string is: * `${extensionId}.{moduleType}.${componentId}`. */ routes: [ { path: 'template', layoutTemplate: ({ location, servicesManager }) => { return { id: ohif.layout, props: { leftPanels: [ohif.leftPanel], rightPanels: [ohif.rightPanel], viewports: [ { namespace: cornerstone.viewport, displaySetsToDisplay: [ohif.sopClassHandler], }, ], }, }; }, }, ], /** List of extensions that are used by the mode */ extensions: extensionDependencies, /** HangingProtocol used by the mode */ // hangingProtocol: [''], /** SopClassHandlers used by the mode */ sopClassHandlers: [ohif.sopClassHandler], /** hotkeys for mode */ hotkeys: [...hotkeys.defaults.hotkeyBindings], }; } const mode = { id, modeFactory, extensionDependencies, }; export default mode;