import toolbarButtons from './toolbarButtons'; import { id } from './id'; import initToolGroups from './initToolGroups'; import i18n from 'i18next'; // Allow this mode by excluding non-imaging modalities such as SR, SEG // Also, SM is not a simple imaging modalities, so exclude it. const NON_IMAGE_MODALITIES = ['ECG', 'SR', 'SEG', 'RTSTRUCT']; const ohif = { layout: '@ohif/extension-default.layoutTemplateModule.viewerLayout', sopClassHandler: '@ohif/extension-default.sopClassHandlerModule.stack', wsiSopClassHandler: '@ohif/extension-cornerstone.sopClassHandlerModule.DicomMicroscopySopClassHandler', thumbnailList: '@ohif/extension-default.panelModule.seriesList', }; const tracked = { measurements: '@ohif/extension-measurement-tracking.panelModule.trackedMeasurements', thumbnailList: '@ohif/extension-measurement-tracking.panelModule.seriesList', viewport: '@ohif/extension-measurement-tracking.viewportModule.cornerstone-tracked', }; 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 dicomSeg = { sopClassHandler: '@ohif/extension-cornerstone-dicom-seg.sopClassHandlerModule.dicom-seg', viewport: '@ohif/extension-cornerstone-dicom-seg.viewportModule.dicom-seg', }; const cornerstone = { panel: '@ohif/extension-cornerstone.panelModule.panelSegmentation', measurements: '@ohif/extension-cornerstone.panelModule.panelMeasurement', }; const dicomPmap = { sopClassHandler: '@ohif/extension-cornerstone-dicom-pmap.sopClassHandlerModule.dicom-pmap', viewport: '@ohif/extension-cornerstone-dicom-pmap.viewportModule.dicom-pmap', }; const extensionDependencies = { '@ohif/extension-default': '^3.0.0', '@ohif/extension-cornerstone': '^3.0.0', '@ohif/extension-measurement-tracking': '^3.0.0', '@ohif/extension-cornerstone-dicom-sr': '^3.0.0', '@ohif/extension-cornerstone-dicom-seg': '^3.0.0', '@ohif/extension-cornerstone-dicom-pmap': '^3.0.0', '@ohif/extension-dicom-pdf': '^3.0.1', '@ohif/extension-dicom-video': '^3.0.1', '@ohif/extension-test': '^0.0.1', }; function modeFactory() { return { id, routeName: 'basic-test', displayName: i18n.t('Modes:Basic Test Mode'), /** * Lifecycle hooks */ onModeEnter: ({ servicesManager, extensionManager, commandsManager }: withAppTypes) => { const { measurementService, toolbarService, toolGroupService, customizationService } = servicesManager.services; measurementService.clearMeasurements(); // Init Default and SR ToolGroups initToolGroups(extensionManager, toolGroupService, commandsManager); // init customizations customizationService.setCustomizations([ '@ohif/extension-test.customizationModule.custom-context-menu', ]); toolbarService.addButtons(toolbarButtons); console.debug('toolbarButtons', toolbarButtons); toolbarService.createButtonSection('primary', [ 'MeasurementTools', 'Zoom', 'WindowLevelGroup', 'Pan', 'Capture', 'Layout', 'MPR', 'Crosshairs', 'MoreTools', ]); toolbarService.createButtonSection('windowLevelSection', [ 'WindowLevel', 'Soft tissue', 'Lung', 'Liver', 'Bone', 'Brain', ]); toolbarService.createButtonSection('measurementSection', [ 'Length', 'Bidirectional', 'ArrowAnnotate', 'EllipticalROI', 'CircleROI', 'PlanarFreehandROI', 'SplineROI', 'LivewireContour', ]); toolbarService.createButtonSection('moreToolsSection', [ 'Reset', 'rotate-right', 'flipHorizontal', 'ImageSliceSync', 'ReferenceLines', 'ImageOverlayViewer', 'StackScroll', 'invert', 'Probe', 'Cine', 'Angle', 'CobbAngle', 'Magnify', 'RectangleROI', 'CalibrationLine', 'TagBrowser', 'AdvancedMagnify', 'UltrasoundDirectionalTool', 'WindowLevelRegion', ]); customizationService.setCustomizations( { 'ohif.hotkeyBindings': { $push: [ { commandName: 'undo', label: 'Undo', keys: ['ctrl+z'], isEditable: true, }, ], }, }, 'mode' ); }, onModeExit: ({ servicesManager }: withAppTypes) => { const { toolGroupService, syncGroupService, segmentationService, cornerstoneViewportService, uiDialogService, uiModalService, } = servicesManager.services; uiDialogService.hideAll(); uiModalService.hide(); toolGroupService.destroy(); syncGroupService.destroy(); segmentationService.destroy(); cornerstoneViewportService.destroy(); }, validationTags: { study: [], series: [], }, isValidMode: function ({ modalities }) { const modalities_list = modalities.split('\\'); // Exclude non-image modalities return { valid: !!modalities_list.filter(modality => NON_IMAGE_MODALITIES.indexOf(modality) === -1) .length, description: 'The mode does not support studies that ONLY include the following modalities: SM, ECG, SR, SEG', }; }, routes: [ { path: 'basic-test', layoutTemplate: () => { return { id: ohif.layout, props: { leftPanels: [tracked.thumbnailList], leftPanelResizable: true, rightPanels: [cornerstone.panel, tracked.measurements, cornerstone.measurements], rightPanelResizable: true, viewports: [ { namespace: tracked.viewport, displaySetsToDisplay: [ ohif.sopClassHandler, dicomvideo.sopClassHandler, ohif.wsiSopClassHandler, ], }, { namespace: dicomsr.viewport, displaySetsToDisplay: [dicomsr.sopClassHandler], }, { namespace: dicomvideo.viewport, displaySetsToDisplay: [dicomvideo.sopClassHandler], }, { namespace: dicompdf.viewport, displaySetsToDisplay: [dicompdf.sopClassHandler], }, { namespace: dicomSeg.viewport, displaySetsToDisplay: [dicomSeg.sopClassHandler], }, { namespace: dicomPmap.viewport, displaySetsToDisplay: [dicomPmap.sopClassHandler], }, ], }, }; }, }, ], extensions: extensionDependencies, hangingProtocol: 'default', sopClassHandlers: [ dicomvideo.sopClassHandler, dicomSeg.sopClassHandler, ohif.wsiSopClassHandler, ohif.sopClassHandler, dicompdf.sopClassHandler, dicomsr.sopClassHandler, ], hotkeys: { name: 'basic-test-hotkeys', }, }; } const mode = { id, modeFactory, extensionDependencies, }; export default mode;