ohif-viewer/Packages/ohif-viewerbase/client/components/viewer/toolContextMenu/toolContextMenu.js
2018-03-02 10:09:15 -05:00

73 lines
2.3 KiB
JavaScript

import { Template } from 'meteor/templating';
import { OHIF } from 'meteor/ohif:core';
import { cornerstone, cornerstoneTools } from 'meteor/ohif:cornerstone';
import { toolManager } from '../../../lib/toolManager';
const toolTypes = ['length', 'simpleAngle', 'probe', 'ellipticalRoi', 'rectangleRoi', 'arrowAnnotate'];
const TypeToLabelMap = {
length: 'Length',
simpleAngle: 'Angle',
probe: 'Probe',
ellipticalRoi: 'Elliptical ROI',
rectangleRoi: 'Rectangle ROI',
arrowAnnotate: 'Annotation'
};
let dropdownItems = [{
actionType: 'Delete',
action: ({ nearbyToolData, eventData }) => {
const element = eventData.element;
cornerstoneTools.removeToolState(element, nearbyToolData.toolType, nearbyToolData.tool);
cornerstone.updateImage(element);
}
}];
const getTypeText = function(toolData, actionType) {
const toolType = toolData.toolType;
let message = `${TypeToLabelMap[toolType]}`;
if (toolType === 'arrowAnnotate') {
message = `${message} "${toolData.tool.text}"`;
}
return `${actionType} ${message}`;
};
const createDropdown = function(eventData, isTouchEvent = false) {
const nearbyToolData = toolManager.getNearbyToolData(eventData.element, eventData.currentPoints.canvas, toolTypes);
// Annotate tools for touch events already have a press handle to edit it, has a better UX for deleting it
if (isTouchEvent && nearbyToolData.toolType === 'arrowAnnotate') return;
if (nearbyToolData) {
dropdownItems.forEach(function(item) {
item.params = {
eventData,
nearbyToolData
};
item.text = getTypeText(nearbyToolData, item.actionType);
});
OHIF.ui.showDropdown(dropdownItems, {
menuClasses: 'dropdown-menu-left',
event: eventData.event
});
}
};
Template.viewerMain.events({
'cornerstonetoolsmouseclick .imageViewerViewport'(event) {
const { originalEvent } = event;
const eventData = originalEvent.detail;
if (eventData.which === 3) {
createDropdown(eventData);
}
},
'cornerstonetoolstouchpress .imageViewerViewport'(event) {
const { originalEvent } = event;
const eventData = originalEvent.detail;
createDropdown(eventData, true);
}
});