From 5af752a122bc13e84e2d343643fbbbb8ccd860c1 Mon Sep 17 00:00:00 2001 From: Bruno Alves de Faria Date: Mon, 6 Nov 2017 16:40:22 -0200 Subject: [PATCH] Fixing delete lesion tool --- .../compatibility/deleteLesionKeyboardTool.js | 53 +++++++++++-------- .../imageViewerViewport.js | 26 ++++++--- .../ohif-viewerbase/client/lib/toolManager.js | 12 ++--- 3 files changed, 56 insertions(+), 35 deletions(-) diff --git a/Packages/ohif-lesiontracker/client/compatibility/deleteLesionKeyboardTool.js b/Packages/ohif-lesiontracker/client/compatibility/deleteLesionKeyboardTool.js index d0c5bfd8d..69fecf3db 100644 --- a/Packages/ohif-lesiontracker/client/compatibility/deleteLesionKeyboardTool.js +++ b/Packages/ohif-lesiontracker/client/compatibility/deleteLesionKeyboardTool.js @@ -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?' }; diff --git a/Packages/ohif-viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.js b/Packages/ohif-viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.js index cd2c1667f..5c35c317e 100644 --- a/Packages/ohif-viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.js +++ b/Packages/ohif-viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.js @@ -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; diff --git a/Packages/ohif-viewerbase/client/lib/toolManager.js b/Packages/ohif-viewerbase/client/lib/toolManager.js index c53d184ef..1bdce6b6c 100644 --- a/Packages/ohif-viewerbase/client/lib/toolManager.js +++ b/Packages/ohif-viewerbase/client/lib/toolManager.js @@ -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) {