ohif-viewer/Packages/viewerbase/lib/toolManager.js
Erik Ziegler bde599ed7b Added image scrollbar to viewports (LT-20)
Added image scrollbar to viewports (LT-20)
2015-12-14 08:06:28 -05:00

205 lines
6.9 KiB
JavaScript

var activeTool = "wwwc";
var defaultTool = "wwwc";
var tools = {};
var toolDefaultStates = {
activate: [],
deactivate: [],
enable: [],
disable: []
};
var initialized = false;
function configureTools() {
// Set the configuration for the multitouch pan tool
var multiTouchPanConfig = {
testPointers: function(eventData) {
return (eventData.numPointers >= 3);
}
};
cornerstoneTools.panMultiTouch.setConfiguration(multiTouchPanConfig);
}
toolManager = {
init: function() {
toolManager.addTool('wwwc', {
mouse: cornerstoneTools.wwwc,
touch: cornerstoneTools.wwwcTouchDrag
});
toolManager.addTool('zoom', {
mouse: cornerstoneTools.zoom,
touch: cornerstoneTools.zoomTouchDrag
});
toolManager.addTool('wwwcRegion', {
mouse: cornerstoneTools.wwwcRegion,
touch: cornerstoneTools.wwwcRegionTouch
});
toolManager.addTool('dragProbe', {
mouse: cornerstoneTools.dragProbe,
touch: cornerstoneTools.dragProbeTouch
});
toolManager.addTool('pan', {
mouse: cornerstoneTools.pan,
touch: cornerstoneTools.panTouchDrag
});
toolManager.addTool('stackScroll', {
mouse: cornerstoneTools.stackScroll,
touch: cornerstoneTools.stackScrollTouchDrag
});
toolManager.addTool('length', {
mouse: cornerstoneTools.length,
touch: cornerstoneTools.lengthTouch
});
toolManager.addTool('angle', {
mouse: cornerstoneTools.simpleAngle,
touch: cornerstoneTools.simpleAngleTouch
});
toolManager.addTool('magnify', {
mouse: cornerstoneTools.magnify,
touch: cornerstoneTools.magnifyTouchDrag
});
toolManager.addTool('ellipticalRoi', {
mouse: cornerstoneTools.ellipticalRoi,
touch: cornerstoneTools.ellipticalRoiTouch
});
toolManager.addTool('rectangleRoi', {
mouse: cornerstoneTools.rectangleRoi,
touch: cornerstoneTools.rectangleRoiTouch
});
toolManager.addTool('annotate', {
mouse: cornerstoneTools.arrowAnnotate,
touch: cornerstoneTools.arrowAnnotateTouch
});
activeTool = OHIF.viewer.defaultTool;
configureTools();
initialized = true;
},
addTool: function(name, base) {
tools[name] = base;
},
setToolDefaultStates: function(states) {
toolDefaultStates = states;
},
getToolDefaultStates: function() {
return toolDefaultStates;
},
setActiveToolForElement: function(tool, element) {
var canvases = $(element).find('canvas');
if (element.classList.contains('empty') || !canvases.length) {
return;
}
// First, deactivate the current active tool
tools[activeTool].mouse.deactivate(element, 1);
if (tools[activeTool].touch) {
tools[activeTool].touch.deactivate(element);
}
// Enable tools based on their default states
Object.keys(toolDefaultStates).forEach(function(action) {
var relevantTools = toolDefaultStates[action];
if (!relevantTools || !relevantTools.length) {
return;
}
relevantTools.forEach(function(toolType) {
if ((action === 'activate') ||
(action === 'deactivate')) {
tools[toolType].mouse[action](element, 1);
} else {
tools[toolType].mouse[action](element);
}
tools[toolType].touch[action](element);
});
});
// Get the stack toolData
var toolData = cornerstoneTools.getToolState(element, 'stack');
if (!toolData || !toolData.data || !toolData.data.length) {
return;
}
// Get the imageIds for this element
var imageIds = toolData.data[0].imageIds;
// Deactivate all the middle mouse, right click, and scroll wheel tools
cornerstoneTools.pan.deactivate(element);
cornerstoneTools.zoom.deactivate(element);
cornerstoneTools.zoomWheel.deactivate(element);
cornerstoneTools.stackScrollWheel.deactivate(element);
// Reactivate the relevant scrollwheel tool for this element
if (imageIds.length > 1) {
// scroll is the default tool for middle mouse wheel for stacks
cornerstoneTools.stackScrollWheel.activate(element);
} else {
// zoom is the default tool for middle mouse wheel for single images (non stacks)
cornerstoneTools.zoomWheel.activate(element);
}
// This block ensures that the middle mouse and scroll tools keep working
if (tool === 'pan') {
cornerstoneTools.pan.activate(element, 3); // 3 means left mouse button and middle mouse button
cornerstoneTools.zoom.activate(element, 4); // zoom is the default tool for right mouse button
} else if (tool === 'zoom') {
cornerstoneTools.pan.activate(element, 2); // pan is the default tool for middle mouse button
cornerstoneTools.zoom.activate(element, 5); // 5 means left mouse button and right mouse button
} else {
// Reactivate the middle mouse and right click tools
cornerstoneTools.pan.activate(element, 2); // pan is the default tool for middle mouse button
cornerstoneTools.zoom.activate(element, 4); // zoom is the default tool for right mouse button
// Activate the chosen tool
tools[tool].mouse.activate(element, 1);
}
if (tools[tool].touch) {
tools[tool].touch.activate(element);
}
cornerstoneTools.zoomTouchPinch.activate(element);
cornerstoneTools.panMultiTouch.activate(element);
},
setActiveTool: function(tool, elements) {
if (!initialized) {
toolManager.init();
}
if (!tool) {
tool = defaultTool;
}
if (!elements || !elements.length) {
elements = $('.imageViewerViewport');
}
$('#toolbar .btn-group button').removeClass('active');
var toolButton = document.getElementById(tool);
if (toolButton) {
toolButton.classList.add('active');
}
// Otherwise, set the active tool for all viewport elements
$(elements).each(function(index, element) {
toolManager.setActiveToolForElement(tool, element);
});
activeTool = tool;
},
getActiveTool: function() {
if (!activeTool) {
activeTool = defaultTool;
}
return activeTool;
},
setDefaultTool: function(tool) {
defaultTool = tool;
},
getDefaultTool: function() {
return defaultTool;
}
};