First pass at a Hanging Protocol implementation and editor (LT-131)

This commit is contained in:
Erik Ziegler committed 2016-05-07 12:40:02 +02:00
1 parent dfcb33153f
commit 2e52d9e3c1
157 files changed
+8869 -23585

No files matched your search

+1 -3
View File
@@ -4,9 +4,6 @@
# 'meteor add' and 'meteor remove' will edit this file for you,
# but you can also edit it by hand.
accounts-password
ian:accounts-ui-bootstrap-3
iron:router
twbs:bootstrap
http
arsnebula:reactive-promise
@@ -37,3 +34,4 @@ practicalmeteor:loglevel
hangingprotocols
reactive-dict
gilbertwat:bootstrap3-daterangepicker
clinical:router
+6 -16
View File
@@ -1,6 +1,3 @@
accounts-base@1.2.2
accounts-password@1.1.4
anti:i18n@0.4.3
arsnebula:reactive-promise@0.9.1
autoupdate@1.2.4
babel-compiler@5.8.24_1
@@ -15,12 +12,15 @@ caching-compiler@1.0.0
caching-html-compiler@1.0.2
callback-hook@1.0.4
check@1.1.0
clinical:router@2.0.17
clinical:router-location@2.0.14
clinical:router-middleware-stack@2.0.13
clinical:router-url@2.0.15
coffeescript@1.0.11
cornerstone@0.0.1
ddp@1.2.2
ddp-client@1.2.1
ddp-common@1.2.2
ddp-rate-limiter@1.0.0
ddp-server@1.2.2
deps@1.0.9
dicomweb@0.0.1
@@ -29,7 +29,6 @@ dimseservice@0.0.1
ecmascript@0.1.6
ecmascript-runtime@0.2.6
ejson@1.0.7
email@1.0.8
fastclick@1.0.7
fortawesome:fontawesome@4.4.0
geojson-utils@1.0.4
@@ -39,20 +38,14 @@ hot-code-push@1.0.0
html-tools@1.0.5
htmljs@1.0.5
http@1.1.1
ian:accounts-ui-bootstrap-3@1.2.83
id-map@1.0.4
iron:controller@1.0.12
iron:core@1.0.11
iron:dynamic-template@1.0.12
iron:layout@1.0.12
iron:location@1.0.11
iron:middleware-stack@1.0.11
iron:router@1.0.12
iron:url@1.0.11
jquery@1.11.4
launch-screen@1.0.4
livedata@1.0.15
localstorage@1.0.5
logging@1.0.8
meteor@1.1.10
meteor-base@1.0.1
@@ -65,28 +58,25 @@ momentjs:moment@2.9.0
mongo@1.1.3
mongo-id@1.0.1
mrt:moment@2.8.1
npm-bcrypt@0.7.8_2
natestrauser:select2@4.0.1
npm-mongo@1.4.39_1
observe-sequence@1.0.7
ordered-dict@1.0.4
orthanc-remote@0.0.1
practicalmeteor:chai@1.9.2_3
practicalmeteor:loglevel@1.1.0_3
promise@0.5.1
random@1.0.5
rate-limit@1.0.0
reactive-dict@1.1.3
reactive-var@1.0.6
reload@1.1.4
retry@1.0.4
routepolicy@1.0.6
rwatts:uuid@0.0.2
service-configuration@1.0.5
session@1.1.1
sha@1.0.4
silentcicero:jszip@0.0.4
spacebars@1.0.7
spacebars-compiler@1.0.7
srp@1.0.4
standard-app-packages@1.0.6
standard-minifiers@1.0.2
stylus@2.511.1
@@ -0,0 +1,26 @@
<template name="layout">
<nav class="navbar navbar-default noselect" role="navigation">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/">
<img height="30px" src="/images/logo.png">
<h4 class="name">Open Health Imaging Foundation</h4>
</a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav navbar-right">
<li>
<a href="http://www.ohif.org">About</a>
</li>
</ul>
</div>
</div>
</nav>
{{> yield}}
</template>
@@ -0,0 +1,50 @@
.noselect
-webkit-touch-callout: none
-webkit-user-select: none
-khtml-user-select: none
-moz-user-select: none
-ms-user-select: none
user-select: none
.navbar
margin-bottom: 0
border-radius: 0
background-color: #060606
border: none
font-family: "Sanchez"
color: #C1C1C1
-webkit-transition: all 0.3s ease
-moz-transition: all 0.3s ease
transition: all 0.3s ease
.navbar-default .navbar-nav > li > a
color: #C1C1C1
font-weight: bold
font-size: 12pt
.navbar-form
height: 50px
margin: 0
padding: 15px 3px
font-weight: bold
font-size: 12pt
line-height: 20px
.navbar-brand
display: inline-block
img
float: left
margin-right: 10px
margin-top: -5px
h4.name
float: left
margin: 0
font-family: "Sanchez"
color: #C1C1C1
@media (min-width: 768px)
.navbar
border-radius: 0px
@@ -1,13 +1,18 @@
<template name="viewer">
{{#if Template.subscriptionsReady}}
<div id="viewer">
{{> studyBrowser }}
<div class="studyBrowserSidebar">
{{ >relatedStudySelect }}
{{> studyBrowser }}
</div>
{{> cineDialog }}
<div class='viewerMain'>
{{> toolbar }}
{{> imageViewerViewports }}
<div id='layoutManagerTarget'>
</div>
</div>
</div>
{{ >protocolEditor }}
{{else}}
{{>loadingText}}
{{/if}}
+21 -11
View File
@@ -1,6 +1,9 @@
Template.viewer.onCreated(function() {
// Attach the Window resize listener
$(window).on('resize', handleResize);
$('.navbar').width('100%');
Meteor.subscribe('hangingprotocols');
log.info('viewer onCreated');
@@ -24,18 +27,22 @@ Template.viewer.onCreated(function() {
cornerstone.setViewport(element, viewport);
},
resetViewport: function(element) {
cornerstone.reset(element);
var enabledElement = cornerstone.getEnabledElement(element);
if (enabledElement.fitToWindow === false) {
var imageId = enabledElement.image.imageId;
var instance = cornerstoneTools.metaData.get('instance', imageId);
enabledElement.viewport = cornerstone.getDefaultViewport(enabledElement.canvas, enabledElement.image);
var instanceClassDefaultViewport = getInstanceClassDefaultViewport(instance, enabledElement, imageId);
cornerstone.setViewport(element, instanceClassDefaultViewport);
} else {
cornerstone.reset(element);
}
},
clearTools: function(element) {
var toolStateManager = cornerstoneTools.globalImageIdSpecificToolStateManager;
toolStateManager.clear(element);
cornerstone.updateImage(element);
},
previousPresentationGroup: function() {
WindowManager.previousPresentationGroup();
},
nextPresentationGroup: function() {
WindowManager.nextPresentationGroup();
}
};
@@ -78,13 +85,18 @@ Template.viewer.onCreated(function() {
study.selected = true;
ViewerStudies.insert(study);
});
OHIF.viewer.updateImageSynchronizer = new cornerstoneTools.Synchronizer('CornerstoneNewImage', cornerstoneTools.updateImageSynchronizer);
});
Template.viewer.onRendered(function() {
// Enable hotkeys
enableHotkeys();
var parentNode = document.getElementById('layoutManagerTarget');
var studies = this.data.studies;
layoutManager = new LayoutManager(parentNode, studies);
ProtocolEngine = new HP.ProtocolEngine(layoutManager, studies);
HP.setEngine(ProtocolEngine);
});
Template.viewer.onDestroyed(function() {
@@ -92,6 +104,4 @@ Template.viewer.onDestroyed(function() {
// Remove the Window resize listener
$(window).off('resize', handleResize);
OHIF.viewer.updateImageSynchronizer.destroy();
});
@@ -18,4 +18,20 @@
float: left
background-color: gray
height: 100%
width: calc(100% - 120px)
width: calc(100% - 120px)
-webkit-transition: all 0.3s ease
-moz-transition: all 0.3s ease
transition: all 0.3s ease
#layoutManagerTarget
height: calc(100% - 30px)
width: 100%
.studyBrowserSidebar
float: left
height: 100%
width: 120px
overflow: hidden
background-color: #000
padding-top: 10px
+16 -7
View File
@@ -1,6 +1,7 @@
Session.setDefault('ViewerData', {});
// Re-add any tab data saved in the Session
WorklistTabs.remove({});
Object.keys(ViewerData).forEach(function(contentId) {
var tabData = ViewerData[contentId];
var data = {
@@ -12,8 +13,7 @@ Object.keys(ViewerData).forEach(function(contentId) {
Router.configure({
layoutTemplate: 'layout',
loadingTemplate: 'layout',
notFoundTemplate: 'notFound'
loadingTemplate: 'layout'
});
Router.onBeforeAction('loading');
@@ -22,6 +22,10 @@ Router.route('/', function() {
this.render('worklist');
});
Router.route('/worklist', function() {
this.render('worklist');
});
Router.route('/viewer/:_id', {
layoutTemplate: 'layout',
name: 'viewer',
@@ -30,14 +34,19 @@ Router.route('/viewer/:_id', {
// Check if this study is already loaded in a tab
// If it is, stop here so we don't keep adding tabs on hot-code reloads
var tab = WorklistTabs.find({
var tabs = WorklistTabs.find({
studyInstanceUid: studyInstanceUid
}).fetch();
if (tab) {
});
if (tabs.count()) {
return;
}
this.render('worklist');
openNewTab(studyInstanceUid);
this.render('worklist', {
data: function() {
return {
studyInstanceUid: studyInstanceUid
};
}
});
}
});
-2
View File
@@ -36,6 +36,4 @@ Meteor.startup(function() {
}
//defaultServiceType: 'dimse'
};
console.log('Using default OHIF Viewer settings with service: ' + Meteor.settings.defaultServiceType);
});