ohif-viewer/Packages/ohif-viewerbase/client/lib/textMarkerUtils.js

87 lines
2.8 KiB
JavaScript

import { Blaze } from 'meteor/blaze';
import { toolManager } from './toolManager';
import { viewportUtils } from './viewportUtils';
const changeTextCallback = (data, eventData, doneChangingTextCallback) => {
// This handles the double-click/long-press event on Spine text marker labels
const keyPressHandler = e => {
// If Enter or Esc are pressed, close the dialog
if (e.which === 13 || e.which === 27) {
closeHandler();
}
};
// Deactivate textMarker tool after editing a spine label & if spine is not active tool
const deactivateAfterEdit = () => {
if (toolManager.getActiveTool() !== 'spine') {
const element = viewportUtils.getActiveViewportElement();
cornerstoneTools.textMarker.deactivate(element, 1);
}
};
const closeHandler = () => {
dialog.get(0).close();
doneChangingTextCallback(data, select.val());
deactivateAfterEdit();
// Reset the focus to the active viewport element
// This makes the mobile Safari keyboard close
const element = viewportUtils.getActiveViewportElement();
$(element).focus();
};
const dialog = $('#textMarkerRelabelDialog');
// Is necessary to use Blaze object to not create
// circular depencency with helper object (./helpers)
if (Blaze._globalHelpers.isTouchDevice()) {
// Center the dialog on screen on touch devices
dialog.css({
top: 0,
left: 0,
right: 0,
bottom: 0,
margin: 'auto'
});
dialog.find('.dialog.arrow').hide();
} else {
// Place the dialog above the tool that is being relabelled
// TODO = Switch this to the tool coordinates, but put back into
// page coordinates.
dialog.css({
top: eventData.currentPoints.page.y - dialog.outerHeight() - 20,
left: eventData.currentPoints.page.x - dialog.outerWidth() / 2
});
dialog.find('.dialog.arrow').show();
}
const select = dialog.find('.relabelSelect');
const confirm = dialog.find('.relabelConfirm');
const remove = dialog.find('.relabelRemove');
// If the remove button is clicked, delete this marker
remove.off('click');
remove.on('click', () => {
dialog.get(0).close();
doneChangingTextCallback(data, undefined, true);
deactivateAfterEdit();
});
dialog.get(0).showModal();
$('.relabelSelect').val(data.text).trigger('change'); //Update selector to the current
confirm.off('click');
confirm.on('click', () => {
closeHandler();
});
// Use keydown since keypress doesn't handle ESC in Chrome
dialog.off('keydown');
dialog.on('keydown', keyPressHandler);
};
const textMarkerUtils = {
changeTextCallback
};
export { textMarkerUtils };