320 lines
10 KiB
JavaScript
320 lines
10 KiB
JavaScript
import { Template } from 'meteor/templating';
|
|
import { Session } from 'meteor/session';
|
|
import { Tracker } from 'meteor/tracker';
|
|
import { OHIF } from 'meteor/ohif:core';
|
|
import { Viewerbase } from 'meteor/ohif:viewerbase';
|
|
|
|
Template.toolbarSection.helpers({
|
|
isFinishDisabled() {
|
|
const instance = Template.instance();
|
|
|
|
// Run this computation on save or every time any measurement / timepoint suffer changes
|
|
OHIF.ui.unsavedChanges.depend();
|
|
instance.saveObserver.depend();
|
|
Session.get('LayoutManagerUpdated');
|
|
|
|
return OHIF.ui.unsavedChanges.probe('viewer.*') === 0;
|
|
},
|
|
|
|
leftSidebarToggleButtonData() {
|
|
const instance = Template.instance();
|
|
return {
|
|
toggleable: true,
|
|
key: 'leftSidebar',
|
|
value: instance.data.state,
|
|
options: [{
|
|
value: 'studies',
|
|
svgLink: '/packages/ohif_viewerbase/assets/icons.svg#icon-studies',
|
|
svgWidth: 15,
|
|
svgHeight: 13,
|
|
bottomLabel: 'Studies'
|
|
}]
|
|
};
|
|
},
|
|
|
|
rightSidebarToggleButtonData() {
|
|
const instance = Template.instance();
|
|
return {
|
|
toggleable: true,
|
|
key: 'rightSidebar',
|
|
value: instance.data.state,
|
|
options: [{
|
|
value: 'measurements',
|
|
svgLink: '/packages/ohif_viewerbase/assets/icons.svg#icon-measurements-lesions',
|
|
svgWidth: 18,
|
|
svgHeight: 10,
|
|
bottomLabel: 'Measurements'
|
|
}]
|
|
};
|
|
},
|
|
|
|
toolbarButtons() {
|
|
// Check if the measure tools shall be disabled
|
|
const isToolDisabled = false; //!Template.instance().data.timepointApi;
|
|
|
|
const targetSubTools = [];
|
|
|
|
targetSubTools.push({
|
|
id: 'bidirectional',
|
|
title: 'Bidirectional',
|
|
classes: 'imageViewerTool rm-l-3',
|
|
svgLink: '/packages/ohif_viewerbase/assets/icons.svg#icon-tools-measure-target',
|
|
disabled: isToolDisabled
|
|
});
|
|
|
|
targetSubTools.push({
|
|
id: 'targetCR',
|
|
title: 'CR Target',
|
|
classes: 'imageViewerTool',
|
|
svgLink: '/packages/ohif_viewerbase/assets/icons.svg#icon-tools-measure-target-cr',
|
|
disabled: isToolDisabled
|
|
});
|
|
|
|
targetSubTools.push({
|
|
id: 'targetUN',
|
|
title: 'UN Target',
|
|
classes: 'imageViewerTool',
|
|
svgLink: '/packages/ohif_viewerbase/assets/icons.svg#icon-tools-measure-target-un',
|
|
disabled: isToolDisabled
|
|
});
|
|
|
|
const extraTools = [];
|
|
|
|
extraTools.push({
|
|
id: 'stackScroll',
|
|
title: 'Stack Scroll',
|
|
classes: 'imageViewerTool',
|
|
svgLink: '/packages/ohif_viewerbase/assets/icons.svg#icon-tools-stack-scroll'
|
|
});
|
|
|
|
extraTools.push({
|
|
id: 'resetViewport',
|
|
title: 'Reset',
|
|
classes: 'imageViewerCommand',
|
|
svgLink: '/packages/ohif_viewerbase/assets/icons.svg#icon-tools-reset'
|
|
});
|
|
|
|
extraTools.push({
|
|
id: 'rotateR',
|
|
title: 'Rotate Right',
|
|
classes: 'imageViewerCommand',
|
|
svgLink: '/packages/ohif_viewerbase/assets/icons.svg#icon-tools-rotate-right'
|
|
});
|
|
|
|
extraTools.push({
|
|
id: 'flipH',
|
|
title: 'Flip H',
|
|
classes: 'imageViewerCommand',
|
|
svgLink: '/packages/ohif_viewerbase/assets/icons.svg#icon-tools-flip-horizontal'
|
|
});
|
|
|
|
extraTools.push({
|
|
id: 'flipV',
|
|
title: 'Flip V',
|
|
classes: 'imageViewerCommand',
|
|
svgLink: '/packages/ohif_viewerbase/assets/icons.svg#icon-tools-flip-vertical'
|
|
});
|
|
|
|
extraTools.push({
|
|
id: 'invert',
|
|
title: 'Invert',
|
|
classes: 'imageViewerCommand',
|
|
svgLink: '/packages/ohif_viewerbase/assets/icons.svg#icon-tools-invert'
|
|
});
|
|
|
|
extraTools.push({
|
|
id: 'magnify',
|
|
title: 'Magnify',
|
|
classes: 'imageViewerTool',
|
|
svgLink: '/packages/ohif_viewerbase/assets/icons.svg#icon-tools-magnify'
|
|
});
|
|
|
|
extraTools.push({
|
|
id: 'ellipticalRoi',
|
|
title: 'Ellipse',
|
|
classes: 'imageViewerTool',
|
|
svgLink: '/packages/ohif_viewerbase/assets/icons.svg#icon-tools-elliptical-roi'
|
|
});
|
|
|
|
extraTools.push({
|
|
id: 'toggleDownloadDialog',
|
|
title: 'Download',
|
|
classes: 'imageViewerCommand',
|
|
iconClasses: 'fa fa-camera',
|
|
active: () => $('#imageDownloadDialog').is(':visible')
|
|
});
|
|
|
|
extraTools.push({
|
|
id: 'toggleCineDialog',
|
|
title: 'CINE',
|
|
classes: 'imageViewerCommand',
|
|
iconClasses: 'fa fa-youtube-play',
|
|
active: () => $('#cineDialog').is(':visible')
|
|
});
|
|
|
|
const buttonData = [];
|
|
|
|
buttonData.push({
|
|
id: 'zoom',
|
|
title: 'Zoom',
|
|
classes: 'imageViewerTool',
|
|
svgLink: '/packages/ohif_viewerbase/assets/icons.svg#icon-tools-zoom'
|
|
});
|
|
|
|
buttonData.push({
|
|
id: 'wwwc',
|
|
title: 'Levels',
|
|
classes: 'imageViewerTool',
|
|
svgLink: '/packages/ohif_viewerbase/assets/icons.svg#icon-tools-levels'
|
|
});
|
|
|
|
buttonData.push({
|
|
id: 'pan',
|
|
title: 'Pan',
|
|
classes: 'imageViewerTool',
|
|
svgLink: '/packages/ohif_viewerbase/assets/icons.svg#icon-tools-pan'
|
|
});
|
|
|
|
buttonData.push({
|
|
id: 'linkStackScroll',
|
|
title: 'Link',
|
|
classes: 'imageViewerCommand toolbarSectionButton nonAutoDisableState',
|
|
svgLink: '/packages/ohif_viewerbase/assets/icons.svg#icon-tools-link',
|
|
disableFunction: Viewerbase.viewportUtils.isStackScrollLinkingDisabled
|
|
});
|
|
|
|
buttonData.push({
|
|
id: 'toggleTarget',
|
|
title: 'Target',
|
|
classes: 'rm-l-3',
|
|
svgLink: '/packages/ohif_viewerbase/assets/icons.svg#icon-tools-measure-target',
|
|
disabled: isToolDisabled,
|
|
subTools: targetSubTools
|
|
});
|
|
|
|
buttonData.push({
|
|
id: 'nonTarget',
|
|
title: 'Non-Target',
|
|
classes: 'imageViewerTool',
|
|
svgLink: '/packages/ohif_viewerbase/assets/icons.svg#icon-tools-measure-non-target',
|
|
disabled: isToolDisabled
|
|
});
|
|
|
|
buttonData.push({
|
|
id: 'length',
|
|
title: 'Temp',
|
|
classes: 'imageViewerTool',
|
|
svgLink: '/packages/ohif_viewerbase/assets/icons.svg#icon-tools-measure-temp'
|
|
});
|
|
|
|
buttonData.push({
|
|
id: 'toggleMore',
|
|
title: 'More',
|
|
classes: 'rp-x-1 rm-l-3',
|
|
svgLink: '/packages/ohif_viewerbase/assets/icons.svg#icon-tools-more',
|
|
disabled: isToolDisabled,
|
|
subTools: extraTools
|
|
});
|
|
|
|
return buttonData;
|
|
}
|
|
});
|
|
|
|
Template.toolbarSection.events({
|
|
'click #toggleTarget'(event, instance) {
|
|
const $target = $(event.currentTarget);
|
|
if (!$target.hasClass('active') && $target.hasClass('expanded')) {
|
|
Viewerbase.toolManager.setActiveTool('bidirectional');
|
|
}
|
|
},
|
|
|
|
'click #toggleHUD'(event) {
|
|
const $this = $(event.currentTarget);
|
|
|
|
// Stop here if the tool is disabled
|
|
if ($this.hasClass('disabled')) {
|
|
return;
|
|
}
|
|
|
|
const state = Session.get('measurementTableHudOpen');
|
|
Session.set('measurementTableHudOpen', !state);
|
|
},
|
|
|
|
'click #toggleTrial'(event) {
|
|
if (!$(event.currentTarget).hasClass('disabled')) {
|
|
OHIF.ui.showDialog('trialOptionsModal');
|
|
}
|
|
}
|
|
});
|
|
|
|
Template.toolbarSection.onCreated( function() {
|
|
const instance = Template.instance();
|
|
|
|
instance.path = 'viewer.studyViewer.measurements';
|
|
instance.saveObserver = new Tracker.Dependency();
|
|
instance.api = {
|
|
save() {
|
|
// Clear signaled unsaved changes...
|
|
const successHandler = () => {
|
|
OHIF.ui.unsavedChanges.clear(`${instance.path}.*`);
|
|
instance.saveObserver.changed();
|
|
};
|
|
|
|
// Display the error messages
|
|
const errorHandler = data => {
|
|
OHIF.ui.showDialog('dialogInfo', Object.assign({ class: 'themed' }, data));
|
|
};
|
|
|
|
const promise = instance.data.measurementApi.storeMeasurements();
|
|
promise.then(successHandler).catch(errorHandler);
|
|
OHIF.ui.showDialog('dialogLoading', {
|
|
promise,
|
|
text: 'Saving measurement data'
|
|
});
|
|
|
|
return promise;
|
|
}
|
|
};
|
|
|
|
instance.unsavedChangesHandler = () => {
|
|
const isNotDisabled = !instance.$('.js-finish-case').hasClass('disabled');
|
|
if (isNotDisabled && instance.progressPercent.get() === 100) {
|
|
instance.api.save();
|
|
}
|
|
};
|
|
|
|
// Attach handler for unsaved changes dialog...
|
|
OHIF.ui.unsavedChanges.attachHandler(instance.path, 'save', instance.unsavedChangesHandler);
|
|
});
|
|
|
|
Template.toolbarSection.onRendered(function() {
|
|
// Set disabled/enabled tool buttons that are set in toolManager
|
|
const states = Viewerbase.toolManager.getToolDefaultStates();
|
|
const disabledToolButtons = states.disabledToolButtons;
|
|
const allToolbarButtons = $('.toolbarSection').find('.toolbarSectionButton:not(.nonAutoDisableState)');
|
|
|
|
// Additional toolbar buttons whose classes are not toolbarSectionButton
|
|
allToolbarButtons.push($('#toolbarSectionEntry')[0]);
|
|
allToolbarButtons.push($('#toggleMeasurements')[0]);
|
|
|
|
if (disabledToolButtons && disabledToolButtons.length > 0) {
|
|
for (let i = 0; i < allToolbarButtons.length; i++) {
|
|
const toolbarButton = allToolbarButtons[i];
|
|
const index = disabledToolButtons.indexOf($(toolbarButton).attr('id'));
|
|
if (index !== -1) {
|
|
$(toolbarButton).addClass('disabled');
|
|
$(toolbarButton).find('*').addClass('disabled');
|
|
} else {
|
|
$(toolbarButton).removeClass('disabled');
|
|
$(toolbarButton).find('*').removeClass('disabled');
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
Template.caseProgress.onDestroyed(() => {
|
|
const instance = Template.instance();
|
|
// Remove unsaved changes handler after this view has been destroyed...
|
|
OHIF.ui.unsavedChanges.removeHandler(instance.path, 'save', instance.unsavedChangesHandler);
|
|
});
|