import toolbarButtons from './toolbarButtons.js'; import { hotkeys } from '@ohif/core'; import { id } from './id'; import i18n from 'i18next'; const configs = { Length: {}, // }; const ohif = { layout: '@ohif/extension-default.layoutTemplateModule.viewerLayout', sopClassHandler: '@ohif/extension-default.sopClassHandlerModule.stack', measurements: '@ohif/extension-default.panelModule.measure', thumbnailList: '@ohif/extension-default.panelModule.seriesList', }; const cs3d = { viewport: '@ohif/extension-cornerstone.viewportModule.cornerstone', }; const dicomsr = { sopClassHandler: '@ohif/extension-cornerstone-dicom-sr.sopClassHandlerModule.dicom-sr', viewport: '@ohif/extension-cornerstone-dicom-sr.viewportModule.dicom-sr', }; const dicomvideo = { sopClassHandler: '@ohif/extension-dicom-video.sopClassHandlerModule.dicom-video', viewport: '@ohif/extension-dicom-video.viewportModule.dicom-video', }; const dicompdf = { sopClassHandler: '@ohif/extension-dicom-pdf.sopClassHandlerModule.dicom-pdf', viewport: '@ohif/extension-dicom-pdf.viewportModule.dicom-pdf', }; const extensionDependencies = { '@ohif/extension-default': '^3.0.0', '@ohif/extension-cornerstone': '^3.0.0', '@ohif/extension-cornerstone-dicom-sr': '^3.0.0', '@ohif/extension-dicom-pdf': '^3.0.1', '@ohif/extension-dicom-video': '^3.0.1', }; function modeFactory({ modeConfiguration }) { return { id, routeName: 'dev', displayName: i18n.t('Modes:Basic Dev Viewer'), /** * Lifecycle hooks */ onModeEnter: ({ servicesManager, extensionManager }) => { const { toolbarService, toolGroupService } = servicesManager.services; const utilityModule = extensionManager.getModuleEntry( '@ohif/extension-cornerstone.utilityModule.tools' ); const { toolNames, Enums } = utilityModule.exports; const tools = { active: [ { toolName: toolNames.WindowLevel, bindings: [{ mouseButton: Enums.MouseBindings.Primary }], }, { toolName: toolNames.Pan, bindings: [{ mouseButton: Enums.MouseBindings.Auxiliary }], }, { toolName: toolNames.Zoom, bindings: [{ mouseButton: Enums.MouseBindings.Secondary }], }, { toolName: toolNames.StackScrollMouseWheel, bindings: [] }, ], passive: [ { toolName: toolNames.Length }, { toolName: toolNames.Bidirectional }, { toolName: toolNames.Probe }, { toolName: toolNames.EllipticalROI }, { toolName: toolNames.CircleROI }, { toolName: toolNames.RectangleROI }, { toolName: toolNames.StackScroll }, { toolName: toolNames.CalibrationLine }, ], // enabled enabled: [{ toolName: toolNames.ImageOverlayViewer }], // disabled }; const toolGroupId = 'default'; toolGroupService.createToolGroupAndAddTools(toolGroupId, tools); let unsubscribe; const activateTool = () => { toolbarService.recordInteraction({ groupId: 'WindowLevel', interactionType: 'tool', commands: [ { commandName: 'setToolActive', commandOptions: { toolName: 'WindowLevel', }, context: 'CORNERSTONE', }, ], }); // We don't need to reset the active tool whenever a viewport is getting // added to the toolGroup. unsubscribe(); }; // Since we only have one viewport for the basic cs3d mode and it has // only one hanging protocol, we can just use the first viewport ({ unsubscribe } = toolGroupService.subscribe( toolGroupService.EVENTS.VIEWPORT_ADDED, activateTool )); toolbarService.init(extensionManager); toolbarService.addButtons(toolbarButtons); toolbarService.createButtonSection('primary', [ 'MeasurementTools', 'Zoom', 'WindowLevel', 'Pan', 'Layout', 'MoreTools', ]); }, onModeExit: ({ servicesManager }) => { const { toolGroupService, measurementService, toolbarService } = servicesManager.services; toolGroupService.destroy(); }, validationTags: { study: [], series: [], }, isValidMode: ({ modalities }) => { const modalities_list = modalities.split('\\'); // Slide Microscopy modality not supported by basic mode yet return !modalities_list.includes('SM'); }, routes: [ { path: 'viewer-cs3d', /*init: ({ servicesManager, extensionManager }) => { //defaultViewerRouteInit },*/ layoutTemplate: ({ location, servicesManager }) => { return { id: ohif.layout, props: { // TODO: Should be optional, or required to pass empty array for slots? leftPanels: [ohif.thumbnailList], rightPanels: [ohif.measurements], viewports: [ { namespace: cs3d.viewport, displaySetsToDisplay: [ohif.sopClassHandler], }, { namespace: dicomvideo.viewport, displaySetsToDisplay: [dicomvideo.sopClassHandler], }, { namespace: dicompdf.viewport, displaySetsToDisplay: [dicompdf.sopClassHandler], }, ], }, }; }, }, ], extensions: extensionDependencies, hangingProtocol: 'default', sopClassHandlers: [ dicomvideo.sopClassHandler, ohif.sopClassHandler, dicompdf.sopClassHandler, dicomsr.sopClassHandler, ], hotkeys: [...hotkeys.defaults.hotkeyBindings], }; } const mode = { id, modeFactory, extensionDependencies, }; export default mode;