LT-275: Work towards proper measurement / tooldata syncing
This commit is contained in:
parent
ec6f96e714
commit
9aa7cf012f
@ -3,7 +3,7 @@
|
||||
<div class="viewerDialogs">
|
||||
{{>confirmDeleteDialog}}
|
||||
{{>measurementLocationDialog (clone this)}}
|
||||
{{>nonTargetLesionDialog (clone this)}}
|
||||
{{>nonTargetMeasurementDialog (clone this)}}
|
||||
{{>nonTargetResponseDialog (clone this)}}
|
||||
{{>measurementTableHUD (clone this)}}
|
||||
</div>
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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';
|
||||
|
||||
@ -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();
|
||||
}
|
||||
});
|
||||
|
||||
@ -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>
|
||||
@ -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();
|
||||
@ -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;
|
||||
|
||||
@ -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}}
|
||||
|
||||
@ -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');
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
import { $ } from 'meteor/jquery';
|
||||
|
||||
import { OHIF } from 'meteor/ohif:core';
|
||||
|
||||
OHIF.measurements.syncMeasurementAndToolData = measurement => {
|
||||
|
||||
@ -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') {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user