comparison Applications/StoneWebViewer/WebApplication/app.js @ 1849:023cce3d7844

introduction of the concept of "virtual series"
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 29 Jun 2021 12:12:46 +0200
parents 251d7f7a6c4e
children 58681a5c727b
comparison
equal deleted inserted replaced
1848:3751485f1b2e 1849:023cce3d7844
186 newVal.series.complete) { 186 newVal.series.complete) {
187 this.status = 'ready'; 187 this.status = 'ready';
188 188
189 var that = this; 189 var that = this;
190 Vue.nextTick(function() { 190 Vue.nextTick(function() {
191 if (newVal.sopInstanceUid !== undefined && 191 if (newVal.virtualSeriesId !== undefined &&
192 newVal.sopInstanceUid.length > 0) { 192 newVal.virtualSeriesId.length > 0) {
193 stone.LoadMultipartInstanceInViewport( 193 stone.LoadVirtualSeriesInViewport(that.canvasId, newVal.virtualSeriesId);
194 that.canvasId, seriesInstanceUid, newVal.sopInstanceUid);
195 } 194 }
196 else { 195 else {
197 stone.LoadSeriesInViewport(that.canvasId, seriesInstanceUid); 196 stone.LoadSeriesInViewport(that.canvasId, seriesInstanceUid);
198 } 197 }
199 }); 198 });
304 event.preventDefault(); 303 event.preventDefault();
305 304
306 // The "parseInt()" is because of Microsoft Edge Legacy (*) 305 // The "parseInt()" is because of Microsoft Edge Legacy (*)
307 this.$emit('updated-series', { 306 this.$emit('updated-series', {
308 seriesIndex: parseInt(event.dataTransfer.getData('seriesIndex'), 10), 307 seriesIndex: parseInt(event.dataTransfer.getData('seriesIndex'), 10),
309 sopInstanceUid: event.dataTransfer.getData('sopInstanceUid') 308 virtualSeriesId: event.dataTransfer.getData('virtualSeriesId')
310 }); 309 });
311 }, 310 },
312 MakeActive: function() { 311 MakeActive: function() {
313 this.$emit('selected-viewport'); 312 this.$emit('selected-viewport');
314 }, 313 },
449 448
450 selectedStudies: [], 449 selectedStudies: [],
451 series: [], 450 series: [],
452 studies: [], 451 studies: [],
453 seriesIndex: {}, // Maps "SeriesInstanceUID" to "index in this.series" 452 seriesIndex: {}, // Maps "SeriesInstanceUID" to "index in this.series"
454 multiframeInstanceThumbnails: {} 453 virtualSeriesThumbnails: {}
455 } 454 }
456 }, 455 },
457 computed: { 456 computed: {
458 getSelectedStudies() { 457 getSelectedStudies() {
459 var s = ''; 458 var s = '';
518 s.push(this.viewport4Content.series.tags[SERIES_INSTANCE_UID]); 517 s.push(this.viewport4Content.series.tags[SERIES_INSTANCE_UID]);
519 518
520 return s; 519 return s;
521 }, 520 },
522 521
523 GetActiveMultiframeInstances: function() { 522 GetActiveVirtualSeries: function() {
524 var s = []; 523 var s = [];
525 524
526 if ('sopInstanceUid' in this.viewport1Content) 525 if ('virtualSeriesId' in this.viewport1Content)
527 s.push(this.viewport1Content.sopInstanceUid); 526 s.push(this.viewport1Content.virtualSeriesId);
528 527
529 if ('sopInstanceUid' in this.viewport2Content) 528 if ('virtualSeriesId' in this.viewport2Content)
530 s.push(this.viewport2Content.sopInstanceUid); 529 s.push(this.viewport2Content.virtualSeriesId);
531 530
532 if ('sopInstanceUid' in this.viewport3Content) 531 if ('virtualSeriesId' in this.viewport3Content)
533 s.push(this.viewport3Content.sopInstanceUid); 532 s.push(this.viewport3Content.virtualSeriesId);
534 533
535 if ('sopInstanceUid' in this.viewport4Content) 534 if ('virtualSeriesId' in this.viewport4Content)
536 s.push(this.viewport4Content.sopInstanceUid); 535 s.push(this.viewport4Content.virtualSeriesId);
537 536
538 return s; 537 return s;
539 }, 538 },
540 539
541 GetActiveCanvas: function() { 540 GetActiveCanvas: function() {
602 'numberOfFrames' : 0, 601 'numberOfFrames' : 0,
603 'complete' : false, 602 'complete' : false,
604 'type' : stone.ThumbnailType.LOADING, 603 'type' : stone.ThumbnailType.LOADING,
605 'color': study.color, 604 'color': study.color,
606 'tags': sourceSeries[i], 605 'tags': sourceSeries[i],
607 'multiframeInstances': null 606 'virtualSeries': null
608 }); 607 });
609 } 608 }
610 } 609 }
611 } 610 }
612 611
623 SeriesDragStart: function(event, seriesIndex) { 622 SeriesDragStart: function(event, seriesIndex) {
624 // It is necessary to use ".toString()" for Microsoft Edge Legacy (*) 623 // It is necessary to use ".toString()" for Microsoft Edge Legacy (*)
625 event.dataTransfer.setData('seriesIndex', seriesIndex.toString()); 624 event.dataTransfer.setData('seriesIndex', seriesIndex.toString());
626 }, 625 },
627 626
628 MultiframeInstanceDragStart: function(event, seriesIndex, sopInstanceUid) { 627 VirtualSeriesDragStart: function(event, seriesIndex, virtualSeriesId) {
629 event.dataTransfer.setData('seriesIndex', seriesIndex.toString()); 628 event.dataTransfer.setData('seriesIndex', seriesIndex.toString());
630 event.dataTransfer.setData('sopInstanceUid', sopInstanceUid.toString()); 629 event.dataTransfer.setData('virtualSeriesId', virtualSeriesId.toString());
631 }, 630 },
632 631
633 SetViewportSeriesInstanceUid: function(viewportIndex, seriesInstanceUid) { 632 SetViewportSeriesInstanceUid: function(viewportIndex, seriesInstanceUid) {
634 if (seriesInstanceUid in this.seriesIndex) { 633 if (seriesInstanceUid in this.seriesIndex) {
635 this.SetViewportSeries(viewportIndex, { 634 this.SetViewportSeries(viewportIndex, {
642 var series = this.series[info.seriesIndex]; 641 var series = this.series[info.seriesIndex];
643 642
644 if (viewportIndex == 1) { 643 if (viewportIndex == 1) {
645 this.viewport1Content = { 644 this.viewport1Content = {
646 series: series, 645 series: series,
647 sopInstanceUid: info.sopInstanceUid 646 virtualSeriesId: info.virtualSeriesId
648 }; 647 };
649 } 648 }
650 else if (viewportIndex == 2) { 649 else if (viewportIndex == 2) {
651 this.viewport2Content = { 650 this.viewport2Content = {
652 series: series, 651 series: series,
653 sopInstanceUid: info.sopInstanceUid 652 virtualSeriesId: info.virtualSeriesId
654 }; 653 };
655 } 654 }
656 else if (viewportIndex == 3) { 655 else if (viewportIndex == 3) {
657 this.viewport3Content = { 656 this.viewport3Content = {
658 series: series, 657 series: series,
659 sopInstanceUid: info.sopInstanceUid 658 virtualSeriesId: info.virtualSeriesId
660 }; 659 };
661 } 660 }
662 else if (viewportIndex == 4) { 661 else if (viewportIndex == 4) {
663 this.viewport4Content = { 662 this.viewport4Content = {
664 series: series, 663 series: series,
665 sopInstanceUid: info.sopInstanceUid 664 virtualSeriesId: info.virtualSeriesId
666 }; 665 };
667 } 666 }
668 }, 667 },
669 668
670 ClickSeries: function(seriesIndex) { 669 ClickSeries: function(seriesIndex) {
671 this.SetViewportSeries(this.activeViewport, { 670 this.SetViewportSeries(this.activeViewport, {
672 seriesIndex: seriesIndex 671 seriesIndex: seriesIndex
673 }); 672 });
674 }, 673 },
675 674
676 ClickMultiframeInstance: function(seriesIndex, sopInstanceUid) { 675 ClickVirtualSeries: function(seriesIndex, virtualSeriesId) {
677 this.SetViewportSeries(this.activeViewport, { 676 this.SetViewportSeries(this.activeViewport, {
678 seriesIndex: seriesIndex, 677 seriesIndex: seriesIndex,
679 sopInstanceUid: sopInstanceUid 678 virtualSeriesId: virtualSeriesId
680 }); 679 });
681 }, 680 },
682 681
683 HideViewport: function(index) { 682 HideViewport: function(index) {
684 if (index == 1) { 683 if (index == 1) {
798 if (seriesInstanceUid in pendingSeriesPdf_) { 797 if (seriesInstanceUid in pendingSeriesPdf_) {
799 stone.FetchPdf(studyInstanceUid, seriesInstanceUid); 798 stone.FetchPdf(studyInstanceUid, seriesInstanceUid);
800 delete pendingSeriesPdf_[seriesInstanceUid]; 799 delete pendingSeriesPdf_[seriesInstanceUid];
801 } 800 }
802 801
803 if (stone.LoadMultiframeInstancesFromSeries(seriesInstanceUid)) { 802 if (stone.LookupVirtualSeries(seriesInstanceUid)) {
804 series.multiframeInstances = JSON.parse(stone.GetStringBuffer()); 803 series.virtualSeries = JSON.parse(stone.GetStringBuffer());
805 } 804 }
806 } 805 }
807 806
808 // https://fr.vuejs.org/2016/02/06/common-gotchas/#Why-isn%E2%80%99t-the-DOM-updating 807 // https://fr.vuejs.org/2016/02/06/common-gotchas/#Why-isn%E2%80%99t-the-DOM-updating
809 this.$set(this.series, index, series); 808 this.$set(this.series, index, series);
1058 1057
1059 this.modalNotDiagnostic = this.settingNotDiagnostic; 1058 this.modalNotDiagnostic = this.settingNotDiagnostic;
1060 1059
1061 var that = this; 1060 var that = this;
1062 1061
1063 window.addEventListener('MultiframeInstanceThumbnailLoaded', function(args) { 1062 window.addEventListener('VirtualSeriesThumbnailLoaded', function(args) {
1064 that.$set(that.multiframeInstanceThumbnails, args.detail.sopInstanceUid, args.detail.thumbnail); 1063 that.$set(that.virtualSeriesThumbnails, args.detail.virtualSeriesId, args.detail.thumbnail);
1065 }); 1064 });
1066 1065
1067 window.addEventListener('ThumbnailLoaded', function(args) { 1066 window.addEventListener('ThumbnailLoaded', function(args) {
1068 //var studyInstanceUid = args.detail.studyInstanceUid; 1067 //var studyInstanceUid = args.detail.studyInstanceUid;
1069 var seriesInstanceUid = args.detail.seriesInstanceUid; 1068 var seriesInstanceUid = args.detail.seriesInstanceUid;