Begin switching study browser use react-viewerbase

This commit is contained in:
Erik Ziegler committed 2018-12-11 12:30:21 +01:00
1 parent 83a7271cd1
commit c3565cd687
13 files changed
+206 -311

No files matched your search

@@ -1,11 +0,0 @@
<template name="studyBrowser">
<div class="studyBrowser">
<div class="scrollableStudyThumbnails">
{{#each study in studies}}
{{#each thumbnail in (sort (studyThumbnails study) thumbnailSortBy thumbnailSortType)}}
{{>thumbnailEntry thumbnail=thumbnail}}
{{/each}}
{{/each}}
</div>
</div>
</template>
@@ -1,11 +0,0 @@
import { Template } from 'meteor/templating';
import { OHIF } from 'meteor/ohif:core';
Template.studyBrowser.helpers({
studies() {
// @TypeSafeStudies
return OHIF.viewer.Studies.findAllBy({
selected: true
});
}
});
@@ -1,19 +0,0 @@
.studyBrowser
float: left
height: 100%
width: 100%
overflow: hidden
background-color: black
padding-bottom: 20px
.scrollableStudyThumbnails
height: 100%
overflow-y: auto
overflow-x: hidden
padding-bottom: 50px
padding-right: 16px
padding-left: 4px
margin-right: -16px
&::-webkit-scrollbar
display: none
@@ -1,30 +0,0 @@
<template name="thumbnailEntry">
{{#let stack=this.thumbnail.stack}}
<div class="thumbnailEntry noselect m-t-1 m-b-2 {{draggableClass}} {{#if isDisplaySetActive stack.displaySetInstanceUid viewportIndex}}active{{/if}}">
<div class="p-x-1">
{{>imageThumbnail thumbnail=thumbnail currentStudy=currentStudy}}
</div>
<div class="seriesDetails flex-h m-x-1 {{#unless stack.seriesDescription}}info-only{{/unless}}">
<div class="seriesDescription flex-grow">
{{stack.seriesDescription}}
</div>
<div class="seriesInformation">
<div class="item item-series clearfix">
<div class="icon">S:</div>
<div class="value">{{stack.seriesNumber}}</div>
</div>
{{#unless isUndefined instanceNumber}}
<div class="item item-series clearfix">
<div class="icon">I:</div>
<div class="value">{{instanceNumber}}</div>
</div>
{{/unless}}
<div class="item item-frames clearfix">
<div class="icon"><div></div></div>
<div class="value">{{stack.numImageFrames}}</div>
</div>
</div>
</div>
</div>
{{/let}}
</template>
@@ -1,105 +0,0 @@
import { Template } from 'meteor/templating';
import { _ } from 'meteor/underscore';
import { Session } from 'meteor/session';
import { OHIF } from 'meteor/ohif:core';
import { thumbnailDragHandlers } from '../../../lib/thumbnailDragHandlers';
Template.thumbnailEntry.onCreated(() => {
const instance = Template.instance();
// Check if the thumbnails will be draggable or clickable
const isIndexUndefined = _.isUndefined(instance.data.viewportIndex);
instance.isDragAndDrop = isIndexUndefined && OHIF.uiSettings.leftSidebarDragAndDrop !== false;
});
Template.thumbnailEntry.events({
// Event handlers for drag and drop
'mousedown .thumbnailEntry'(event, instance) {
const data = instance.data.thumbnail.stack;
if (!instance.isDragAndDrop || event.button !== 0) return;
thumbnailDragHandlers.thumbnailDragStartHandler(event, data);
},
'touchstart .thumbnailEntry'(event, instance) {
const data = instance.data.thumbnail.stack;
if (!instance.isDragAndDrop) return;
thumbnailDragHandlers.thumbnailDragStartHandler(event, data);
},
'touchmove .thumbnailEntry'(event, instance) {
if (!instance.isDragAndDrop) return;
thumbnailDragHandlers.thumbnailDragHandler(event);
},
'touchend .thumbnailEntry'(event, instance) {
const data = instance.data.thumbnail.stack;
if (!instance.isDragAndDrop) return;
thumbnailDragHandlers.thumbnailDragEndHandler(event, data);
},
// Event handlers for click (quick switch)
'click .thumbnailEntry'(event, instance) {
if (instance.isDragAndDrop) return;
// Get the thumbnail stack data
const data = instance.data.thumbnail.stack;
// Get the viewport index
let { viewportIndex } = instance.data;
if (_.isUndefined(viewportIndex)) {
viewportIndex = window.store.getState().viewports.activeViewport || 0;
}
// Rerender the viewport using the clicked thumbnail data
OHIF.viewerbase.layoutManager.rerenderViewportWithNewDisplaySet(viewportIndex, data);
},
// Event handlers for double click
'dblclick .thumbnailEntry'(event, instance) {
if (!instance.isDragAndDrop) return;
// Get the active viewport index and total number of viewports...
const viewportCount = OHIF.viewerbase.layoutManager.getNumberOfViewports();
let viewportIndex = window.store.getState().viewports.activeViewport || 0;
if (viewportIndex >= viewportCount) {
viewportIndex = viewportCount > 0 ? viewportCount - 1 : 0;
}
// Get the thumbnail stack data
const data = instance.data.thumbnail.stack;
// Rerender the viewport using the clicked thumbnail data
OHIF.viewerbase.layoutManager.rerenderViewportWithNewDisplaySet(viewportIndex, data);
}
});
Template.thumbnailEntry.helpers({
draggableClass() {
return Template.instance().isDragAndDrop ? 'draggable' : '';
},
instanceNumber() {
const thumbnail = Template.instance().data.thumbnail;
if (!thumbnail) {
return;
}
const stack = thumbnail.stack;
if (!stack) {
return;
}
// No need to show instance number for single-frame images
if (!stack.isMultiFrame) {
return;
}
const firstImage = stack.images[0];
if (!firstImage) {
return;
}
return firstImage.instanceNumber;
}
});
@@ -1,95 +0,0 @@
@import "{ohif:design}/app"
$seriesCountBackgroundColor = #678696
.thumbnailEntry
cursor: pointer
display: table
margin: 0 auto
&.draggable
cursor: copy
cursor: -webkit-grab
cursor: -moz-grab
.seriesDetails
theme('color', '$textPrimaryColor')
font-size: 14px
line-height: 1.3em
margin-top: 5px
max-width: 217px
min-height: 36px
position: relative
word-wrap: break-word
&.info-only
.seriesDescription
display: none
.seriesInformation
display: flex
flex-grow: 1
float: none
max-width: none
padding-right: 0
.item
flex: 1
text-align: center
.icon, .value
display: inline
float: none
line-height: 25px
.value
margin-left: 0
width: auto
.seriesInformation
padding-right: 4px
max-width: 50px
.item-frames .icon
height: 18px
.value
theme('color', '$textSecondaryColor')
display: inline-block
float: right
font-size: 12px
margin-left: 4px
overflow: hidden
text-overflow: ellipsis
white-space: nowrap
width: calc(100% - 15px)
.icon
theme('color', '$activeColor')
display: inline-block
float: left
font-size: 10px
font-weight: 900
text-align: right
width: 11px
div
background-color: $seriesCountBackgroundColor
margin-top: 6px
position: relative
&:after
theme('background-color', '$activeColor')
box-shadow: 1px 1px rgba(0, 0, 0, .115)
left: -5px
position: absolute
top: -5px
&
&:after
theme('border', '1px solid $primaryBackgroundColor')
content: ''
display: inline-block
height: 11px
width: 11px