* add the Eraser to the available tools * review response - remove unnecessary config from eraser tool * remove cargo culted mouseButtonMasks
247 lines
6.4 KiB
JavaScript
247 lines
6.4 KiB
JavaScript
import OHIF from 'ohif-core';
|
|
import updateTableWithNewMeasurementData from './lib/updateTableWithNewMeasurementData';
|
|
|
|
function getToolLabellingFlowCallback(store) {
|
|
const setLabellingFlowDataAction = labellingFlowData => ({
|
|
type: 'SET_LABELLING_FLOW_DATA',
|
|
labellingFlowData,
|
|
});
|
|
|
|
const setLabellingFlowData = labellingFlowData => {
|
|
store.dispatch(setLabellingFlowDataAction(labellingFlowData));
|
|
};
|
|
|
|
return function toolLabellingFlowCallback(
|
|
measurementData,
|
|
eventData,
|
|
doneCallback,
|
|
options = {}
|
|
) {
|
|
const updateLabelling = ({ location, response, description }) => {
|
|
// Update the measurement data with the labelling parameters
|
|
|
|
if (location) {
|
|
measurementData.location = location;
|
|
}
|
|
if (description) {
|
|
measurementData.description = description;
|
|
}
|
|
if (response) {
|
|
measurementData.response = response;
|
|
}
|
|
|
|
updateTableWithNewMeasurementData(measurementData);
|
|
};
|
|
|
|
const labellingDoneCallback = () => {
|
|
setLabellingFlowData({ visible: false });
|
|
};
|
|
|
|
const labellingFlowData = {
|
|
visible: true,
|
|
eventData,
|
|
measurementData,
|
|
skipAddLabelButton: options.skipAddLabelButton,
|
|
editLocation: options.editLocation,
|
|
editDescription: options.editDescription,
|
|
editResponse: options.editResponse,
|
|
editDescriptionOnDialog: options.editDescriptionOnDialog,
|
|
labellingDoneCallback,
|
|
updateLabelling,
|
|
};
|
|
|
|
setLabellingFlowData(labellingFlowData);
|
|
};
|
|
}
|
|
|
|
const resetLabellingAndContextMenuAction = state => ({
|
|
type: 'RESET_LABELLING_AND_CONTEXT_MENU',
|
|
state,
|
|
});
|
|
|
|
const setToolContextMenuDataAction = (viewportIndex, toolContextMenuData) => ({
|
|
type: 'SET_TOOL_CONTEXT_MENU_DATA',
|
|
viewportIndex,
|
|
toolContextMenuData,
|
|
});
|
|
|
|
function getOnRightClickCallback(store) {
|
|
const setToolContextMenuData = (viewportIndex, toolContextMenuData) => {
|
|
store.dispatch(resetLabellingAndContextMenuAction());
|
|
store.dispatch(
|
|
setToolContextMenuDataAction(viewportIndex, toolContextMenuData)
|
|
);
|
|
};
|
|
|
|
const getOnCloseCallback = viewportIndex => {
|
|
return function onClose() {
|
|
const toolContextMenuData = {
|
|
visible: false,
|
|
};
|
|
|
|
store.dispatch(
|
|
setToolContextMenuDataAction(viewportIndex, toolContextMenuData)
|
|
);
|
|
};
|
|
};
|
|
|
|
return function onRightClick(event) {
|
|
const eventData = event.detail;
|
|
const viewportIndex = parseInt(eventData.element.dataset.viewportIndex, 10);
|
|
|
|
const toolContextMenuData = {
|
|
eventData,
|
|
isTouchEvent: false,
|
|
onClose: getOnCloseCallback(viewportIndex),
|
|
};
|
|
|
|
setToolContextMenuData(viewportIndex, toolContextMenuData);
|
|
};
|
|
}
|
|
|
|
function getOnTouchPressCallback(store) {
|
|
const setToolContextMenuData = (viewportIndex, toolContextMenuData) => {
|
|
store.dispatch(resetLabellingAndContextMenuAction());
|
|
store.dispatch(
|
|
setToolContextMenuDataAction(viewportIndex, toolContextMenuData)
|
|
);
|
|
};
|
|
|
|
const getOnCloseCallback = viewportIndex => {
|
|
return function onClose() {
|
|
const toolContextMenuData = {
|
|
visible: false,
|
|
};
|
|
|
|
store.dispatch(
|
|
setToolContextMenuDataAction(viewportIndex, toolContextMenuData)
|
|
);
|
|
};
|
|
};
|
|
|
|
return function onTouchPress(event) {
|
|
const eventData = event.detail;
|
|
const viewportIndex = parseInt(eventData.element.dataset.viewportIndex, 10);
|
|
|
|
const toolContextMenuData = {
|
|
eventData,
|
|
isTouchEvent: true,
|
|
onClose: getOnCloseCallback(viewportIndex),
|
|
};
|
|
|
|
setToolContextMenuData(viewportIndex, toolContextMenuData);
|
|
};
|
|
}
|
|
|
|
function getResetLabellingAndContextMenu(store) {
|
|
return function resetLabellingAndContextMenu() {
|
|
store.dispatch(resetLabellingAndContextMenuAction());
|
|
};
|
|
}
|
|
|
|
export default function setupTools(store) {
|
|
const toolLabellingFlowCallback = getToolLabellingFlowCallback(store);
|
|
const availableTools = [
|
|
{ name: 'Pan', mouseButtonMasks: [1, 4] },
|
|
{ name: 'Zoom', mouseButtonMasks: [1, 2] },
|
|
{ name: 'Wwwc', mouseButtonMasks: [1] },
|
|
{ name: 'Magnify', mouseButtonMasks: [1] },
|
|
{ name: 'WwwcRegion', mouseButtonMasks: [1] },
|
|
{
|
|
name: 'Bidirectional',
|
|
props: {
|
|
configuration: {
|
|
getMeasurementLocationCallback: toolLabellingFlowCallback,
|
|
},
|
|
},
|
|
mouseButtonMasks: [1],
|
|
},
|
|
{
|
|
name: 'Length',
|
|
props: {
|
|
configuration: {
|
|
getMeasurementLocationCallback: toolLabellingFlowCallback,
|
|
},
|
|
},
|
|
mouseButtonMasks: [1],
|
|
},
|
|
{
|
|
name: 'Angle',
|
|
props: {
|
|
configuration: {
|
|
getMeasurementLocationCallback: toolLabellingFlowCallback,
|
|
},
|
|
},
|
|
mouseButtonMasks: [1],
|
|
},
|
|
{ name: 'StackScroll', mouseButtonMasks: [1] },
|
|
{ name: 'Brush', mouseButtonMasks: [1] },
|
|
{
|
|
name: 'FreehandMouse',
|
|
props: {
|
|
configuration: {
|
|
getMeasurementLocationCallback: toolLabellingFlowCallback,
|
|
},
|
|
},
|
|
mouseButtonMasks: [1],
|
|
},
|
|
{
|
|
name: 'EllipticalRoi',
|
|
props: {
|
|
configuration: {
|
|
getMeasurementLocationCallback: toolLabellingFlowCallback,
|
|
},
|
|
},
|
|
mouseButtonMasks: [1],
|
|
},
|
|
{
|
|
name: 'CircleRoi',
|
|
props: {
|
|
configuration: {
|
|
getMeasurementLocationCallback: toolLabellingFlowCallback,
|
|
},
|
|
},
|
|
mouseButtonMasks: [1],
|
|
},
|
|
{
|
|
name: 'RectangleRoi',
|
|
props: {
|
|
configuration: {
|
|
getMeasurementLocationCallback: toolLabellingFlowCallback,
|
|
},
|
|
},
|
|
mouseButtonMasks: [1],
|
|
},
|
|
{ name: 'DragProbe', mouseButtonMasks: [1] },
|
|
{ name: 'PanMultiTouch' },
|
|
{ name: 'ZoomTouchPinch' },
|
|
{ name: 'StackScrollMouseWheel' },
|
|
{ name: 'StackScrollMultiTouch' },
|
|
{ name: 'Eraser' },
|
|
{
|
|
name: 'ArrowAnnotate',
|
|
props: {
|
|
configuration: {
|
|
getMeasurementLocationCallback: toolLabellingFlowCallback,
|
|
},
|
|
},
|
|
},
|
|
];
|
|
|
|
const onRightClick = getOnRightClickCallback(store);
|
|
const onTouchPress = getOnTouchPressCallback(store);
|
|
const onNewImage = getResetLabellingAndContextMenu(store);
|
|
const onMouseClick = getResetLabellingAndContextMenu(store);
|
|
const onTouchStart = getResetLabellingAndContextMenu(store);
|
|
const toolAction = OHIF.redux.actions.setExtensionData('cornerstone', {
|
|
availableTools,
|
|
onNewImage,
|
|
onRightClick,
|
|
onTouchPress,
|
|
onTouchStart,
|
|
onMouseClick,
|
|
});
|
|
|
|
store.dispatch(toolAction);
|
|
}
|