- Implement ProtocolStore interface to allow persisting hanging protocols using different strategies - Implement and set default strategy to persist hanging protocols in the MongoDB collection “HangingProtocols” in the application server
108 lines
4.2 KiB
JavaScript
108 lines
4.2 KiB
JavaScript
import { OHIF } from 'meteor/ohif:core';
|
|
import { unloadHandlers } from '../../../lib/unloadHandlers.js';
|
|
|
|
Template.viewerMain.onCreated(() => {
|
|
// Attach the Window resize listener
|
|
// Don't use jQuery here. "window.onresize" will always be null
|
|
// If its necessary, check all the code for window.onresize getter
|
|
// and change it to jQuery._data(window, 'events')['resize'].
|
|
// Otherwise this function will be probably overrided.
|
|
// See cineDialog instance.setResizeHandler function
|
|
window.addEventListener('resize', handleResize);
|
|
|
|
// Add beforeUnload event handler to check for unsaved changes
|
|
window.addEventListener('beforeunload', unloadHandlers.beforeUnload);
|
|
|
|
// Create the synchronizer used to update reference lines
|
|
OHIF.viewer.updateImageSynchronizer = new cornerstoneTools.Synchronizer('CornerstoneNewImage', cornerstoneTools.updateImageSynchronizer);
|
|
});
|
|
|
|
Template.viewerMain.onRendered(() => {
|
|
const instance = Template.instance();
|
|
|
|
HP.ProtocolStore.onReady(() => {
|
|
const { studies, currentTimepointId, measurementApi, timepointIds } = instance.data;
|
|
const parentElement = instance.$('#layoutManagerTarget').get(0);
|
|
window.layoutManager = new LayoutManager(parentElement, studies);
|
|
|
|
// Default actions for Associated Studies
|
|
if(currentTimepointId) {
|
|
// Follow-up studies: same as the first measurement in the table
|
|
// Baseline studies: target-tool
|
|
if(studies[0]) {
|
|
let activeTool;
|
|
// In follow-ups, get the baseline timepointId
|
|
const timepointId = timepointIds.find(id => id !== currentTimepointId);
|
|
|
|
// Follow-up studies
|
|
if(studies[0].timepointType === 'followup' && timepointId) {
|
|
const measurementTools = OHIF.measurements.MeasurementApi.getConfiguration().measurementTools;
|
|
|
|
// Create list of measurement tools
|
|
const measurementTypes = measurementTools.map(
|
|
tool => {
|
|
const { id, cornerstoneToolType } = tool;
|
|
return {
|
|
id,
|
|
cornerstoneToolType
|
|
}
|
|
}
|
|
);
|
|
|
|
// Iterate over each measurment tool to find the first baseline
|
|
// measurment. If so, stops the loop and prevent fetching from all
|
|
// collections
|
|
measurementTypes.every(({id, cornerstoneToolType}) => {
|
|
// Get measurement
|
|
if(measurementApi[id]) {
|
|
const measurement = measurementApi[id].findOne({ timepointId });
|
|
|
|
// Found a measurement, save tool and stop loop
|
|
if(measurement) {
|
|
activeTool = cornerstoneToolType;
|
|
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
});
|
|
}
|
|
|
|
// If not set, for associated studies default is target-tool
|
|
toolManager.setActiveTool(activeTool || 'bidirectional');
|
|
}
|
|
|
|
// Toggle Measurement Table
|
|
instance.data.state.set('rightSidebar', 'measurements');
|
|
}
|
|
// Hide as default for single study
|
|
else {
|
|
instance.data.state.set('rightSidebar', null);
|
|
}
|
|
|
|
ProtocolEngine = new HP.ProtocolEngine(window.layoutManager, studies);
|
|
HP.setEngine(ProtocolEngine);
|
|
|
|
// Enable hotkeys
|
|
enableHotkeys();
|
|
|
|
Session.set('ViewerMainReady', Random.id());
|
|
});
|
|
});
|
|
|
|
Template.viewerMain.onDestroyed(() => {
|
|
OHIF.log.info('viewerMain onDestroyed');
|
|
|
|
// Remove the Window resize listener
|
|
window.removeEventListener('resize', handleResize);
|
|
|
|
// Remove beforeUnload event handler...
|
|
window.removeEventListener('beforeunload', unloadHandlers.beforeUnload);
|
|
|
|
// Destroy the synchronizer used to update reference lines
|
|
OHIF.viewer.updateImageSynchronizer.destroy();
|
|
|
|
delete window.layoutManager;
|
|
delete ProtocolEngine;
|
|
});
|