From 5dc2f8dc9c1959654a7c9ec01398a89100d62b01 Mon Sep 17 00:00:00 2001 From: Bruno Alves de Faria Date: Thu, 25 Jan 2018 10:08:38 -0200 Subject: [PATCH] Implementing saving behavior per active viewport --- LesionTracker/client/lib/customCommands.js | 30 +++++++++++++++++-- .../client/components/longitudinal/index.js | 1 + .../imageViewportIcons.html | 1 + .../longitudinalViewportOverlay.html | 9 +++--- .../measurementTableRow.js | 5 +++- .../handleChildMeasurementAdded.js | 5 +++- .../handleChildMeasurementModified.js | 5 +++- .../handleChildMeasurementRemoved.js | 5 +++- .../handleSingleMeasurementAdded.js | 5 +++- .../handleSingleMeasurementModified.js | 5 +++- .../handleSingleMeasurementRemoved.js | 4 ++- .../client/lib/toggleLabelButton.js | 5 +++- .../viewportOverlay/viewportOverlay.styl | 1 - 13 files changed, 66 insertions(+), 15 deletions(-) create mode 100644 Packages/ohif-measurements/client/components/longitudinal/longitudinalViewportOverlay/imageViewportIcons.html diff --git a/LesionTracker/client/lib/customCommands.js b/LesionTracker/client/lib/customCommands.js index 776d5804c..65e8057d3 100644 --- a/LesionTracker/client/lib/customCommands.js +++ b/LesionTracker/client/lib/customCommands.js @@ -21,7 +21,7 @@ Meteor.startup(() => { name: 'UN Target' }]; customTools.forEach(tool => { - _.defaults(OHIF.hotkeys.defaults.viewer, { [tool.id]: '' }); + _.defaults(OHIF.hotkeys.defaults[contextName], { [tool.id]: '' }); OHIF.commands.register(contextName, tool.id, { name: tool.name, action: tool.action || (() => toolManager.setActiveTool(tool.id)) @@ -35,10 +35,36 @@ Meteor.startup(() => { action: OHIF.viewerbase.viewportUtils.linkStackScroll }]; customCommands.forEach(command => { - _.defaults(OHIF.hotkeys.defaults.viewer, { [command.id]: '' }); + _.defaults(OHIF.hotkeys.defaults[contextName], { [command.id]: '' }); OHIF.commands.register(contextName, command.id, { name: command.name, action: command.action || (() => toolManager.setActiveTool(command.id)) }); }); + + // Add the save command + OHIF.commands.register(contextName, 'storeMeasurements', () => { + // Register the hotkey default + _.defaults(OHIF.hotkeys.defaults[contextName], { storeMeasurements: '' }); + + // Clear signaled unsaved changes... + const successHandler = () => { + OHIF.ui.unsavedChanges.clear(`${instance.path}.*`); + instance.saveObserver.changed(); + }; + + // Display the error messages + const errorHandler = data => { + OHIF.ui.showDialog('dialogInfo', Object.assign({ class: 'themed' }, data)); + }; + + const promise = OHIF.viewer.measurementApi.storeMeasurements(); + promise.then(successHandler).catch(errorHandler); + OHIF.ui.showDialog('dialogLoading', { + promise, + text: 'Saving measurement data' + }); + + return promise; + }); }); diff --git a/Packages/ohif-measurements/client/components/longitudinal/index.js b/Packages/ohif-measurements/client/components/longitudinal/index.js index a0f9e99c6..43398f973 100644 --- a/Packages/ohif-measurements/client/components/longitudinal/index.js +++ b/Packages/ohif-measurements/client/components/longitudinal/index.js @@ -3,6 +3,7 @@ import './longitudinalStudyListStudy/longitudinalStudyListStudy.html'; import './longitudinalStudyListStudy/longitudinalStudyListStudy.styl'; import './longitudinalStudyListStudy/longitudinalStudyListStudy.js'; +import './longitudinalViewportOverlay/imageViewportIcons.html'; import './longitudinalViewportOverlay/longitudinalViewportOverlay.html'; import './longitudinalViewportOverlay/longitudinalViewportOverlay.js'; diff --git a/Packages/ohif-measurements/client/components/longitudinal/longitudinalViewportOverlay/imageViewportIcons.html b/Packages/ohif-measurements/client/components/longitudinal/longitudinalViewportOverlay/imageViewportIcons.html new file mode 100644 index 000000000..7b6bf52f8 --- /dev/null +++ b/Packages/ohif-measurements/client/components/longitudinal/longitudinalViewportOverlay/imageViewportIcons.html @@ -0,0 +1 @@ + diff --git a/Packages/ohif-measurements/client/components/longitudinal/longitudinalViewportOverlay/longitudinalViewportOverlay.html b/Packages/ohif-measurements/client/components/longitudinal/longitudinalViewportOverlay/longitudinalViewportOverlay.html index 8e5400da5..6b966cccd 100644 --- a/Packages/ohif-measurements/client/components/longitudinal/longitudinalViewportOverlay/longitudinalViewportOverlay.html +++ b/Packages/ohif-measurements/client/components/longitudinal/longitudinalViewportOverlay/longitudinalViewportOverlay.html @@ -9,13 +9,14 @@
{{studyDescription}}
{{formatDA studyDate}} {{formatTM studyTime}}
- {{#if linked}} -
{{#if zoom}}Zoom: {{formatNumberPrecision zoom 0}}%{{/if}}
diff --git a/Packages/ohif-measurements/client/components/measurementTable/measurementTableRow/measurementTableRow.js b/Packages/ohif-measurements/client/components/measurementTable/measurementTableRow/measurementTableRow.js index 86355bc3f..faa7c4346 100644 --- a/Packages/ohif-measurements/client/components/measurementTable/measurementTableRow/measurementTableRow.js +++ b/Packages/ohif-measurements/client/components/measurementTable/measurementTableRow/measurementTableRow.js @@ -94,7 +94,10 @@ Template.measurementTableRow.events({ _.each($('.imageViewerViewport'), element => cornerstone.updateImage(element)); // Notify that viewer suffered changes - OHIF.ui.unsavedChanges.set('viewer.studyViewer.measurements.deleted'); + const { timepointId } = measurement; + const basePath = 'viewer.studyViewer.measurements'; + const timepointPath = timepointId ? `.${timepointId}` : ''; + OHIF.ui.unsavedChanges.set(`${basePath}${timepointPath}.deleted`); }); } }); diff --git a/Packages/ohif-measurements/client/lib/MeasurementHandlers/handleChildMeasurementAdded.js b/Packages/ohif-measurements/client/lib/MeasurementHandlers/handleChildMeasurementAdded.js index de0d86d98..b6eeaf3ee 100644 --- a/Packages/ohif-measurements/client/lib/MeasurementHandlers/handleChildMeasurementAdded.js +++ b/Packages/ohif-measurements/client/lib/MeasurementHandlers/handleChildMeasurementAdded.js @@ -90,5 +90,8 @@ export default function ({ instance, eventData, tool, toolGroupId, toolGroup }) } // Signal unsaved changes - OHIF.ui.unsavedChanges.set('viewer.studyViewer.measurements.' + eventData.toolType); + const { timepointId } = Collection.findOne(measurementData._id); + const basePath = 'viewer.studyViewer.measurements'; + const timepointPath = timepointId ? `.${timepointId}` : ''; + OHIF.ui.unsavedChanges.set(`${basePath}${timepointPath}.${eventData.toolType}`); } diff --git a/Packages/ohif-measurements/client/lib/MeasurementHandlers/handleChildMeasurementModified.js b/Packages/ohif-measurements/client/lib/MeasurementHandlers/handleChildMeasurementModified.js index cf7ab4e10..b5b4e593e 100644 --- a/Packages/ohif-measurements/client/lib/MeasurementHandlers/handleChildMeasurementModified.js +++ b/Packages/ohif-measurements/client/lib/MeasurementHandlers/handleChildMeasurementModified.js @@ -36,5 +36,8 @@ export default function ({ instance, eventData, tool, toolGroupId, toolGroup }) Collection.update(measurement._id, { $set: { [tool.attribute]: childMeasurement } }); // Signal unsaved changes - OHIF.ui.unsavedChanges.set('viewer.studyViewer.measurements.' + eventData.toolType); + const { timepointId } = Collection.findOne(measurementData._id); + const basePath = 'viewer.studyViewer.measurements'; + const timepointPath = timepointId ? `.${timepointId}` : ''; + OHIF.ui.unsavedChanges.set(`${basePath}${timepointPath}.${eventData.toolType}`); } diff --git a/Packages/ohif-measurements/client/lib/MeasurementHandlers/handleChildMeasurementRemoved.js b/Packages/ohif-measurements/client/lib/MeasurementHandlers/handleChildMeasurementRemoved.js index 817b9610d..d30f4d7ab 100644 --- a/Packages/ohif-measurements/client/lib/MeasurementHandlers/handleChildMeasurementRemoved.js +++ b/Packages/ohif-measurements/client/lib/MeasurementHandlers/handleChildMeasurementRemoved.js @@ -36,5 +36,8 @@ export default function ({ instance, eventData, tool, toolGroupId, toolGroup }) _.each($('.imageViewerViewport'), element => cornerstone.updateImage(element)); // Signal unsaved changes - OHIF.ui.unsavedChanges.set('viewer.studyViewer.measurements.' + eventData.toolType); + const { timepointId } = Collection.findOne(measurementData._id); + const basePath = 'viewer.studyViewer.measurements'; + const timepointPath = timepointId ? `.${timepointId}` : ''; + OHIF.ui.unsavedChanges.set(`${basePath}${timepointPath}.${eventData.toolType}`); } diff --git a/Packages/ohif-measurements/client/lib/MeasurementHandlers/handleSingleMeasurementAdded.js b/Packages/ohif-measurements/client/lib/MeasurementHandlers/handleSingleMeasurementAdded.js index f5bc1ad2e..27b14c214 100644 --- a/Packages/ohif-measurements/client/lib/MeasurementHandlers/handleSingleMeasurementAdded.js +++ b/Packages/ohif-measurements/client/lib/MeasurementHandlers/handleSingleMeasurementAdded.js @@ -49,5 +49,8 @@ export default function ({ instance, eventData, tool }) { }); // Signal unsaved changes - OHIF.ui.unsavedChanges.set('viewer.studyViewer.measurements.' + eventData.toolType); + const { timepointId } = Collection.findOne(measurementData._id); + const basePath = 'viewer.studyViewer.measurements'; + const timepointPath = timepointId ? `.${timepointId}` : ''; + OHIF.ui.unsavedChanges.set(`${basePath}${timepointPath}.${eventData.toolType}`); } diff --git a/Packages/ohif-measurements/client/lib/MeasurementHandlers/handleSingleMeasurementModified.js b/Packages/ohif-measurements/client/lib/MeasurementHandlers/handleSingleMeasurementModified.js index dfe9ce9e8..d689e656e 100644 --- a/Packages/ohif-measurements/client/lib/MeasurementHandlers/handleSingleMeasurementModified.js +++ b/Packages/ohif-measurements/client/lib/MeasurementHandlers/handleSingleMeasurementModified.js @@ -38,5 +38,8 @@ export default function ({ instance, eventData, tool, toolGroupId, toolGroup }) Collection.update(measurementId, { $set: measurement }); // Signal unsaved changes - OHIF.ui.unsavedChanges.set('viewer.studyViewer.measurements.' + eventData.toolType); + const { timepointId } = Collection.findOne(measurementData._id); + const basePath = 'viewer.studyViewer.measurements'; + const timepointPath = timepointId ? `.${timepointId}` : ''; + OHIF.ui.unsavedChanges.set(`${basePath}${timepointPath}.${eventData.toolType}`); } diff --git a/Packages/ohif-measurements/client/lib/MeasurementHandlers/handleSingleMeasurementRemoved.js b/Packages/ohif-measurements/client/lib/MeasurementHandlers/handleSingleMeasurementRemoved.js index 3084f1b21..0d70db365 100644 --- a/Packages/ohif-measurements/client/lib/MeasurementHandlers/handleSingleMeasurementRemoved.js +++ b/Packages/ohif-measurements/client/lib/MeasurementHandlers/handleSingleMeasurementRemoved.js @@ -33,5 +33,7 @@ export default function({ instance, eventData, tool, toolGroupId, toolGroup }) { _.each($('.imageViewerViewport'), element => cornerstone.updateImage(element)); // Signal unsaved changes - OHIF.ui.unsavedChanges.set('viewer.studyViewer.measurements.' + eventData.toolType); + const basePath = 'viewer.studyViewer.measurements'; + const timepointPath = timepointId ? `.${timepointId}` : ''; + OHIF.ui.unsavedChanges.set(`${basePath}${timepointPath}.${eventData.toolType}`); } diff --git a/Packages/ohif-measurements/client/lib/toggleLabelButton.js b/Packages/ohif-measurements/client/lib/toggleLabelButton.js index 0acb51e2e..6c5a041c8 100644 --- a/Packages/ohif-measurements/client/lib/toggleLabelButton.js +++ b/Packages/ohif-measurements/client/lib/toggleLabelButton.js @@ -60,7 +60,10 @@ OHIF.measurements.toggleLabelButton = options => { options.measurement.description = description; // Notify that viewer suffered changes - OHIF.ui.unsavedChanges.set('viewer.studyViewer.measurements.renamed'); + const { timepointId } = measurement; + const basePath = 'viewer.studyViewer.measurements'; + const timepointPath = timepointId ? `.${timepointId}` : ''; + OHIF.ui.unsavedChanges.set(`${basePath}${timepointPath}.renamed`); } }; buttonView = Blaze.renderWithData(Template.measureFlow, data, document.body); diff --git a/Packages/ohif-viewerbase/client/components/viewer/viewportOverlay/viewportOverlay.styl b/Packages/ohif-viewerbase/client/components/viewer/viewportOverlay/viewportOverlay.styl index 91b3ec981..c7e69a2a6 100644 --- a/Packages/ohif-viewerbase/client/components/viewer/viewportOverlay/viewportOverlay.styl +++ b/Packages/ohif-viewerbase/client/components/viewer/viewportOverlay/viewportOverlay.styl @@ -48,4 +48,3 @@ $viewportTagPadding = 20px margin: 2px width: 18px height: 18px - \ No newline at end of file