Fixing broken references in LesionTracker related to measurement deletions and lesion table row selection + Fixing bug in measurement handlers for unassociated studies.
This commit is contained in:
parent
3def03e7d0
commit
a06da4e6e1
@ -1,4 +1,3 @@
|
|||||||
import { toolManager } from 'meteor/ohif:viewerbase';
|
|
||||||
import { OHIF } from 'meteor/ohif:core';
|
import { OHIF } from 'meteor/ohif:core';
|
||||||
import { Viewerbase } from 'meteor/ohif:viewerbase';
|
import { Viewerbase } from 'meteor/ohif:viewerbase';
|
||||||
|
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
import { Viewerbase } from 'meteor/ohif:viewerbase';
|
||||||
|
|
||||||
(function(cornerstoneTools) {
|
(function(cornerstoneTools) {
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
@ -21,9 +23,9 @@
|
|||||||
|
|
||||||
// TODO = Check if we have the same function already in Cornerstone Tools
|
// TODO = Check if we have the same function already in Cornerstone Tools
|
||||||
function getNearbyToolData(element, coords, toolTypes) {
|
function getNearbyToolData(element, coords, toolTypes) {
|
||||||
var allTools = toolManager.getTools();
|
var allTools = Viewerbase.toolManager.getTools();
|
||||||
var pointNearTool = false;
|
var pointNearTool = false;
|
||||||
var touchDevice = isTouchDevice();
|
var touchDevice = Viewerbase.helpers.isTouchDevice();
|
||||||
var nearbyTool = {},
|
var nearbyTool = {},
|
||||||
nearbyToolIndex,
|
nearbyToolIndex,
|
||||||
nearbyToolType;
|
nearbyToolType;
|
||||||
|
|||||||
@ -44,6 +44,12 @@ class MeasurementApi {
|
|||||||
studyInstanceUids: measurement.studyInstanceUid
|
studyInstanceUids: measurement.studyInstanceUid
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Preventing errors thrown when non-associated (standalone) study is opened...
|
||||||
|
// @TODO: Make sure this logic is correct.
|
||||||
|
if (!timepoint) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const emptyItem = groupCollection.findOne({
|
const emptyItem = groupCollection.findOne({
|
||||||
toolId: { $eq: null },
|
toolId: { $eq: null },
|
||||||
timepointId: timepoint.timepointId
|
timepointId: timepoint.timepointId
|
||||||
|
|||||||
@ -6,12 +6,12 @@ function findAndRenderDisplaySet(displaySets, viewportIndex, studyInstanceUid, s
|
|||||||
// Find the proper stack to display
|
// Find the proper stack to display
|
||||||
const stacksFromSeries = displaySets.filter(stack => stack.seriesInstanceUid === seriesInstanceUid);
|
const stacksFromSeries = displaySets.filter(stack => stack.seriesInstanceUid === seriesInstanceUid);
|
||||||
const stack = stacksFromSeries.find(stack => {
|
const stack = stacksFromSeries.find(stack => {
|
||||||
const imageIndex = stack.images.findIndex(image => image.sopInstanceUid === sopInstanceUid);
|
const imageIndex = stack.images.findIndex(image => image.getSOPInstanceUID() === sopInstanceUid);
|
||||||
return imageIndex > -1;
|
return imageIndex > -1;
|
||||||
});
|
});
|
||||||
|
|
||||||
// TODO: make this work for multi-frame instances
|
// TODO: make this work for multi-frame instances
|
||||||
const specificImageIndex = stack.images.findIndex(image => image.sopInstanceUid === sopInstanceUid);
|
const specificImageIndex = stack.images.findIndex(image => image.getSOPInstanceUID() === sopInstanceUid);
|
||||||
|
|
||||||
const displaySetData = {
|
const displaySetData = {
|
||||||
studyInstanceUid: studyInstanceUid,
|
studyInstanceUid: studyInstanceUid,
|
||||||
@ -23,10 +23,10 @@ function findAndRenderDisplaySet(displaySets, viewportIndex, studyInstanceUid, s
|
|||||||
|
|
||||||
// Add a renderedCallback to activate the measurements once it's
|
// Add a renderedCallback to activate the measurements once it's
|
||||||
if (renderedCallback) {
|
if (renderedCallback) {
|
||||||
displaySetData.renderedCallback = renderedCallback;
|
displaySetData.renderedCallback = renderedCallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
window.layoutManager.rerenderViewportWithNewDisplaySet(viewportIndex, displaySetData);
|
OHIF.viewerbase.layoutManager.rerenderViewportWithNewDisplaySet(viewportIndex, displaySetData);
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderIntoViewport(viewportIndex, studyInstanceUid, seriesInstanceUid, sopInstanceUid, renderedCallback) {
|
function renderIntoViewport(viewportIndex, studyInstanceUid, seriesInstanceUid, sopInstanceUid, renderedCallback) {
|
||||||
@ -44,7 +44,7 @@ function renderIntoViewport(viewportIndex, studyInstanceUid, seriesInstanceUid,
|
|||||||
const $viewports = $('.imageViewerViewport');
|
const $viewports = $('.imageViewerViewport');
|
||||||
const element = $viewports.get(viewportIndex);
|
const element = $viewports.get(viewportIndex);
|
||||||
const startLoadingHandler = cornerstoneTools.loadHandlerManager.getStartLoadHandler();
|
const startLoadingHandler = cornerstoneTools.loadHandlerManager.getStartLoadHandler();
|
||||||
startLoadingHandler(element)
|
startLoadingHandler(element);
|
||||||
getStudyMetadata(studyInstanceUid, loadedStudy => {
|
getStudyMetadata(studyInstanceUid, loadedStudy => {
|
||||||
loadedStudy.displaySets = createStacks(loadedStudy);
|
loadedStudy.displaySets = createStacks(loadedStudy);
|
||||||
OHIF.log.warn('renderIntoViewport');
|
OHIF.log.warn('renderIntoViewport');
|
||||||
|
|||||||
@ -32,7 +32,7 @@ Template.viewerMain.onCreated(() => {
|
|||||||
Template.viewerMain.onRendered(() => {
|
Template.viewerMain.onRendered(() => {
|
||||||
const instance = Template.instance();
|
const instance = Template.instance();
|
||||||
|
|
||||||
instance.subscribe('hangingprotocols', () => {
|
HP.ProtocolStore.onReady(() => {
|
||||||
const { studies, currentTimepointId, measurementApi, timepointIds } = instance.data;
|
const { studies, currentTimepointId, measurementApi, timepointIds } = instance.data;
|
||||||
const parentElement = instance.$('#layoutManagerTarget').get(0);
|
const parentElement = instance.$('#layoutManagerTarget').get(0);
|
||||||
|
|
||||||
|
|||||||
@ -1,92 +0,0 @@
|
|||||||
let resizeTimer;
|
|
||||||
|
|
||||||
handleResize = function() {
|
|
||||||
// Avoid doing DOM manipulation during the resize handler
|
|
||||||
// because it is fired very often.
|
|
||||||
// Resizing is therefore performed 100 ms after the resize event stops.
|
|
||||||
clearTimeout(resizeTimer);
|
|
||||||
resizeTimer = setTimeout(() => {
|
|
||||||
resizeViewportElements();
|
|
||||||
}, 100);
|
|
||||||
};
|
|
||||||
|
|
||||||
const repositionStudySeriesQuickSwitch = () => {
|
|
||||||
const activeTab = Session.get('activeContentId');
|
|
||||||
if(activeTab === 'viewerTab') {
|
|
||||||
const nViewports = window.layoutManager.viewportData.length;
|
|
||||||
|
|
||||||
if(nViewports && nViewports > 1) {
|
|
||||||
const leftSidebar = $('#viewer .sidebar-left.sidebar-open');
|
|
||||||
const rightSidebar = $('#viewer .sidebar-right.sidebar-open');
|
|
||||||
const leftQuickSwitch = $('.quickSwitchWrapper.left');
|
|
||||||
const rightQuickSwitch = $('.quickSwitchWrapper.right');
|
|
||||||
|
|
||||||
const hasLeftSidebar = leftSidebar.length > 0;
|
|
||||||
const hasRightSidebar = rightSidebar.length > 0;
|
|
||||||
|
|
||||||
rightQuickSwitch.removeClass('left-sidebar-only');
|
|
||||||
leftQuickSwitch.removeClass('right-sidebar-only');
|
|
||||||
|
|
||||||
let leftOffset = 0;
|
|
||||||
|
|
||||||
if(hasLeftSidebar) {
|
|
||||||
leftOffset = ( leftSidebar.width()/$(window).width() ) * 100;
|
|
||||||
|
|
||||||
if(!hasRightSidebar) {
|
|
||||||
rightQuickSwitch.addClass('left-sidebar-only');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(hasRightSidebar && !hasLeftSidebar) {
|
|
||||||
leftQuickSwitch.addClass('right-sidebar-only');
|
|
||||||
}
|
|
||||||
|
|
||||||
const leftPosition = ( ($('#imageViewerViewports').width() / nViewports) / $(window).width() ) * 100 + leftOffset;
|
|
||||||
const rightPosition = 100 - leftPosition;
|
|
||||||
|
|
||||||
leftQuickSwitch.css('right', rightPosition + '%');
|
|
||||||
rightQuickSwitch.css('left', leftPosition + '%');
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Resize viewport elements
|
|
||||||
resizeViewportElements = function() {
|
|
||||||
const viewportResizeTimer = setTimeout(() => {
|
|
||||||
repositionStudySeriesQuickSwitch();
|
|
||||||
|
|
||||||
const elements = $('.imageViewerViewport').not('.empty');
|
|
||||||
elements.each((index, element) => {
|
|
||||||
let enabledElement;
|
|
||||||
try {
|
|
||||||
enabledElement = cornerstone.getEnabledElement(element);
|
|
||||||
} catch(error) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
cornerstone.resize(element, true);
|
|
||||||
|
|
||||||
if (enabledElement.fitToWindow === false) {
|
|
||||||
const imageId = enabledElement.image.imageId;
|
|
||||||
const instance = cornerstoneTools.metaData.get('instance', imageId);
|
|
||||||
const instanceClassViewport = getInstanceClassDefaultViewport(instance, enabledElement, imageId);
|
|
||||||
cornerstone.setViewport(element, instanceClassViewport);
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO= Refactor this into separate scrollbar resize function
|
|
||||||
const currentOverlay = $(element).siblings('.imageViewerViewportOverlay');
|
|
||||||
const imageControls = currentOverlay.find('.imageControls');
|
|
||||||
currentOverlay.find('.imageControls').height($(element).height());
|
|
||||||
|
|
||||||
// Set it's width to its parent's height
|
|
||||||
// (because webkit is stupid and can't style vertical sliders)
|
|
||||||
const scrollbar = currentOverlay.find('#scrollbar');
|
|
||||||
scrollbar.height(scrollbar.parent().height() - 20);
|
|
||||||
|
|
||||||
const currentImageSlider = currentOverlay.find('#imageSlider');
|
|
||||||
const overlayHeight = currentImageSlider.parent().height();
|
|
||||||
currentImageSlider.width(overlayHeight);
|
|
||||||
});
|
|
||||||
}, 1);
|
|
||||||
};
|
|
||||||
Loading…
Reference in New Issue
Block a user