Fixing delete lesion tool

This commit is contained in:
Bruno Alves de Faria 2017-11-06 16:40:22 -02:00
parent 5330ba5982
commit 5af752a122
3 changed files with 56 additions and 35 deletions

View File

@ -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?'
};

View File

@ -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;

View File

@ -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) {