From 571eb90eb8167b6f47141b1d42648c8fcad11440 Mon Sep 17 00:00:00 2001 From: Erik Ziegler Date: Mon, 11 Jan 2016 12:01:11 +0100 Subject: [PATCH] Fixed loaded study indicator. Closes LT-91 --- .jshintrc | 6 ++ .../components/lesionTable/lesionTable.js | 93 +++++++++---------- .../imageViewerViewport.js | 31 ++++--- 3 files changed, 68 insertions(+), 62 deletions(-) diff --git a/.jshintrc b/.jshintrc index a33a168e3..2f87081ae 100644 --- a/.jshintrc +++ b/.jshintrc @@ -103,11 +103,17 @@ Meteor: true, Template: true, UI: true, + Session: true, // loglevel package log: true, // OHIF-package specific Globals + OHIF: true, + toolManager: true, + ViewerData: true, + ViewerStudies: true, + LesionManager: true, Timepoints: true, Measurements: true } diff --git a/Packages/lesiontracker/client/components/lesionTable/lesionTable.js b/Packages/lesiontracker/client/components/lesionTable/lesionTable.js index 361add86a..b204a62fe 100644 --- a/Packages/lesiontracker/client/components/lesionTable/lesionTable.js +++ b/Packages/lesiontracker/client/components/lesionTable/lesionTable.js @@ -71,58 +71,55 @@ Template.lesionTable.onRendered(function() { // Put a visual indicator (<) in timepoint header in lesion table for active timepoints // timepointLoaded property is used to put indicator for loaded timepoints in viewport self.autorun(function() { - var ViewerData = Session.get('ViewerData'); - var contentId = Session.get('activeContentId'); - if (contentId) { - var viewerData = ViewerData[contentId]; - if (viewerData) { - if (viewerData.loadedSeriesData) { - // Get study dates of imageViewerViewport elements - var loadedStudyDates = { - patientId: '', - dates: [] - }; + // Temporary until we have a real window manager with events for series/study changed + Session.get('NewSeriesLoaded'); - $('.imageViewerViewport').each(function(viewportIndex, element) { - var enabledElement = cornerstone.getEnabledElement(element); - if (!enabledElement || !enabledElement.image) { - return; - } + console.log('ViewerData changed, check for displayed timepoints'); + // Get study dates of imageViewerViewport elements + var loadedStudyDates = { + patientId: '', + dates: [] + }; - var imageId = enabledElement.image.imageId; - var study = cornerstoneTools.metaData.get('study', imageId); - var studyDate = study.studyDate; - loadedStudyDates.patientId = study.patientId; - - // Check whether or not studyDate has been added before - if (loadedStudyDates.dates.indexOf(studyDate) < 0) { - loadedStudyDates.dates.push(studyDate); - } - }); - - // If study date is loaded into viewport, set timepointLoaded property in Timepoints collection as true - // Else set timepointLoaded property as false - if (loadedStudyDates.dates.length) { - var timepoints = Timepoints.find({ - patientId: loadedStudyDates.patientId - }).fetch(); - - timepoints.forEach(function(timepoint) { - var timepointLoaded = false; - if (loadedStudyDates.dates.indexOf(timepoint.timepointName) > -1) { - timepointLoaded = true; - } - - Timepoints.update(timepoint._id, { - $set: { - timepointLoaded: timepointLoaded - } - }); - }); - } - } + var viewports = $('.imageViewerViewport').not('.empty'); + viewports.each(function(index, element) { + var enabledElement = cornerstone.getEnabledElement(element); + if (!enabledElement || !enabledElement.image) { + return; } + + var imageId = enabledElement.image.imageId; + var study = cornerstoneTools.metaData.get('study', imageId); + var studyDate = study.studyDate; + loadedStudyDates.patientId = study.patientId; + + // Check whether or not studyDate has been added before + if (loadedStudyDates.dates.indexOf(studyDate) < 0) { + loadedStudyDates.dates.push(studyDate); + } + }); + + // If study date is loaded into viewport, set timepointLoaded property in Timepoints collection as true + // Else set timepointLoaded property as false + if (!loadedStudyDates.dates.length) { + return; } + var timepoints = Timepoints.find({ + patientId: loadedStudyDates.patientId + }); + + timepoints.forEach(function(timepoint) { + var timepointLoaded = false; + if (loadedStudyDates.dates.indexOf(timepoint.timepointName) > -1) { + timepointLoaded = true; + } + + Timepoints.update(timepoint._id, { + $set: { + timepointLoaded: timepointLoaded + } + }); + }); }); }); diff --git a/Packages/viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.js b/Packages/viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.js index 6e66182ed..89ac8c534 100644 --- a/Packages/viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.js +++ b/Packages/viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.js @@ -10,7 +10,7 @@ var allCornerstoneEvents = 'CornerstoneToolsMouseDown CornerstoneToolsMouseDownA * @param data {object} Object containing the study, series, and viewport element to be used */ function loadSeriesIntoViewport(data, templateData) { - log.info("imageViewerViewport loadSeriesIntoViewport"); + log.info('imageViewerViewport loadSeriesIntoViewport'); // Make sure we have all the data required to render the series if (!data.study || !data.series || !data.element) { @@ -20,7 +20,7 @@ function loadSeriesIntoViewport(data, templateData) { // Get the current element and it's index in the list of all viewports // The viewport index is often used to store information about a viewport element var element = data.element; - var viewportIndex = $(".imageViewerViewport").index(element); + var viewportIndex = $('.imageViewerViewport').index(element); // Get the contentID of the current worklist tab, if the viewport is running // alongside the worklist package @@ -168,7 +168,7 @@ function loadSeriesIntoViewport(data, templateData) { $(element).siblings('.imageViewerViewportOverlay').show(); // Add stack state managers for the stack tool, CINE tool, and reference lines - cornerstoneTools.addStackStateManager(element, ['stack', 'playClip', 'referenceLines']); + cornerstoneTools.addStackStateManager(element, [ 'stack', 'playClip', 'referenceLines' ]); // Get the current viewport settings var viewport = cornerstone.getViewport(element); @@ -189,7 +189,7 @@ function loadSeriesIntoViewport(data, templateData) { // Use the tool manager to enable the currently active tool for this // newly rendered element var activeTool = toolManager.getActiveTool(); - toolManager.setActiveTool(activeTool, [element]); + toolManager.setActiveTool(activeTool, [ element ]); // Define a function to run whenever the Cornerstone viewport is rendered // (e.g. following a change of window or zoom) @@ -262,7 +262,6 @@ function loadSeriesIntoViewport(data, templateData) { $(element).on('CornerstoneStackScroll', OnStackScroll); } - // Define a function to trigger an event whenever a new viewport is being used // This is used to update the value of the "active viewport", when the user interacts // with a new viewport element @@ -272,7 +271,7 @@ function loadSeriesIntoViewport(data, templateData) { // If it was, no changes are necessary, so stop here. var element = eventData.element; var activeViewportIndex = Session.get('activeViewport'); - var viewportIndex = $(".imageViewerViewport").index(element); + var viewportIndex = $('.imageViewerViewport').index(element); // Reset the focus, even if we don't need to re-enable reference lines or prefetching $(element).focus(); @@ -323,13 +322,16 @@ function loadSeriesIntoViewport(data, templateData) { } // Run any renderedCallback that exists in the data context - if (data.renderedCallback && typeof data.renderedCallback === "function") { + if (data.renderedCallback && typeof data.renderedCallback === 'function') { data.renderedCallback(element); } }, function(error) { // If something goes wrong while loading the image, fire the error handler. errorLoadingHandler(element, imageId, error); }); + + // Temporary until we have a real window manager with events for series/study changed + Session.set('NewSeriesLoaded', Random.id()); } /** @@ -351,6 +353,7 @@ function setSeries(data, seriesInstanceUid, templateData) { data.series = series; return false; } + return true; }); @@ -378,7 +381,6 @@ function getKeysByValue(object, value) { }); } - Meteor.startup(function() { // On Meteor startup, define the global objects used to store loading imageIds // by viewport / thumbnail element @@ -410,10 +412,10 @@ Meteor.startup(function() { Template.imageViewerViewport.onRendered(function() { var templateData = Template.currentData(); - log.info("imageViewerViewport onRendered"); + log.info('imageViewerViewport onRendered'); // When the imageViewerViewport template is rendered - var element = this.find(".imageViewerViewport"); + var element = this.find('.imageViewerViewport'); // Display the loading indicator for this element $(element).siblings('.imageViewerLoadingIndicator').css('display', 'block'); @@ -458,6 +460,7 @@ Template.imageViewerViewport.onRendered(function() { if (!study) { return; } + sortStudy(study); data.study = study; @@ -470,10 +473,10 @@ Template.imageViewerViewport.onRendered(function() { }); Template.imageViewerViewport.onDestroyed(function() { - log.info("imageViewerViewport onDestroyed"); + log.info('imageViewerViewport onDestroyed'); // When a viewport element is being destroyed - var element = this.find(".imageViewerViewport"); + var element = this.find('.imageViewerViewport'); // Try to stop any currently playing clips // Otherwise the interval will continuously throw errors @@ -491,7 +494,7 @@ Template.imageViewerViewport.onDestroyed(function() { Template.imageViewerViewport.events({ 'ActivateViewport .imageViewerViewport': function(e) { - log.info("imageViewerViewport ActivateViewport"); + log.info('imageViewerViewport ActivateViewport'); setActiveViewport(e.currentTarget); } -}); \ No newline at end of file +});