Fixing delete lesion tool
This commit is contained in:
parent
5330ba5982
commit
5af752a122
@ -1,15 +1,27 @@
|
||||
import { Viewerbase } from 'meteor/ohif:viewerbase';
|
||||
import { OHIF } from 'meteor/ohif:core';
|
||||
|
||||
// Delete a lesion if Ctrl+D or DELETE is pressed while a lesion is selected
|
||||
var keys = {
|
||||
const keys = {
|
||||
D: 68,
|
||||
DELETE: 46
|
||||
};
|
||||
|
||||
// Defined the toolTypes for which the delete dialog will be displayed when the keys are pressed
|
||||
const toolTypes = [
|
||||
'bidirectional',
|
||||
'targetCR',
|
||||
'targetUN',
|
||||
'targetEX',
|
||||
'nonTarget',
|
||||
'length',
|
||||
'ellipticalRoi',
|
||||
'rectangleRoi'
|
||||
];
|
||||
|
||||
function removeMeasurementTimepoint(data, index, toolType, element) {
|
||||
var imageId = data.imageId;
|
||||
let { imageId } = data;
|
||||
if (!imageId) {
|
||||
var enabledElement = cornerstone.getEnabledElement(element);
|
||||
const enabledElement = cornerstone.getEnabledElement(element);
|
||||
imageId = enabledElement.image.imageId;
|
||||
}
|
||||
|
||||
@ -18,25 +30,24 @@ function removeMeasurementTimepoint(data, index, toolType, element) {
|
||||
}
|
||||
|
||||
// TODO = Check if we have the same function already in Cornerstone Tools
|
||||
function getNearbyToolData(element, coords, toolTypes) {
|
||||
var allTools = Viewerbase.toolManager.getTools();
|
||||
var pointNearTool = false;
|
||||
var touchDevice = Viewerbase.helpers.isTouchDevice();
|
||||
var nearbyTool = {},
|
||||
nearbyToolIndex,
|
||||
nearbyToolType;
|
||||
function getNearbyToolData(element, coords) {
|
||||
const Viewerbase = OHIF.viewerbase;
|
||||
const allTools = Viewerbase.toolManager.getTools();
|
||||
let pointNearTool = false;
|
||||
const isTouchDevice = Viewerbase.helpers.isTouchDevice();
|
||||
const nearbyTool = {};
|
||||
|
||||
toolTypes.forEach(function(toolType) {
|
||||
var toolData = cornerstoneTools.getToolState(element, toolType);
|
||||
toolTypes.forEach(toolType => {
|
||||
const toolData = cornerstoneTools.getToolState(element, toolType);
|
||||
if (!toolData) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (var i = 0; i < toolData.data.length; i++) {
|
||||
var data = toolData.data[i];
|
||||
for (let i = 0; i < toolData.data.length; i++) {
|
||||
const data = toolData.data[i];
|
||||
|
||||
var toolInterface;
|
||||
if (touchDevice) {
|
||||
let toolInterface;
|
||||
if (isTouchDevice) {
|
||||
toolInterface = allTools[toolType].touch;
|
||||
} else {
|
||||
toolInterface = allTools[toolType].mouse;
|
||||
@ -59,20 +70,20 @@ function getNearbyToolData(element, coords, toolTypes) {
|
||||
return pointNearTool ? nearbyTool : undefined;
|
||||
}
|
||||
|
||||
function keyDownCallback(e, eventData) {
|
||||
var keyCode = eventData.which;
|
||||
function keyDownCallback(event, eventData) {
|
||||
const keyCode = eventData.which;
|
||||
|
||||
if (keyCode === keys.DELETE ||
|
||||
(keyCode === keys.D && eventData.event.ctrlKey === true)) {
|
||||
|
||||
var toolTypes = [ 'bidirectional', 'nonTarget', 'length', 'targetCR', 'targetUN', 'targetEX'];
|
||||
var nearbyToolData = getNearbyToolData(eventData.element, eventData.currentPoints.canvas, toolTypes);
|
||||
const nearbyToolData = getNearbyToolData(eventData.element, eventData.currentPoints.canvas);
|
||||
|
||||
if (!nearbyToolData) {
|
||||
return;
|
||||
}
|
||||
|
||||
const dialogSettings = {
|
||||
class: 'themed',
|
||||
title: 'Delete measurements',
|
||||
message: 'Are you sure you want to delete this measurement?'
|
||||
};
|
||||
|
||||
@ -376,17 +376,20 @@ const loadDisplaySetIntoViewport = (data, templateData) => {
|
||||
// since this callback function is called multiple times (eg: when a tool is
|
||||
// enabled/disabled -> cornerstone[toolName].tool.enable)
|
||||
|
||||
// Reset the focus, even if we don't need to re-enable reference lines or prefetching
|
||||
const element = (eventData && eventData.element) || (event && event.currentTarget);
|
||||
if (!element) return;
|
||||
const $element = $(element);
|
||||
$element.focus();
|
||||
|
||||
// Stop here if we don't have eventData set
|
||||
if (!eventData) return;
|
||||
|
||||
// Check if the current active viewport in the Meteor Session
|
||||
// Is the same as the viewport in which the activation event was fired.
|
||||
// If it was, no changes are necessary, so stop here.
|
||||
const activeViewportIndex = Session.get('activeViewport');
|
||||
if (viewportIndex === activeViewportIndex) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Reset the focus, even if we don't need to re-enable reference lines or prefetching
|
||||
const element = eventData.element;
|
||||
$(element).focus();
|
||||
if (viewportIndex === activeViewportIndex) return;
|
||||
|
||||
OHIF.log.info('imageViewerViewport sendActivationTrigger');
|
||||
|
||||
@ -397,12 +400,14 @@ const loadDisplaySetIntoViewport = (data, templateData) => {
|
||||
|
||||
// Need to overwrite the type set in the original event
|
||||
customEvent.type = 'OHIFActivateViewport';
|
||||
$(event.target).trigger(customEvent, eventData);
|
||||
$element.trigger(customEvent, eventData);
|
||||
};
|
||||
|
||||
// Attach the sendActivationTrigger function to all of the Cornerstone interaction events
|
||||
$element.off(allCornerstoneEvents, sendActivationTrigger);
|
||||
$element.on(allCornerstoneEvents, sendActivationTrigger);
|
||||
$element.off('mouseenter', sendActivationTrigger);
|
||||
$element.on('mouseenter', sendActivationTrigger);
|
||||
|
||||
OHIF.viewer.data.loadedSeriesData = layoutManager.viewportData;
|
||||
|
||||
@ -522,6 +527,11 @@ Template.imageViewerViewport.onRendered(function() {
|
||||
// add the CSS 'active' class to highlight this viewport.
|
||||
const activeViewport = Session.get('activeViewport');
|
||||
|
||||
// Focus the viewport if it's the active one
|
||||
if (templateData.viewportIndex === activeViewport) {
|
||||
this.$element.focus();
|
||||
}
|
||||
|
||||
let { currentImageIdIndex } = templateData;
|
||||
const { viewport, studyInstanceUid, seriesInstanceUid, renderedCallback, displaySetInstanceUid } = templateData;
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { Meteor } from 'meteor/meteor';
|
||||
import { Session } from 'meteor/session';
|
||||
import { $ } from 'meteor/jquery';
|
||||
import { OHIF } from 'meteor/ohif:core';
|
||||
import { _ } from 'meteor/underscore';
|
||||
import { getFrameOfReferenceUID } from './getFrameOfReferenceUID';
|
||||
import { updateCrosshairsSynchronizer } from './updateCrosshairsSynchronizer';
|
||||
import { crosshairsSynchronizers } from './crosshairsSynchronizers';
|
||||
@ -129,7 +129,7 @@ export const toolManager = {
|
||||
defaultMouseButtonTools = Meteor.settings && Meteor.settings.public && Meteor.settings.public.defaultMouseButtonTools;
|
||||
|
||||
// Override default tool if defined in settings
|
||||
defaultTool = (defaultMouseButtonTools && defaultMouseButtonTools.left) || "wwwc";
|
||||
defaultTool = (defaultMouseButtonTools && defaultMouseButtonTools.left) || 'wwwc';
|
||||
|
||||
this.configureTools();
|
||||
initialized = true;
|
||||
@ -310,10 +310,10 @@ export const toolManager = {
|
||||
// Get the imageIds for this element
|
||||
const imageIds = toolData.data[0].imageIds;
|
||||
|
||||
const defaultMouseButtonToolNameMiddle = (defaultMouseButtonTools && defaultMouseButtonTools.middle) || "pan";
|
||||
const defaultMouseButtonToolNameMiddle = (defaultMouseButtonTools && defaultMouseButtonTools.middle) || 'pan';
|
||||
const defaultMouseButtonToolMiddle = cornerstoneTools[defaultMouseButtonToolNameMiddle];
|
||||
|
||||
const defaultMouseButtonToolNameRight = (defaultMouseButtonTools && defaultMouseButtonTools.right) || "zoom";
|
||||
const defaultMouseButtonToolNameRight = (defaultMouseButtonTools && defaultMouseButtonTools.right) || 'zoom';
|
||||
const defaultMouseButtonToolRight = cornerstoneTools[defaultMouseButtonToolNameRight];
|
||||
|
||||
// Deactivate all the middle mouse, right click, and scroll wheel tools
|
||||
@ -483,9 +483,9 @@ export const toolManager = {
|
||||
|
||||
// Edge cases where the tool is not the same as the typeName
|
||||
if (toolType === 'simpleAngle') {
|
||||
toolInterfaceName = 'angle';
|
||||
toolInterfaceName = 'angle';
|
||||
} else if (toolType === 'arrowAnnotate') {
|
||||
toolInterfaceName = 'annotate';
|
||||
toolInterfaceName = 'annotate';
|
||||
}
|
||||
|
||||
if (touchDevice) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user