LT-275: Work towards proper measurement / tooldata syncing

This commit is contained in:
Erik Ziegler 2016-11-06 16:17:35 +01:00
parent ec6f96e714
commit 9aa7cf012f
15 changed files with 164 additions and 165 deletions

View File

@ -3,7 +3,7 @@
<div class="viewerDialogs">
{{>confirmDeleteDialog}}
{{>measurementLocationDialog (clone this)}}
{{>nonTargetLesionDialog (clone this)}}
{{>nonTargetMeasurementDialog (clone this)}}
{{>nonTargetResponseDialog (clone this)}}
{{>measurementTableHUD (clone this)}}
</div>

View File

@ -5,9 +5,9 @@
var toolType = 'bidirectional';
var configuration = {
setLesionNumberCallback: setLesionNumberCallback,
getLesionLocationCallback: getLesionLocationCallback,
changeLesionLocationCallback: changeLesionLocationCallback
setMeasurementNumberCallback: setMeasurementNumberCallback,
getMeasurementLocationCallback: getMeasurementLocationCallback,
changeMeasurementLocationCallback: changeMeasurementLocationCallback
};
// Used to cancel tool placement
@ -17,18 +17,18 @@
// Set lesion number
// Get Target lesions on image
function setLesionNumberCallback(measurementData, eventData, doneCallback) {
var lesionNumber = 1;
doneCallback(lesionNumber);
function setMeasurementNumberCallback(measurementData, eventData, doneCallback) {
var measurementNumber = 1;
doneCallback(measurementNumber);
}
// Define a callback to get your text annotation
// This could be used, e.g. to open a modal
function getLesionLocationCallback(measurementData, eventData, doneCallback) {
function getMeasurementLocationCallback(measurementData, eventData, doneCallback) {
//doneCallback(prompt('Enter your lesion location:'));
}
function changeLesionLocationCallback(measurementData, eventData, doneCallback) {
function changeMeasurementLocationCallback(measurementData, eventData, doneCallback) {
//doneCallback(prompt('Change your lesion location:'));
}
@ -97,8 +97,8 @@
return;
}
function doneCallback(lesionNumber) {
measurementData.lesionNumber = lesionNumber;
function doneCallback(measurementNumber) {
measurementData.measurementNumber = measurementNumber;
measurementData.active = false;
cornerstone.updateImage(element);
}
@ -111,8 +111,8 @@
// Set lesion number and lesion name
var config = cornerstoneTools.bidirectional.getConfiguration();
if (measurementData.lesionNumber === undefined) {
config.setLesionNumberCallback(measurementData, mouseEventData, doneCallback);
if (measurementData.measurementNumber === undefined) {
config.setMeasurementNumberCallback(measurementData, mouseEventData, doneCallback);
}
// associate this data with this imageId so we can render it and manipulate it
@ -150,7 +150,7 @@
cornerstoneTools.removeToolState(element, toolType, measurementData);
} else {
// Set lesionMeasurementData Session
config.getLesionLocationCallback(measurementData, mouseEventData, doneCallback);
config.getMeasurementLocationCallback(measurementData, mouseEventData, doneCallback);
}
// Unbind the Esc keydown hook
@ -175,8 +175,8 @@
return;
}
function doneCallback(lesionNumber) {
measurementData.lesionNumber = lesionNumber;
function doneCallback(measurementNumber) {
measurementData.measurementNumber = measurementNumber;
measurementData.active = false;
cornerstone.updateImage(element);
}
@ -185,8 +185,8 @@
// Set lesion number and lesion name
var config = cornerstoneTools.bidirectional.getConfiguration();
if (measurementData.lesionNumber === undefined) {
config.setLesionNumberCallback(measurementData, mouseEventData, doneCallback);
if (measurementData.measurementNumber === undefined) {
config.setMeasurementNumberCallback(measurementData, mouseEventData, doneCallback);
}
// associate this data with this imageId so we can render it and manipulate it
@ -205,7 +205,7 @@
cornerstoneTools.removeToolState(element, toolType, measurementData);
} else {
// Set lesionMeasurementData Session
config.getLesionLocationCallback(measurementData, touchEventData, doneCallback);
config.getMeasurementLocationCallback(measurementData, touchEventData, doneCallback);
}
// perpendicular line is not connected to long-line
@ -1025,7 +1025,7 @@
var lengthText = ' L ' + length.toFixed(1) + suffix;
var widthText = ' W ' + width.toFixed(1) + suffix;
var textLines = [ 'Target ' + data.lesionNumber, lengthText, widthText ];
var textLines = [ 'Target ' + data.measurementNumber, lengthText, widthText ];
var boundingBox = cornerstoneTools.drawTextBox(context,
textLines,
@ -1075,7 +1075,7 @@
data.active = true;
cornerstone.updateImage(element);
// Allow relabelling via a callback
config.changeLesionLocationCallback(data, eventData, doneCallback);
config.changeMeasurementLocationCallback(data, eventData, doneCallback);
e.stopImmediatePropagation();
return false;

View File

@ -5,9 +5,9 @@
var toolType = 'nonTarget';
var configuration = {
setLesionNumberCallback: setLesionNumberCallback,
getLesionLocationCallback: getLesionLocationCallback,
changeLesionLocationCallback: changeLesionLocationCallback,
setMeasurementNumberCallback: setMeasurementNumberCallback,
getmeasurementLocationCallback: getmeasurementLocationCallback,
changemeasurementLocationCallback: changemeasurementLocationCallback,
drawHandles: false,
drawHandlesOnHover: true,
arrowFirst: true
@ -18,20 +18,20 @@
ESC: 27
};
// Set lesion number
// Get Non-Target lesions on image
function setLesionNumberCallback(measurementData, eventData, doneCallback) {
var lesionNumber = 1;
doneCallback(lesionNumber);
// Set measurement number
// Get Non-Target measurements on image
function setMeasurementNumberCallback(measurementData, eventData, doneCallback) {
var measurementNumber = 1;
doneCallback(measurementNumber);
}
// Define a callback to get your text annotation
// This could be used, e.g. to open a modal
function getLesionLocationCallback(measurementData, eventData, doneCallback) {
doneCallback(prompt('Enter your lesion location:'));
function getmeasurementLocationCallback(measurementData, eventData, doneCallback) {
doneCallback(prompt('Enter your measurement location:'));
}
function changeLesionLocationCallback(measurementData, eventData, doneCallback) {
doneCallback(prompt('Change your lesion location:'));
function changemeasurementLocationCallback(measurementData, eventData, doneCallback) {
doneCallback(prompt('Change your measurement location:'));
}
/// --- Mouse Tool --- ///
@ -39,8 +39,8 @@
function addNewMeasurement(mouseEventData) {
var element = mouseEventData.element;
function doneCallback(lesionNumber) {
measurementData.lesionNumber = lesionNumber;
function doneCallback(measurementNumber) {
measurementData.measurementNumber = measurementNumber;
measurementData.active = true;
cornerstone.updateImage(element);
}
@ -53,9 +53,9 @@
var config = cornerstoneTools.nonTarget.getConfiguration();
// Set lesion number and lesion name
if (measurementData.lesionNumber === undefined) {
config.setLesionNumberCallback(measurementData, mouseEventData, doneCallback);
// Set measurement number and measurement name
if (measurementData.measurementNumber === undefined) {
config.setMeasurementNumberCallback(measurementData, mouseEventData, doneCallback);
}
// associate this data with this imageId so we can render it and manipulate it
@ -92,7 +92,7 @@
// delete the measurement
cornerstoneTools.removeToolState(mouseEventData.element, toolType, measurementData);
} else {
config.getLesionLocationCallback(measurementData, mouseEventData, doneCallback);
config.getmeasurementLocationCallback(measurementData, mouseEventData, doneCallback);
}
// Unbind the Esc keydown hook
@ -223,13 +223,13 @@
if (config.drawHandles) {
cornerstoneTools.drawHandles(context, eventData, data.handles, color);
} else if (config.drawHandlesOnHover && data.handles.start.active) {
cornerstoneTools.drawHandles(context, eventData, [ lesion.handles.start ], color);
cornerstoneTools.drawHandles(context, eventData, [ measurement.handles.start ], color);
} else if (config.drawHandlesOnHover && data.handles.end.active) {
cornerstoneTools.drawHandles(context, eventData, [ lesion.handles.end ], color);
cornerstoneTools.drawHandles(context, eventData, [ measurement.handles.end ], color);
}
// Draw the text
if (data.lesionNumber) {
if (data.measurementNumber) {
// Draw linked line as dashed
var mid = {
x: (handleStartCanvas.x + handleEndCanvas.x) / 2,
@ -245,7 +245,7 @@
context.lineTo(canvasTextLocation.x + 20, canvasTextLocation.y + 20);
context.stroke();
var boundingBox = cornerstoneTools.drawTextBox(context, 'Non-Target ' + data.lesionNumber, canvasTextLocation.x, canvasTextLocation.y, color);
var boundingBox = cornerstoneTools.drawTextBox(context, 'Non-Target ' + data.measurementNumber, canvasTextLocation.x, canvasTextLocation.y, color);
data.handles.textBox.boundingBox = boundingBox;
}
@ -259,8 +259,8 @@
function addNewMeasurementTouch(touchEventData) {
var element = touchEventData.element;
function doneCallback(lesionNumber) {
measurementData.lesionNumber = lesionNumber;
function doneCallback(measurementNumber) {
measurementData.measurementNumber = measurementNumber;
measurementData.active = true;
cornerstone.updateImage(element);
}
@ -272,9 +272,9 @@
$(element).off('CornerstoneToolsTap', cornerstoneTools.nonTargetTouch.tapCallback);
var config = cornerstoneTools.nonTarget.getConfiguration();
// Set lesion number and lesion name
if (measurementData.lesionName === undefined) {
config.setLesionNumberCallback(measurementData, touchEventData, doneCallback);
// Set measurement number and measurement name
if (measurementData.measurementName === undefined) {
config.setMeasurementNumberCallback(measurementData, touchEventData, doneCallback);
}
cornerstone.updateImage(element);
@ -287,7 +287,7 @@
cornerstoneTools.removeToolState(element, toolType, measurementData);
}
config.getLesionLocationCallback(measurementData, touchEventData, doneCallback);
config.getmeasurementLocationCallback(measurementData, touchEventData, doneCallback);
$(element).on('CornerstoneToolsTouchDrag', cornerstoneTools.nonTargetTouch.touchMoveHandle);
$(element).on('CornerstoneToolsDragStartActive', cornerstoneTools.nonTargetTouch.touchDownActivateCallback);
@ -330,7 +330,7 @@
data.active = true;
cornerstone.updateImage(element);
// Allow relabelling via a callback
config.changeLesionLocationCallback(data, eventData, doneCallback);
config.changemeasurementLocationCallback(data, eventData, doneCallback);
e.stopImmediatePropagation();
return false;

View File

@ -13,7 +13,7 @@
}];
var configuration = {
setLesionNumberCallback: setLesionNumberCallback,
setmeasurementNumberCallback: setmeasurementNumberCallback,
getLesionLocationCallback: getLesionLocationCallback,
changeLesionLocationCallback: changeLesionLocationCallback,
drawHandles: false,
@ -28,9 +28,9 @@
// Set lesion number
// Get Non-Target lesions on image
function setLesionNumberCallback(measurementData, eventData, doneCallback) {
var lesionNumber = 1;
doneCallback(lesionNumber);
function setmeasurementNumberCallback(measurementData, eventData, doneCallback) {
var measurementNumber = 1;
doneCallback(measurementNumber);
}
// Define a callback to get your text annotation
// This could be used, e.g. to open a modal
@ -61,8 +61,8 @@
function addNewMeasurement(mouseEventData) {
var element = mouseEventData.element;
function doneCallback(lesionNumber) {
measurementData.lesionNumber = lesionNumber;
function doneCallback(measurementNumber) {
measurementData.measurementNumber = measurementNumber;
measurementData.active = true;
cornerstone.updateImage(element);
}
@ -76,8 +76,8 @@
var config = cornerstoneTools[toolType].getConfiguration();
// Set lesion number and lesion name
if (measurementData.lesionNumber === undefined) {
config.setLesionNumberCallback(measurementData, mouseEventData, doneCallback);
if (measurementData.measurementNumber === undefined) {
config.setmeasurementNumberCallback(measurementData, mouseEventData, doneCallback);
}
// associate this data with this imageId so we can render it and manipulate it
@ -287,7 +287,7 @@
}
// Draw the text
if (data.lesionNumber) {
if (data.measurementNumber) {
// Draw linked line as dashed
var mid = {
x: (handleStartCanvas.x + handleEndCanvas.x) / 2,
@ -303,7 +303,7 @@
context.lineTo(canvasTextLocation.x + 20, canvasTextLocation.y + 20);
context.stroke();
var boundingBox = cornerstoneTools.drawTextBox(context, "Target " + +data.lesionNumber, canvasTextLocation.x, canvasTextLocation.y, color);
var boundingBox = cornerstoneTools.drawTextBox(context, "Target " + +data.measurementNumber, canvasTextLocation.x, canvasTextLocation.y, color);
data.handles.textBox.boundingBox = boundingBox;
}
@ -317,8 +317,8 @@
function addNewMeasurementTouch(touchEventData) {
var element = touchEventData.element;
function doneCallback(lesionNumber) {
measurementData.lesionNumber = lesionNumber;
function doneCallback(measurementNumber) {
measurementData.measurementNumber = measurementNumber;
measurementData.active = true;
cornerstone.updateImage(element);
}
@ -332,7 +332,7 @@
// Set lesion number and lesion name
if (measurementData.lesionName === undefined) {
config.setLesionNumberCallback(measurementData, touchEventData, doneCallback);
config.setmeasurementNumberCallback(measurementData, touchEventData, doneCallback);
}
cornerstone.updateImage(element);

View File

@ -9,9 +9,9 @@ import './measurementLocationDialog/measurementLocationDialog.html';
import './measurementLocationDialog/measurementLocationDialog.js';
import './measurementLocationDialog/measurementLocationDialog.styl';
import './nonTargetLesionDialog/nonTargetLesionDialog.html';
import './nonTargetLesionDialog/nonTargetLesionDialog.styl';
import './nonTargetLesionDialog/nonTargetLesionDialog.js';
import './nonTargetMeasurementDialog/nonTargetMeasurementDialog.html';
import './nonTargetMeasurementDialog/nonTargetMeasurementDialog.styl';
import './nonTargetMeasurementDialog/nonTargetMeasurementDialog.js';
import './nonTargetResponseDialog/nonTargetResponseDialog.html';
import './nonTargetResponseDialog/nonTargetResponseDialog.styl';

View File

@ -1,7 +1,7 @@
import { OHIF } from 'meteor/ohif:core';
function closeHandler(dialog) {
// Hide the lesion dialog
// Hide the measurement dialog
$(dialog).css('display', 'none');
// Remove the backdrop
@ -11,8 +11,8 @@ function closeHandler(dialog) {
setFocusToActiveViewport();
}
// This event sets lesion number for new lesion
function getSetLesionNumberCallbackFunction(measurementTypeId, measurementApi, timepointApi) {
// This event sets measurement number for new measurement
function getSetMeasurementNumberCallbackFunction(measurementTypeId, measurementApi, timepointApi) {
return (measurementData, eventData, doneCallback) => {
// Get the current element's timepointId from the study date metadata
var element = eventData.element;
@ -30,29 +30,29 @@ function getSetLesionNumberCallbackFunction(measurementTypeId, measurementApi, t
return;
}
// Get a lesion number for this lesion, depending on whether or not the same lesion previously
// Get a measurement number for this measurement, depending on whether or not the same measurement previously
// exists at a different timepoint
const timepointId = timepoint.timepointId;
const collection = measurementApi[measurementTypeId];
const measurementNumber = OHIF.measurements.MeasurementManager.getNewMeasurementNumber(timepointId, collection, timepointApi);
measurementData.measurementNumber = measurementNumber;
// Set lesion number
// Set measurement number
doneCallback(measurementNumber);
};
}
// This event determines whether or not to show the lesion dialog
// If there already exists a lesion with this specific lesion number,
// This event determines whether or not to show the measurement dialog
// If there already exists a measurement with this specific measurement number,
// related to the chosen location.
function getLesionLocationCallback(measurementData, eventData) {
function getMeasurementLocationCallback(measurementData, eventData) {
return;
Template.measurementLocationDialog.measurementData = measurementData;
// Reset the doneCallback saved in the template so we don't call the change event's done callback
Template.measurementLocationDialog.doneCallback = undefined;
// Get the lesion location dialog
// Get the measurement location dialog
var dialog = $('#measurementLocationDialog');
Template.measurementLocationDialog.dialog = dialog;
@ -68,7 +68,7 @@ function getLesionLocationCallback(measurementData, eventData) {
var selector = dialog.find('select.selectMeasurementLocation');
selector.find('option:first').prop('selected', true);
// Find out if this lesion number is already added in the lesion manager for another timepoint
// Find out if this measurement number is already added in the measurement manager for another timepoint
// If it is, stop here because we don't need the dialog.
var locationUID = OHIF.measurements.MeasurementManager.getLocationIdIfMeasurementExists(measurementData);
if (locationUID) {
@ -76,13 +76,13 @@ function getLesionLocationCallback(measurementData, eventData) {
measurementData.id = 'notready';
measurementData.locationUID = locationUID;
LesionManager.updateLesionData(measurementData);
MeasurementManager.updateMeasurementData(measurementData);
closeHandler();
return;
}
// If it isn't, continue to open the dialog and have the user choose a lesion location
// If it isn't, continue to open the dialog and have the user choose a measurement location
// Show the lesion location dialog above
// Show the measurement location dialog above
var dialogProperty = {
top: eventData.currentPoints.page.y - dialog.outerHeight() - 40,
left: eventData.currentPoints.page.x - dialog.outerWidth() / 2,
@ -112,12 +112,12 @@ function getLesionLocationCallback(measurementData, eventData) {
dialog.focus();
}
changeLesionLocationCallback = function(measurementData, eventData, doneCallback) {
changeMeasurementLocationCallback = function(measurementData, eventData, doneCallback) {
return;
Template.measurementLocationDialog.measurementData = measurementData;
Template.measurementLocationDialog.doneCallback = doneCallback;
// Get the lesion location dialog
// Get the measurement location dialog
var dialog = $('#measurementLocationRelabelDialog');
// Show/Hide Convert To NonTarget option in measurementLocationRelabelDialog
@ -137,7 +137,7 @@ changeLesionLocationCallback = function(measurementData, eventData, doneCallback
closeHandler(dialog);
});
// Show the lesion location dialog above
// Show the measurement location dialog above
var dialogProperty = {
display: 'block'
};
@ -164,7 +164,7 @@ changeLesionLocationCallback = function(measurementData, eventData, doneCallback
return;
}
LesionLocations.update({},
MeasurementLocations.update({},
{
$set: {
selected: false
@ -173,7 +173,7 @@ changeLesionLocationCallback = function(measurementData, eventData, doneCallback
multi: true
});
var currentLocation = LesionLocations.findOne({
var currentLocation = MeasurementLocations.findOne({
id: measurement.locationId
});
@ -181,7 +181,7 @@ changeLesionLocationCallback = function(measurementData, eventData, doneCallback
return;
}
LesionLocations.update(currentLocation._id, {
MeasurementLocations.update(currentLocation._id, {
$set: {
selected: true
}
@ -195,9 +195,9 @@ Template.measurementLocationDialog.onCreated(() => {
const timepointApi = instance.data.timepointApi;
const config = {
setLesionNumberCallback: getSetLesionNumberCallbackFunction(measurementTypeId, measurementApi, timepointApi),
getLesionLocationCallback: getLesionLocationCallback,
changeLesionLocationCallback: changeLesionLocationCallback
setMeasurementNumberCallback: getSetMeasurementNumberCallbackFunction(measurementTypeId, measurementApi, timepointApi),
getMeasurementLocationCallback: getMeasurementLocationCallback,
changeMeasurementLocationCallback: changeMeasurementLocationCallback
};
cornerstoneTools.bidirectional.setConfiguration(config);
@ -225,7 +225,7 @@ Template.measurementLocationDialog.events({
}
// Get selected location data
var locationObj = LesionLocations.findOne({
var locationObj = MeasurementLocations.findOne({
_id: selectedOptionId
});
@ -242,7 +242,7 @@ Template.measurementLocationDialog.events({
doneCallback(measurementData);
}
},
'click #removeLesion': function() {
'click #removeMeasurement': function() {
var measurementData = Template.measurementLocationDialog.measurementData;
var doneCallback = Template.measurementLocationDialog.doneCallback;
var dialog = Template.measurementLocationDialog.dialog;
@ -268,11 +268,11 @@ Template.measurementLocationDialog.events({
const instance = Template.instance();
const measurementApi = instance.data.measurementApi;
OHIF.lesiontracker.convertToNonTarget(measurementApi, measurementData);
OHIF.measurementtracker.convertToNonTarget(measurementApi, measurementData);
closeHandler(dialog);
},
'click #btnCloseLesionPopup': function() {
'click #btnCloseMeasurementPopup': function() {
var dialog = Template.measurementLocationDialog.dialog;
closeHandler(dialog);
},
@ -289,6 +289,6 @@ Template.measurementLocationDialog.events({
Template.measurementLocationDialog.helpers({
measurementLocations() {
return LesionLocations.find();
return MeasurementLocations.find();
}
});

View File

@ -1,5 +1,5 @@
<template name="nonTargetLesionDialog">
<div id="nonTargetLesionLocationDialog" class="dialog-animated" tabindex="0">
<template name="nonTargetMeasurementDialog">
<div id="nonTargetMeasurementDialog" class="dialog-animated" tabindex="0">
<div class="dialogHeader">
<h4>Select Lesion Location</h4>
</div>

View File

@ -1,7 +1,7 @@
import { OHIF } from 'meteor/ohif:core';
function closeHandler(dialog) {
// Hide the lesion dialog
// Hide the measurement dialog
$(dialog).css('display', 'none');
// Remove the backdrop
@ -11,8 +11,8 @@ function closeHandler(dialog) {
setFocusToActiveViewport();
}
// This event sets lesion number for new lesion
function getSetLesionNumberCallbackFunction(measurementTypeId, measurementApi, timepointApi) {
// This event sets measurement number for new measurement
function getSetMeasurementNumberCallbackFunction(measurementTypeId, measurementApi, timepointApi) {
return (measurementData, eventData, doneCallback) => {
// Get the current element's timepointId from the study date metadata
var element = eventData.element;
@ -27,14 +27,14 @@ function getSetLesionNumberCallbackFunction(measurementTypeId, measurementApi, t
return;
}
// Get a lesion number for this lesion, depending on whether or not the same lesion previously
// Get a measurement number for this measurement, depending on whether or not the same measurement previously
// exists at a different timepoint
const timepointId = timepoint.timepointId;
const collection = measurementApi[measurementTypeId];
const measurementNumber = OHIF.measurements.MeasurementManager.getNewMeasurementNumber(timepointId, collection, timepointApi);
measurementData.measurementNumber = measurementNumber;
// Set lesion number
// Set measurement number
doneCallback(measurementNumber);
};
}
@ -64,16 +64,16 @@ function selectNonTargetResponse(responseCode) {
});
}
// This event determines whether or not to show the Non-Target lesion dialog
// If there already exists a lesion with this specific lesion number,
// This event determines whether or not to show the Non-Target measurement dialog
// If there already exists a measurement with this specific measurement number,
// related to the chosen location.
function getLesionLocationCallback(measurementData, eventData) {
function getMeasurementLocationCallback(measurementData, eventData) {
return 'Test Location';
Template.nonTargetLesionDialog.measurementData = measurementData;
Template.nonTargetMeasurementDialog.measurementData = measurementData;
// Get the non-target lesion location dialog
var dialog = $('#nonTargetLesionLocationDialog');
Template.nonTargetLesionDialog.dialog = dialog;
// Get the non-target measurement location dialog
var dialog = $('#nonTargetMeasurementLocationDialog');
Template.nonTargetMeasurementDialog.dialog = dialog;
// Show the backdrop
UI.render(Template.removableBackdrop, document.body);
@ -84,7 +84,7 @@ function getLesionLocationCallback(measurementData, eventData) {
});
// Find the select option box
var selectorLocation = dialog.find('select#selectNonTargetLesionLocation');
var selectorLocation = dialog.find('select#selectNonTargetMeasurementLocation');
selectorLocation.find('option:first').prop('selected', 'selected');
@ -102,7 +102,7 @@ function getLesionLocationCallback(measurementData, eventData) {
// Allow location selection
selectorLocation.removeAttr('disabled');
// Find out if this lesion number is already added in the lesion manager for another timepoint
// Find out if this measurement number is already added in the measurement manager for another timepoint
// If it is, disable selector location
var locationId = OHIF.measurements.MeasurementManager.getLocationIdIfMeasurementExists(measurementData);
if (locationId) {
@ -117,7 +117,7 @@ function getLesionLocationCallback(measurementData, eventData) {
// Disable selector location to prevent selecting a new location
function disableLocationSelection(locationId) {
var locationObject = LesionLocations.findOne({
var locationObject = MeasurementLocations.findOne({
id: locationId
});
@ -129,7 +129,7 @@ function getLesionLocationCallback(measurementData, eventData) {
selectorLocation.prop('disabled', true);
}
// Show the nonTargetLesion dialog above
// Show the nonTargetMeasurement dialog above
var dialogProperty = {
top: eventData.currentPoints.page.y - dialog.outerHeight() - 40,
left: eventData.currentPoints.page.x - dialog.outerWidth() / 2,
@ -160,12 +160,12 @@ function getLesionLocationCallback(measurementData, eventData) {
}
changeNonTargetLocationCallback = function(measurementData, eventData, doneCallback) {
Template.nonTargetLesionDialog.measurementData = measurementData;
Template.nonTargetLesionDialog.doneCallback = doneCallback;
Template.nonTargetMeasurementDialog.measurementData = measurementData;
Template.nonTargetMeasurementDialog.doneCallback = doneCallback;
// Get the non-target lesion location dialog
var dialog = $('#nonTargetLesionRelabelDialog');
Template.nonTargetLesionDialog.dialog = dialog;
// Get the non-target measurement location dialog
var dialog = $('#nonTargetMeasurementRelabelDialog');
Template.nonTargetMeasurementDialog.dialog = dialog;
// Show the backdrop
UI.render(Template.removableBackdrop, document.body);
@ -176,8 +176,8 @@ changeNonTargetLocationCallback = function(measurementData, eventData, doneCallb
});
// Find the select option box
var selectorLocation = dialog.find('select#selectNonTargetLesionLocation');
var selectorResponse = dialog.find('select#selectNonTargetLesionLocationResponse');
var selectorLocation = dialog.find('select#selectNonTargetMeasurementLocation');
var selectorResponse = dialog.find('select#selectNonTargetMeasurementLocationResponse');
selectorLocation.find('option:first').prop('selected', 'selected');
selectorResponse.find('option:first').prop('selected', 'selected');
@ -185,7 +185,7 @@ changeNonTargetLocationCallback = function(measurementData, eventData, doneCallb
// Allow location selection
selectorLocation.removeAttr('disabled');
// Show the nonTargetLesion dialog above
// Show the nonTargetMeasurement dialog above
var dialogProperty = {
display: 'block'
};
@ -212,7 +212,7 @@ changeNonTargetLocationCallback = function(measurementData, eventData, doneCallb
return;
}
LesionLocations.update({}, {
MeasurementLocations.update({}, {
$set: {
selected: false
}
@ -220,7 +220,7 @@ changeNonTargetLocationCallback = function(measurementData, eventData, doneCallb
multi: true
});
var currentLocation = LesionLocations.findOne({
var currentLocation = MeasurementLocations.findOne({
id: measurement.locationId
});
@ -228,7 +228,7 @@ changeNonTargetLocationCallback = function(measurementData, eventData, doneCallb
return;
}
LesionLocations.update(currentLocation._id, {
MeasurementLocations.update(currentLocation._id, {
$set: {
selected: true
}
@ -238,32 +238,32 @@ changeNonTargetLocationCallback = function(measurementData, eventData, doneCallb
selectNonTargetResponse(response);
};
Template.nonTargetLesionDialog.onCreated(() => {
Template.nonTargetMeasurementDialog.onCreated(() => {
const instance = Template.instance();
const measurementTypeId = 'nonTargets';
const measurementApi = instance.data.measurementApi;
const timepointApi = instance.data.timepointApi;
const config = {
setLesionNumberCallback: getSetLesionNumberCallbackFunction(measurementTypeId, measurementApi, timepointApi),
getLesionLocationCallback: getLesionLocationCallback,
changeLesionLocationCallback: changeLesionLocationCallback
setMeasurementNumberCallback: getSetMeasurementNumberCallbackFunction(measurementTypeId, measurementApi, timepointApi),
getMeasurementLocationCallback: getMeasurementLocationCallback,
changeMeasurementLocationCallback: changeMeasurementLocationCallback
};
cornerstoneTools.nonTarget.setConfiguration(config);
//cornerstoneTools.nonTarget.setConfiguration(config);
});
Template.nonTargetLesionDialog.events({
'change #selectNonTargetLesionLocationResponse': function(e) {
Template.nonTargetMeasurementDialog.events({
'change #selectNonTargetMeasurementLocationResponse': function(e) {
var responseCode = $(e.currentTarget).val();
selectNonTargetResponse(responseCode);
},
'click #nonTargetLesionOK': function() {
var dialog = Template.nonTargetLesionDialog.dialog;
var measurementData = Template.nonTargetLesionDialog.measurementData;
'click #nonTargetMeasurementOK': function() {
var dialog = Template.nonTargetMeasurementDialog.dialog;
var measurementData = Template.nonTargetMeasurementDialog.measurementData;
// Find the select option box
var selectorLocation = dialog.find('select#selectNonTargetLesionLocation');
var selectorLocation = dialog.find('select#selectNonTargetMeasurementLocation');
// Get the current value of the selector
var selectedOptionId = selectorLocation.find('option:selected').val();
@ -275,7 +275,7 @@ Template.nonTargetLesionDialog.events({
}
// Get selected location data
var locationObj = LesionLocations.findOne({
var locationObj = MeasurementLocations.findOne({
_id: selectedOptionId
});
@ -292,7 +292,7 @@ Template.nonTargetLesionDialog.events({
measurementData.id = 'notready';
}
/// Set the isTarget value to true, since this is the target-lesion dialog callback
/// Set the isTarget value to true, since this is the target-measurement dialog callback
measurementData.isTarget = false;
// Response is set from location response list
@ -300,16 +300,16 @@ Template.nonTargetLesionDialog.events({
selected: true
}).code;
// Adds lesion data to timepoints array
LesionManager.updateLesionData(measurementData);
// Adds measurement data to timepoints array
MeasurementManager.updateMeasurementData(measurementData);
// Close the dialog
closeHandler(dialog);
},
'click #removeLesion': function() {
var measurementData = Template.nonTargetLesionDialog.measurementData;
var doneCallback = Template.nonTargetLesionDialog.doneCallback;
var dialog = Template.nonTargetLesionDialog.dialog;
'click #removeMeasurement': function() {
var measurementData = Template.nonTargetMeasurementDialog.measurementData;
var doneCallback = Template.nonTargetMeasurementDialog.doneCallback;
var dialog = Template.nonTargetMeasurementDialog.dialog;
showConfirmDialog(function() {
if (doneCallback && typeof doneCallback === 'function') {
@ -320,13 +320,13 @@ Template.nonTargetLesionDialog.events({
closeHandler(dialog);
},
'click #btnCloseLesionPopup': function() {
var dialog = Template.nonTargetLesionDialog.dialog;
'click #btnCloseMeasurementPopup': function() {
var dialog = Template.nonTargetMeasurementDialog.dialog;
closeHandler(dialog);
},
'click a.convertNonTarget': function(evt) {
var measurementData = Template.nonTargetLesionDialog.measurementData;
var dialog = Template.nonTargetLesionDialog.dialog;
var measurementData = Template.nonTargetMeasurementDialog.measurementData;
var dialog = Template.nonTargetMeasurementDialog.dialog;
var button = $(evt.currentTarget);
var toolType = button.data('type');
@ -335,8 +335,8 @@ Template.nonTargetLesionDialog.events({
closeHandler(dialog);
},
'keydown #lesionLocationDialog, keydown #lesionLocationRelabelDialog': function(e) {
var dialog = Template.nonTargetLesionDialog.dialog;
'keydown #measurementLocationDialog, keydown #measurementLocationRelabelDialog': function(e) {
var dialog = Template.nonTargetMeasurementDialog.dialog;
// If Esc or Enter are pressed, close the dialog
if (e.which === keys.ESC || e.which === keys.ENTER) {
@ -360,9 +360,9 @@ var conversionOptions = [{
name: 'Excluded (EX)'
}];
Template.nonTargetLesionDialog.helpers({
lesionLocations: function() {
return LesionLocations.find();
Template.nonTargetMeasurementDialog.helpers({
measurementLocations: function() {
return MeasurementLocations.find();
},
locationResponses: function() {
return LocationResponses.find();

View File

@ -37,9 +37,9 @@ Meteor.methods({
});
},
retrieveTimepoints(filter = {}) {
retrieveTimepoints(filter) {
OHIF.log.info('Retrieving Timepoints from the Server');
return Timepoints.find(filter).fetch();
return Timepoints.find(filter || {}).fetch();
},
storeMeasurements(measurementData) {
@ -66,7 +66,7 @@ Meteor.methods({
measurementTools.forEach(tool => {
measurementData[tool.id] = MeasurementCollections[tool.id].find(filter).fetch();
measurementData[tool.id] = MeasurementCollections[tool.id].find(filter || {}).fetch();
});
return measurementData;

View File

@ -1,7 +1,7 @@
<template name="measurementTableRow">
<div class="measurementTableRow {{#unless rowItem.location}}warning{{/unless}}{{#if responseStatus}}response-status{{/if}}" data-measurementid="{{_id}}">
<div class='lesionRowSidebar'>
<div class="lesionNumber">
<div class='measurementRowSidebar'>
<div class="measurementNumber">
{{rowItem.measurementNumber}}
</div>
{{#unless rowItem.location}}
@ -17,7 +17,7 @@
</div>
{{/if}}
</div>
<div class="lesionDetails">
<div class="measurementDetails">
<div class='location'>
{{#if rowItem.location}}
{{rowItem.location}}

View File

@ -20,7 +20,7 @@ var keys = {
};
Template.measurementTableRow.events({
'click .lesionRowSidebar'(event, instance) {
'click .measurementRowSidebar'(event, instance) {
const $row = instance.$('.measurementTableRow');
$row.closest('.measurementTableView').find('.measurementTableRow').not($row).removeClass('active');
$row.toggleClass('active');

View File

@ -29,14 +29,14 @@
&:before
opacity: 1
.lesionRowSidebar
.measurementRowSidebar
theme('color', '$activeColor')
.rowOptions
height: 35px
visibility: visible
&.response-status .lesionRowSidebar .response-status-icon
&.response-status .measurementRowSidebar .response-status-icon
theme('background-color', '$defaultColor')
theme('color', '$uiGray')
border-radius: 11px
@ -48,7 +48,7 @@
text-align: center
width: 21px
&.warning .lesionRowSidebar
&.warning .measurementRowSidebar
theme('background-color', '$uiYellow')
theme('color', '$textPrimaryColor')
@ -95,7 +95,7 @@
width: 11px
height: 11px
.lesionRowSidebar
.measurementRowSidebar
theme('background', '$uiGray')
theme('color', '$textSecondaryColor')
cursor: pointer
@ -103,14 +103,14 @@
max-width: 30px
transition(all 0.3s ease)
.lesionNumber
.measurementNumber
font-size: 14px
font-weight: 400
margin-right: 5px
padding-top: 10px
text-align: center
.lesionDetails
.measurementDetails
flex: 1
padding: 5px 2px 0 0

View File

@ -1,5 +1,4 @@
import { $ } from 'meteor/jquery';
import { OHIF } from 'meteor/ohif:core';
OHIF.measurements.syncMeasurementAndToolData = measurement => {

View File

@ -14,7 +14,7 @@ switchToTab = function(contentId) {
OHIF.log.info('Switching to tab: ' + contentId);
// Clear the cornerstone tool data to sync the measurements with the measurements API
cornerstoneTools.globalImageIdSpecificToolStateManager.restoreToolState({});
cornerstoneTools.globalImageIdSpecificToolStateManager = cornerstoneTools.newImageIdSpecificToolStateManager();
$('.tab-content .tab-pane').removeClass('active');
if (contentId !== 'studylistTab') {