ohif-viewer/Packages/viewerbase/lib/enableHotkeys.js

302 lines
8.0 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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();
}
}
};
OHIF.viewer.loadedSeriesData = {};
});
// 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);
}
});
};