PWV-138: Creating selected state for bidirectional tool

This commit is contained in:
Bruno Alves de Faria 2017-09-11 17:26:27 -03:00
parent d7369582b6
commit e330973c1e

View File

@ -673,6 +673,31 @@ function setHandlesVisible (handles, isVisibile) {
});
};
function unselectAllHandles(handles) {
Object.keys(handles).forEach(handleKey => {
if (handleKey === 'textBox') return;
handles[handleKey].selected = false;
handles[handleKey].active = false;
});
}
function drawHandles(context, eventData, handles, color, options) {
Object.keys(handles).forEach(handleKey => {
if (handleKey === 'textBox') return;
const handle = handles[handleKey];
if (handle.selected) {
handle.active = true;
} else {
if (handle.hover) {
handle.active = true;
} else {
handle.active = false;
}
}
});
cornerstoneTools.drawHandles(context, eventData, handles, color, options);
}
function moveHandle(mouseEventData, toolType, data, handle, doneMovingCallback, preventHandleOutsideImage) {
// Make handle invisible while moving
if (!handle.hasBoundingBox) {
@ -757,7 +782,13 @@ function mouseMoveCallback(e, eventData) {
var coords = eventData.currentPoints.canvas;
var data = toolData.data[i];
if (cornerstoneTools.handleActivator(eventData.element, data.handles, coords) === true) {
const handleActivatorChanged = cornerstoneTools.handleActivator(eventData.element, data.handles, coords);
Object.keys(data.handles).forEach(handleKey => {
if (handleKey === 'textBox') return;
const handle = data.handles[handleKey];
handle.hover = handle.active;
});
if (handleActivatorChanged === true) {
imageNeedsUpdate = true;
}
@ -778,7 +809,7 @@ function mouseDownCallback(e, eventData) {
var data;
var element = eventData.element;
function handleDoneMove() {
function handleDoneMove(handle) {
// Set the cursor back to its default
$(element).css('cursor', '');
@ -788,6 +819,12 @@ function mouseDownCallback(e, eventData) {
cornerstoneTools.removeToolState(element, toolType, data);
}
// Update the handles to keep selected state
if (handle) {
handle.moving = false;
handle.selected = true;
}
cornerstone.updateImage(element);
$(element).on('CornerstoneToolsMouseMove', eventData, mouseMoveCallback);
}
@ -810,8 +847,12 @@ function mouseDownCallback(e, eventData) {
$(element).off('CornerstoneToolsMouseMove', mouseMoveCallback);
data.active = true;
data.selected = true;
moveHandle(eventData, toolType, data, handle, handleDoneMove);
unselectAllHandles(data.handles);
handle.moving = true;
handle.selected = true;
moveHandle(eventData, toolType, data, handle, () => handleDoneMove(handle));
e.stopImmediatePropagation();
return false;
}
@ -830,7 +871,22 @@ function mouseDownCallback(e, eventData) {
data = toolData.data[i];
if (pointNearTool(element, data, coords)) {
$(element).off('CornerstoneToolsMouseMove', mouseMoveCallback);
cornerstoneTools.moveAllHandles(e, data, toolData, toolType, options, handleDoneMove);
data.active = true;
data.selected = true;
unselectAllHandles(data.handles);
Object.keys(data.handles).forEach(handleKey => {
if (handleKey === 'textBox') return;
data.handles[handleKey].moving = true;
});
cornerstoneTools.moveAllHandles(e, data, toolData, toolType, options, () => {
Object.keys(data.handles).forEach(handleKey => {
if (handleKey === 'textBox') return;
data.handles[handleKey].moving = false;
});
handleDoneMove();
});
e.stopImmediatePropagation();
return false;
}
@ -1004,8 +1060,8 @@ function onImageRendered(e, eventData) {
// Draw perpendicular line
drawPerpendicularLine(context, eventData, element, data, color, strokeWidth);
// draw the handles
cornerstoneTools.drawHandles(context, eventData, data.handles, color, { drawHandlesIfActive: true });
// Draw the handles
drawHandles(context, eventData, data.handles, color, { drawHandlesIfActive: true });
// Calculate the long axis length
var dx = (data.handles.start.x - data.handles.end.x) * (eventData.image.columnPixelSpacing || 1);