Add button/hotkey to show/hide tools in viewports

This commit is contained in:
Erik Ziegler 2015-12-11 17:55:19 +01:00
parent ba05a3d21e
commit b2d4812dd0
8 changed files with 119 additions and 99 deletions

View File

@ -1,23 +1,19 @@
function resizeViewports() { var resizeTimer;
log.info("viewer resizeViewports");
// Handle resizing of image viewer viewports // TODO= Move this and resizeViewportElements to viewerbase
// For some reason, this seems to need to be on function handleResize() {
// another delay, or the resizing won't work properly // Avoid doing DOM manipulation during the resize handler
viewportResizeTimer = setTimeout(function() { // because it is fired very often.
var elements = $('.imageViewerViewport'); // Resizing is therefore performed 100 ms after the resize event stops.
elements.each(function(index) { clearTimeout(resizeTimer);
var element = this; resizeTimer = setTimeout(function() {
if (!element) { resizeViewportElements();
return; }, 100);
}
cornerstone.resize(element, true);
});
}, 1);
} }
Template.viewer.onCreated(function() { Template.viewer.onCreated(function() {
enableHotkeys(); // Attach the Window resize listener
$(window).on('resize', handleResize);
var self = this; var self = this;
@ -53,9 +49,16 @@ Template.viewer.onCreated(function() {
} }
OHIF.viewer.isPlaying[viewportIndex] = !OHIF.viewer.isPlaying[viewportIndex]; OHIF.viewer.isPlaying[viewportIndex] = !OHIF.viewer.isPlaying[viewportIndex];
Session.set('UpdateCINE', Random.id()); Session.set('UpdateCINE', Random.id());
} },
toggleLesionTrackerTools: toggleLesionTrackerTools,
clearTools: clearTools
}; };
// The hotkey can also be an array (e.g. ["NUMPAD0", "0"])
OHIF.viewer.defaultHotkeys.toggleLesionTrackerTools = "Y";
// Enable hotkeys
enableHotkeys();
if (isTouchDevice()) { if (isTouchDevice()) {
OHIF.viewer.tooltipConfig = { OHIF.viewer.tooltipConfig = {
@ -71,7 +74,6 @@ Template.viewer.onCreated(function() {
if (ViewerData[contentId].loadedSeriesData) { if (ViewerData[contentId].loadedSeriesData) {
log.info('Reloading previous loadedSeriesData'); log.info('Reloading previous loadedSeriesData');
OHIF.viewer.loadedSeriesData = ViewerData[contentId].loadedSeriesData; OHIF.viewer.loadedSeriesData = ViewerData[contentId].loadedSeriesData;
} else { } else {
@ -179,7 +181,7 @@ function updateRelatedElements(imageId) {
enabledElements.forEach(function(enabledElement) { enabledElements.forEach(function(enabledElement) {
// Update the display so the tool is removed // Update the display so the tool is removed
var element = enabledElement.element; var element = enabledElement.element;
cornerstone.updateImage(element) cornerstone.updateImage(element);
}); });
} }
@ -258,6 +260,10 @@ function addMeasurementAsToolData(data) {
Template.viewer.onDestroyed(function() { Template.viewer.onDestroyed(function() {
log.info("onDestroyed"); log.info("onDestroyed");
// Remove the Window resize listener
$(window).off('resize', handleResize);
OHIF.viewer.updateImageSynchronizer.destroy(); OHIF.viewer.updateImageSynchronizer.destroy();
}); });
@ -300,14 +306,3 @@ function handleMeasurementRemoved(e, eventData) {
break; break;
} }
} }
// 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.
var resizeTimer;
$(window).on('resize', function() {
clearTimeout(resizeTimer);
resizeTimer = setTimeout(function() {
resizeViewports();
}, 100);
});

View File

@ -60,6 +60,13 @@ Template.viewerMain.helpers({
iconClasses: 'fa fa-trash' iconClasses: 'fa fa-trash'
}); });
buttonData.push({
id: 'toggleLesionTrackerTools',
title: 'Show / hide tools',
classes: 'imageViewerCommand',
iconClasses: 'fa fa-eye'
});
toolbarOptions.buttonData = buttonData; toolbarOptions.buttonData = buttonData;
toolbarOptions.includePlayClipButton = false; toolbarOptions.includePlayClipButton = false;
toolbarOptions.includeLayoutButton = false; toolbarOptions.includeLayoutButton = false;
@ -67,36 +74,3 @@ Template.viewerMain.helpers({
return toolbarOptions; return toolbarOptions;
} }
}); });
Template.viewerMain.events({
'click button#clearTools': function(e, template) {
var patientId = template.data.studies[0].patientId;
var toolTypes = ["lesion", "nonTarget"];
var toolState = cornerstoneTools.globalImageIdSpecificToolStateManager.toolState;
var toolStateKeys = Object.keys(toolState).slice(0);
// Set null array for toolState data found by imageId and toolType
toolStateKeys.forEach(function (imageId) {
toolTypes.forEach(function (toolType) {
var toolTypeData = toolState[imageId][toolType];
if(toolTypeData && toolTypeData.data.length > 0) {
if(toolTypeData.data[0].patientId === patientId) {
toolState[imageId][toolType] = {
data: []
};
}
}
});
});
// Update imageViewerViewport elements to remove lesions on current image
$(".imageViewerViewport").each(function(viewportIndex, element) {
cornerstone.updateImage(element);
});
// Remove patient's measurements
Meteor.call('removeMeasurementsByPatientId', patientId);
}
});

View File

@ -0,0 +1,29 @@
clearTools = function() {
var patientId = template.data.studies[0].patientId;
var toolTypes = ["lesion", "nonTarget"];
var toolState = cornerstoneTools.globalImageIdSpecificToolStateManager.toolState;
var toolStateKeys = Object.keys(toolState).slice(0);
// Set null array for toolState data found by imageId and toolType
toolStateKeys.forEach(function (imageId) {
toolTypes.forEach(function (toolType) {
var toolTypeData = toolState[imageId][toolType];
if(toolTypeData && toolTypeData.data.length > 0) {
if(toolTypeData.data[0].patientId === patientId) {
toolState[imageId][toolType] = {
data: []
};
}
}
});
});
// Update imageViewerViewport elements to remove lesions on current image
var viewportElements = $(".imageViewerViewport").not('.empty');
viewportElements.each(function(index, element) {
cornerstone.updateImage(element);
});
// Remove patient's measurements
Meteor.call('removeMeasurementsByPatientId', patientId);
};

View File

@ -1,15 +1,9 @@
// Resize viewport elements // Resize viewport elements
resizeViewportElements = function() { resizeViewportElements = function() {
viewportResizeTimer = setTimeout(function() { viewportResizeTimer = setTimeout(function() {
var elements = $('.imageViewerViewport'); var elements = $('.imageViewerViewport').not('.empty');
elements.each(function(index) { elements.each(function(index, element) {
var element = this;
if (!element) {
return;
}
cornerstone.resize(element, true); cornerstone.resize(element, true);
}); });
}, 1); }, 1);
}; };

View File

@ -0,0 +1,41 @@
/**
* Show / hide lesion tracker tools
*/
var previousStates;
var previousActiveTool;
var toolsShown = true;
toggleLesionTrackerTools = function() {
if (toolsShown === true) {
// Save the current settings for later
previousStates = toolManager.getToolDefaultStates();
previousActiveTool = toolManager.getActiveTool();
// Hide the tools (set them all to disabled)
var toolDefaultStates = {
activate: [],
deactivate: [],
enable: [],
disable: ['lesion', 'nonTarget']
};
toolManager.setToolDefaultStates(toolDefaultStates);
// Using setActiveTool with no arguments activates the
// default tool on all available viewports
toolManager.setActiveTool();
toolsShown = false;
} else {
// Show the tools (reload previous states)
toolManager.setToolDefaultStates(previousStates);
// Using setActiveTool with no elements specified activates
// the specified tool on all available viewports
toolManager.setActiveTool(previousActiveTool);
toolsShown = true;
}
};

View File

@ -63,11 +63,14 @@ Package.onUse(function (api) {
// Library functions // Library functions
api.addFiles('lib/uuid.js', 'client'); api.addFiles('lib/uuid.js', 'client');
api.addFiles('lib/resizeViewportElements.js', 'client'); api.addFiles('lib/resizeViewportElements.js', 'client');
api.addFiles('lib/toggleLesionTrackerTools.js', 'client');
api.addFiles('lib/clearTools.js', 'client');
// Export lesionTable function for activate measurements // Export lesionTable function for activate measurements
api.export('activateLesion','client'); api.export('activateLesion','client');
api.export('resizeViewportElements','client'); api.export('resizeViewportElements','client');
api.export('toggleLesionTrackerTools', 'client');
api.export('clearTools', 'client');
api.export('measurementManagerDAL', 'client'); api.export('measurementManagerDAL', 'client');
// Export client-side collections // Export client-side collections

View File

@ -433,10 +433,6 @@ Meteor.startup(function() {
var tool = toolManager.getDefaultTool(); var tool = toolManager.getDefaultTool();
toolManager.setActiveTool(tool); toolManager.setActiveTool(tool);
}, },
toggleTools: function() {
//TODO= Write this function in toolManager?
console.log("Show/hide all tools");
},
toggleOverlayTags: function() { toggleOverlayTags: function() {
var dicomTags = $('.imageViewerViewportOverlay .dicomTag'); var dicomTags = $('.imageViewerViewportOverlay .dicomTag');
if (dicomTags.eq(0).css('display') === 'none') { if (dicomTags.eq(0).css('display') === 'none') {
@ -501,28 +497,6 @@ function flashButton(button) {
}, 100); }, 100);
} }
function setActiveViewportContainer(container) {
if (!container) {
return;
}
var container = $(container);
container.addClass('active');
var element = container.find(".imageViewerViewport").get(0);
if (!element) {
return;
}
var viewportIndex = $('.imageViewerViewport').index(element);
Session.set
// Finally, enable stack prefetching and hide the reference lines from
// the newly activated viewport
enablePrefetchOnElement(element);
displayReferenceLines(element);
}
function bindHotkey(hotkey, task) { function bindHotkey(hotkey, task) {
var hotkeyFunctions = OHIF.viewer.hotkeyFunctions; var hotkeyFunctions = OHIF.viewer.hotkeyFunctions;
@ -539,6 +513,12 @@ function bindHotkey(hotkey, task) {
}; };
} else { } else {
fn = hotkeyFunctions[task]; fn = hotkeyFunctions[task];
// If the function doesn't exist in the
// hotkey function list, try the viewer-specific function list
if (!fn && OHIF.viewer && OHIF.viewer.functionList) {
fn = OHIF.viewer.functionList[task];
}
} }
if (!fn) { if (!fn) {

View File

@ -171,6 +171,10 @@ toolManager = {
toolManager.init(); toolManager.init();
} }
if (!tool) {
tool = defaultTool;
}
if (!elements || !elements.length) { if (!elements || !elements.length) {
elements = $('.imageViewerViewport'); elements = $('.imageViewerViewport');
} }