285 lines
7.8 KiB
JavaScript
285 lines
7.8 KiB
JavaScript
OHIF = window.OHIF || {};
|
||
|
||
Meteor.startup(function() {
|
||
|
||
if (!OHIF.viewer) {
|
||
OHIF.viewer = {};
|
||
}
|
||
|
||
OHIF.viewer.defaultHotkeys = {
|
||
defaultTool: "ESC",
|
||
angle: "A",
|
||
stackScroll: "S",
|
||
pan: "P",
|
||
magnify: "M",
|
||
scrollDown: ["DOWN", "PAGEDOWN"],
|
||
scrollUp: ["UP", "PAGEUP"],
|
||
nextPanel: "RIGHT",
|
||
previousPanel: "LEFT",
|
||
invert: "I",
|
||
flipV: "V",
|
||
flipH: "H",
|
||
wwwc: "W",
|
||
zoom: "Z",
|
||
cinePlay: "SPACE",
|
||
rotateR: "R",
|
||
rotateL: "L",
|
||
toggleOverlayTags: 'SHIFT',
|
||
WLPresetSoftTissue: ["NUMPAD1", "1"],
|
||
WLPresetLung: ["NUMPAD2", "2"],
|
||
WLPresetLiver: ["NUMPAD3", "3"],
|
||
WLPresetBone: ["NUMPAD4", "4"],
|
||
WLPresetBrain: ["NUMPAD5", "5"]
|
||
};
|
||
|
||
// For now
|
||
OHIF.viewer.hotkeys = OHIF.viewer.defaultHotkeys;
|
||
|
||
OHIF.viewer.defaultWLPresets = {
|
||
'SoftTissue' : {wc : 40, ww : 400},
|
||
'Lung' : {wc : -600, ww : 1500},
|
||
'Liver' : {wc : 90, ww : 150},
|
||
'Bone' : {wc: 480, ww : 2500},
|
||
'Brain' : {wc : 40, ww : 80}
|
||
};
|
||
|
||
// For now
|
||
OHIF.viewer.wlPresets = OHIF.viewer.defaultWLPresets;
|
||
|
||
OHIF.viewer.hotkeyFunctions = {
|
||
wwwc: function() {
|
||
toolManager.setActiveTool("wwwc");
|
||
},
|
||
zoom: function() {
|
||
toolManager.setActiveTool("zoom");
|
||
},
|
||
angle: function() {
|
||
toolManager.setActiveTool("angle");
|
||
},
|
||
dragProbe: function() {
|
||
toolManager.setActiveTool("dragProbe");
|
||
},
|
||
ellipticalRoi: function() {
|
||
toolManager.setActiveTool("ellipticalRoi");
|
||
},
|
||
magnify: function() {
|
||
toolManager.setActiveTool("magnify");
|
||
},
|
||
annotate: function() {
|
||
toolManager.setActiveTool("annotate");
|
||
},
|
||
stackScroll: function() {
|
||
toolManager.setActiveTool("stackScroll");
|
||
},
|
||
pan: function() {
|
||
toolManager.setActiveTool("pan");
|
||
},
|
||
length: function() {
|
||
toolManager.setActiveTool("length");
|
||
},
|
||
spine: function() {
|
||
toolManager.setActiveTool("spine");
|
||
},
|
||
wwwcRegion: function() {
|
||
toolManager.setActiveTool("wwwcRegion");
|
||
},
|
||
zoomIn: function () {
|
||
var button = document.getElementById("zoomIn");
|
||
flashButton(button);
|
||
zoomIn();
|
||
},
|
||
zoomOut: function () {
|
||
var button = document.getElementById("zoomOut");
|
||
flashButton(button);
|
||
zoomOut();
|
||
},
|
||
zoomToFit: function () {
|
||
var button = document.getElementById("zoomToFit");
|
||
flashButton(button);
|
||
zoomToFit();
|
||
},
|
||
scrollDown: function() {
|
||
var container = $('.viewportContainer.active');
|
||
var button = container.find('#nextImage').get(0);
|
||
|
||
if (!container.find('.imageViewerViewport').hasClass('empty')) {
|
||
flashButton(button);
|
||
switchToImageRelative(1);
|
||
}
|
||
},
|
||
scrollFirstImage: function() {
|
||
var container = $('.viewportContainer.active');
|
||
if (!container.find('.imageViewerViewport').hasClass('empty')) {
|
||
switchToImageByIndex(0);
|
||
}
|
||
},
|
||
scrollLastImage: function() {
|
||
var container = $('.viewportContainer.active');
|
||
if (!container.find('.imageViewerViewport').hasClass('empty')) {
|
||
switchToImageByIndex(-1);
|
||
}
|
||
},
|
||
scrollUp: function() {
|
||
var container = $('.viewportContainer.active');
|
||
if (!container.find('.imageViewerViewport').hasClass('empty')) {
|
||
var button = container.find('#prevImage').get(0);
|
||
flashButton(button);
|
||
switchToImageRelative(-1);
|
||
}
|
||
},
|
||
nextPanel: function() {
|
||
nextActivePanel();
|
||
},
|
||
previousPanel: function() {
|
||
previousActivePanel();
|
||
},
|
||
invert: function() {
|
||
var button = document.getElementById("invert");
|
||
flashButton(button);
|
||
invert();
|
||
},
|
||
flipV: function() {
|
||
var button = document.getElementById("flipV");
|
||
flashButton(button);
|
||
flipV();
|
||
},
|
||
flipH: function() {
|
||
var button = document.getElementById("flipH");
|
||
flashButton(button);
|
||
flipH();
|
||
},
|
||
rotateR: function() {
|
||
var button = document.getElementById("rotateR");
|
||
flashButton(button);
|
||
rotateR();
|
||
},
|
||
rotateL: function() {
|
||
var button = document.getElementById("rotateL");
|
||
flashButton(button);
|
||
rotateL();
|
||
},
|
||
cinePlay: function() {
|
||
toggleCinePlay();
|
||
},
|
||
defaultTool: function() {
|
||
var tool = toolManager.getDefaultTool();
|
||
toolManager.setActiveTool(tool);
|
||
},
|
||
toggleOverlayTags: function() {
|
||
var dicomTags = $('.imageViewerViewportOverlay .dicomTag');
|
||
if (dicomTags.eq(0).css('display') === 'none') {
|
||
dicomTags.show();
|
||
} else {
|
||
dicomTags.hide();
|
||
}
|
||
}
|
||
};
|
||
});
|
||
|
||
// Define a jQuery reverse function
|
||
$.fn.reverse = [].reverse;
|
||
|
||
function previousActivePanel() {
|
||
log.info('nextActivePanel');
|
||
var currentIndex = Session.get('activeViewport');
|
||
currentIndex--;
|
||
|
||
var viewports = $('.imageViewerViewport');
|
||
var numViewports = viewports.length;
|
||
if (currentIndex < 0) {
|
||
currentIndex = numViewports - 1;
|
||
}
|
||
|
||
var element = viewports.get(currentIndex);
|
||
if (!element) {
|
||
return;
|
||
}
|
||
|
||
setActiveViewport(element);
|
||
}
|
||
|
||
|
||
function nextActivePanel() {
|
||
log.info('nextActivePanel');
|
||
var currentIndex = Session.get('activeViewport');
|
||
currentIndex++;
|
||
|
||
var viewports = $('.imageViewerViewport');
|
||
var numViewports = viewports.length;
|
||
if (currentIndex >= numViewports) {
|
||
currentIndex = 0;
|
||
}
|
||
|
||
var element = viewports.get(currentIndex);
|
||
if (!element) {
|
||
return;
|
||
}
|
||
|
||
setActiveViewport(element);
|
||
}
|
||
|
||
function flashButton(button) {
|
||
if (!button) {
|
||
return;
|
||
}
|
||
|
||
button.classList.add('active');
|
||
setTimeout(function () {
|
||
button.classList.remove('active');
|
||
}, 100);
|
||
}
|
||
|
||
function bindHotkey(hotkey, task) {
|
||
var hotkeyFunctions = OHIF.viewer.hotkeyFunctions;
|
||
|
||
// Only bind defined, non-empty HotKeys
|
||
if (!hotkey || hotkey === "") {
|
||
return;
|
||
}
|
||
|
||
var fn;
|
||
if (task.indexOf("WLPreset") > -1) {
|
||
var presetName = task.replace("WLPreset", "");
|
||
fn = function() {
|
||
applyWLPresetToActiveElement(presetName);
|
||
};
|
||
} else {
|
||
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) {
|
||
return;
|
||
}
|
||
|
||
var hotKeyForBinding = hotkey.toLowerCase();
|
||
|
||
$(document).bind('keydown', hotKeyForBinding, fn);
|
||
}
|
||
|
||
enableHotkeys = function() {
|
||
var viewerHotkeys = OHIF.viewer.hotkeys;
|
||
|
||
$(document).unbind('keydown');
|
||
|
||
Object.keys(viewerHotkeys).forEach(function(task) {
|
||
var taskHotkeys = viewerHotkeys[task];
|
||
if (!taskHotkeys || !taskHotkeys.length) {
|
||
return;
|
||
}
|
||
|
||
if (taskHotkeys.constructor === Array) {
|
||
taskHotkeys.forEach(function(hotkey) {
|
||
bindHotkey(hotkey, task);
|
||
});
|
||
} else {
|
||
// taskHotkeys represents a single key
|
||
bindHotkey(taskHotkeys, task);
|
||
}
|
||
});
|
||
}; |