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); } }); };