diff --git a/LesionTracker/client/head.html b/LesionTracker/client/head.html index a9819d223..3f4f775d3 100644 --- a/LesionTracker/client/head.html +++ b/LesionTracker/client/head.html @@ -2,7 +2,7 @@ Lesion Tracker - + diff --git a/OHIFViewer/client/components/viewer/viewer.js b/OHIFViewer/client/components/viewer/viewer.js index 058215c73..b9e607876 100644 --- a/OHIFViewer/client/components/viewer/viewer.js +++ b/OHIFViewer/client/components/viewer/viewer.js @@ -23,7 +23,7 @@ Template.viewer.onCreated(function() { viewer: {} }; - OHIF.viewer.loadIndicatorDelay = 3000; + OHIF.viewer.loadIndicatorDelay = 500; OHIF.viewer.defaultTool = 'wwwc'; OHIF.viewer.refLinesEnabled = true; OHIF.viewer.isPlaying = {}; diff --git a/OHIFViewer/client/head.html b/OHIFViewer/client/head.html index 979732482..b3bffd530 100644 --- a/OHIFViewer/client/head.html +++ b/OHIFViewer/client/head.html @@ -2,7 +2,7 @@ OHIF Viewer - + diff --git a/Packages/viewerbase/components/studyBrowser/imageThumbnail/imageThumbnail.html b/Packages/viewerbase/components/studyBrowser/imageThumbnail/imageThumbnail.html index 7e2a05d2b..ae4044fb8 100644 --- a/Packages/viewerbase/components/studyBrowser/imageThumbnail/imageThumbnail.html +++ b/Packages/viewerbase/components/studyBrowser/imageThumbnail/imageThumbnail.html @@ -1,4 +1,10 @@ \ No newline at end of file diff --git a/Packages/viewerbase/components/studyBrowser/imageThumbnail/imageThumbnail.js b/Packages/viewerbase/components/studyBrowser/imageThumbnail/imageThumbnail.js index b0fc8b0ba..2a8e175e9 100644 --- a/Packages/viewerbase/components/studyBrowser/imageThumbnail/imageThumbnail.js +++ b/Packages/viewerbase/components/studyBrowser/imageThumbnail/imageThumbnail.js @@ -1,11 +1,33 @@ Template.imageThumbnail.onRendered(function() { - var instance = this.data.instances[0]; - var element = this.find('.imageThumbnail'); - cornerstone.enable(element); + var instance = this.data.stack.instances[0]; + var element = this.find('.imageThumbnail'); + cornerstone.enable(element); - var imageId = getImageId(instance); + var imageId = getImageId(instance); - cornerstone.loadAndCacheImage(imageId).then(function(image) { - cornerstone.displayImage(element, image); - }); + var elem = $(element); + elem.find('.imageThumbnailLoadingIndicator').css('display', 'block'); + + var thumbnailIndex = $('.imageThumbnail').index(element); + ThumbnailLoading[thumbnailIndex] = imageId; + + this.data.thumbnailIndex = thumbnailIndex; + + cornerstone.loadAndCacheImage(imageId).then(function(image) { + cornerstone.displayImage(element, image); + + delete ThumbnailLoading[thumbnailIndex]; + elem.find('.imageThumbnailLoadingIndicator').css('display', 'none'); + }, function(error) { + elem.find('.imageThumbnailErrorLoadingIndicator').css('display', 'block'); + }); +}); + +Template.imageThumbnail.helpers({ + 'percentComplete': function() { + var percentComplete = Session.get('CornerstoneThumbnailLoadProgress' + this.thumbnailIndex); + if (percentComplete && percentComplete !== 100) { + return percentComplete + '%'; + } + } }); \ No newline at end of file diff --git a/Packages/viewerbase/components/studyBrowser/imageThumbnail/imageThumbnail.styl b/Packages/viewerbase/components/studyBrowser/imageThumbnail/imageThumbnail.styl index 342eeeef9..cf1750626 100644 --- a/Packages/viewerbase/components/studyBrowser/imageThumbnail/imageThumbnail.styl +++ b/Packages/viewerbase/components/studyBrowser/imageThumbnail/imageThumbnail.styl @@ -2,4 +2,22 @@ width: 90px height: 90px background-color: black - margin: 0 auto \ No newline at end of file + margin: 0 auto + position: relative + +.thumbnailLoadingIndicator + display: none + pointer-events: none + color: #f8a13f + height: 20px + width: 100% + top: 0 + left: 0 + right: 0 + bottom: 0 + margin: auto + position: absolute + + p + text-align: center + font-size: 10pt \ No newline at end of file diff --git a/Packages/viewerbase/components/studyBrowser/studyBrowser/studyBrowser.js b/Packages/viewerbase/components/studyBrowser/studyBrowser/studyBrowser.js index 2fcac4d84..6fc907987 100644 --- a/Packages/viewerbase/components/studyBrowser/studyBrowser/studyBrowser.js +++ b/Packages/viewerbase/components/studyBrowser/studyBrowser/studyBrowser.js @@ -1,5 +1,14 @@ Template.studyBrowser.helpers({ studies : function() { - return Session.get('studies'); + var studies = Session.get('studies'); + + var array = []; + studies.forEach(function(study, index) { + array.push({ + studyIndex: index, + study: study + }); + }); + return array; } }); \ No newline at end of file diff --git a/Packages/viewerbase/components/studyBrowser/thumbnailEntry/thumbnailEntry.js b/Packages/viewerbase/components/studyBrowser/thumbnailEntry/thumbnailEntry.js index d2320e174..6beb0317e 100644 --- a/Packages/viewerbase/components/studyBrowser/thumbnailEntry/thumbnailEntry.js +++ b/Packages/viewerbase/components/studyBrowser/thumbnailEntry/thumbnailEntry.js @@ -26,13 +26,8 @@ function thumbnailDragStartHandler(e, data) { var imageThumbnail = $(targetThumbnail); // Store this data for use during drag and drop - OHIF.viewer.dragAndDropData = { - studyInstanceUid: imageThumbnail.data('studyInstanceUid'), - seriesInstanceUid: imageThumbnail.data('seriesInstanceUid') - }; + OHIF.viewer.dragAndDropData = data; - $.extend(OHIF.viewer.dragAndDropData, data); - // Clone the image thumbnail var targetId = targetThumbnail.id + 'DragClone'; var clone = cloneElement(targetThumbnail, targetId); @@ -204,6 +199,8 @@ Template.thumbnailEntry.events({ // Touch drag/drop events 'touchstart .thumbnailEntry, mousedown .thumbnailEntry': function(e) { var data = Template.parentData(2); + data.studyInstanceUid = this.stack.instances[0].studyInstanceUid; + data.seriesInstanceUid = this.stack.seriesInstanceUid; thumbnailDragStartHandler(e, data); }, 'touchmove .thumbnailEntry': function(e) { @@ -216,9 +213,6 @@ Template.thumbnailEntry.events({ Template.thumbnailEntry.helpers({ seriesDescription : function() { - if (!this.seriesDescription) { - return ''; - } - return this.seriesDescription; + return this.stack.seriesDescription || ''; } }); diff --git a/Packages/viewerbase/components/studyBrowser/thumbnails/thumbnails.js b/Packages/viewerbase/components/studyBrowser/thumbnails/thumbnails.js index a3849adee..dc9150b6f 100644 --- a/Packages/viewerbase/components/studyBrowser/thumbnails/thumbnails.js +++ b/Packages/viewerbase/components/studyBrowser/thumbnails/thumbnails.js @@ -1,6 +1,15 @@ Template.thumbnails.helpers({ - thumbnails: function() { - var stacks = createStacks(this); - return stacks; - } + thumbnails: function() { + var stacks = createStacks(this.study); + var studyIndex = this.studyIndex; + + var array = []; + stacks.forEach(function(stack, index) { + array.push({ + thumbnailIndex: index * (studyIndex + 1), + stack: stack + }); + }); + return array; + } }); \ No newline at end of file diff --git a/Packages/viewerbase/components/viewer/imageViewerViewport/imageViewerViewport.js b/Packages/viewerbase/components/viewer/imageViewerViewport/imageViewerViewport.js index f612b6cf2..6bb608268 100644 --- a/Packages/viewerbase/components/viewer/imageViewerViewport/imageViewerViewport.js +++ b/Packages/viewerbase/components/viewer/imageViewerViewport/imageViewerViewport.js @@ -104,13 +104,11 @@ function loadSeriesIntoViewport(data) { // If you have problems, replace it with this line instead: // cornerstone.enable(element); - var startLoadingHandler = cornerstoneTools.loadHandlerManager.getStartLoadHandler(); + var endLoadingHandler = cornerstoneTools.loadHandlerManager.getEndLoadHandler(); var errorLoadingHandler = cornerstoneTools.loadHandlerManager.getErrorLoadingHandler(); - if (startLoadingHandler) { - startLoadingHandler(element); - } + ViewportLoading[viewportIndex] = imageId; cornerstone.loadAndCacheImage(imageId).then(function(image) { if (data.viewport) { @@ -118,10 +116,9 @@ function loadSeriesIntoViewport(data) { } else { cornerstone.displayImage(element, image); } + delete ViewportLoading[viewportIndex]; - if (endLoadingHandler) { - endLoadingHandler(element); - } + endLoadingHandler(element); cornerstone.resize(element, true); @@ -216,18 +213,42 @@ function loadSeriesIntoViewport(data) { } }, function(error) { - if (errorLoadingHandler) { - errorLoadingHandler(element, imageId, error); - } + errorLoadingHandler(element, imageId, error); }); } +function getKeysByValue(object, value) { + // http://stackoverflow.com/questions/9907419/javascript-object-get-key-by-value + return Object.keys(object).filter(function(key) { + return object[key] === value; + }); +} + +Meteor.startup(function() { + ViewportLoading = {}; + ThumbnailLoading = {}; + + $(cornerstone).on('CornerstoneImageLoadProgress', function(e, eventData) { + viewportIndices = getKeysByValue(ViewportLoading, eventData.imageId); + viewportIndices.forEach(function(viewportIndex) { + Session.set('CornerstoneLoadProgress' + viewportIndex, eventData.percentComplete); + }); + + thumbnailIndices = getKeysByValue(ThumbnailLoading, eventData.imageId); + thumbnailIndices.forEach(function(thumbnailIndex) { + Session.set('CornerstoneThumbnailLoadProgress' + thumbnailIndex, eventData.percentComplete); + }); + }); +}); + Template.imageViewerViewport.onRendered(function() { log.info("imageViewerViewport onRendered"); + var element = this.find(".imageViewerViewport"); + $(element).siblings('.imageViewerLoadingIndicator').css('display', 'block'); + var studies = Session.get('studies'); var activeViewport = Session.get('activeViewport'); - var element = this.find(".imageViewerViewport"); var data = { element: element, @@ -240,6 +261,7 @@ Template.imageViewerViewport.onRendered(function() { if (this.data.seriesInstanceUid === undefined || this.data.studyInstanceUid === undefined) { element.classList.add('empty'); + $(element).siblings('.imageViewerLoadingIndicator').css('display', 'none'); $(element).siblings('.viewportInstructions').show(); return; } diff --git a/Packages/viewerbase/components/viewer/loadingIndicator/loadingIndicator.html b/Packages/viewerbase/components/viewer/loadingIndicator/loadingIndicator.html index f840e6372..c6855124e 100644 --- a/Packages/viewerbase/components/viewer/loadingIndicator/loadingIndicator.html +++ b/Packages/viewerbase/components/viewer/loadingIndicator/loadingIndicator.html @@ -1,7 +1,7 @@