2019-08-13 21:36:46 +02:00
|
|
|
import { LayoutButton } from '@ohif/ui';
|
|
|
|
|
import OHIF from '@ohif/core';
|
2019-06-18 20:33:02 +02:00
|
|
|
import { connect } from 'react-redux';
|
2019-01-06 21:59:25 +01:00
|
|
|
|
2019-10-09 21:37:26 +02:00
|
|
|
const { setLayout, setViewportActive } = OHIF.redux.actions;
|
2019-01-06 21:59:25 +01:00
|
|
|
|
|
|
|
|
const mapStateToProps = state => {
|
2019-05-29 14:39:54 +02:00
|
|
|
return {
|
|
|
|
|
currentLayout: state.viewports.layout,
|
2019-10-11 18:03:59 +02:00
|
|
|
activeViewportIndex: state.viewports.activeViewportIndex,
|
2019-05-29 14:39:54 +02:00
|
|
|
};
|
2019-01-06 21:59:25 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const mapDispatchToProps = dispatch => {
|
2019-05-29 14:39:54 +02:00
|
|
|
return {
|
|
|
|
|
// TODO: Change if layout switched becomes more complex
|
2019-10-09 21:37:26 +02:00
|
|
|
onChange: (selectedCell, currentLayout, activeViewportIndex) => {
|
2019-10-11 18:03:59 +02:00
|
|
|
const viewports = [];
|
|
|
|
|
const numRows = selectedCell.row + 1;
|
|
|
|
|
const numColumns = selectedCell.col + 1;
|
|
|
|
|
const numViewports = numRows * numColumns;
|
|
|
|
|
|
2019-05-29 14:39:54 +02:00
|
|
|
for (let i = 0; i < numViewports; i++) {
|
2019-10-01 11:55:58 +02:00
|
|
|
// Hacky way to allow users to exit MPR "mode"
|
|
|
|
|
const viewport = currentLayout.viewports[i];
|
|
|
|
|
let plugin = viewport && viewport.plugin;
|
|
|
|
|
if (viewport && viewport.vtk) {
|
|
|
|
|
plugin = 'cornerstone';
|
|
|
|
|
}
|
|
|
|
|
|
2019-05-29 14:39:54 +02:00
|
|
|
viewports.push({
|
2019-10-01 11:55:58 +02:00
|
|
|
plugin,
|
2019-05-29 14:39:54 +02:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
const layout = {
|
2019-10-11 18:03:59 +02:00
|
|
|
numRows,
|
|
|
|
|
numColumns,
|
2019-05-29 14:39:54 +02:00
|
|
|
viewports,
|
|
|
|
|
};
|
2019-01-06 21:59:25 +01:00
|
|
|
|
2019-10-11 18:03:59 +02:00
|
|
|
const maxActiveIndex = numViewports - 1;
|
2019-10-09 21:37:26 +02:00
|
|
|
if (activeViewportIndex > maxActiveIndex) {
|
|
|
|
|
dispatch(setViewportActive(0));
|
|
|
|
|
}
|
|
|
|
|
|
2019-05-29 14:39:54 +02:00
|
|
|
dispatch(setLayout(layout));
|
|
|
|
|
},
|
|
|
|
|
};
|
2019-01-06 21:59:25 +01:00
|
|
|
};
|
|
|
|
|
|
2019-10-01 11:55:58 +02:00
|
|
|
const mergeProps = (propsFromState, propsFromDispatch) => {
|
|
|
|
|
const onChangeFromDispatch = propsFromDispatch.onChange;
|
2019-10-09 21:37:26 +02:00
|
|
|
const { currentLayout, activeViewportIndex } = propsFromState;
|
2019-10-01 11:55:58 +02:00
|
|
|
|
|
|
|
|
return {
|
2019-10-11 18:03:59 +02:00
|
|
|
onChange: selectedCell =>
|
|
|
|
|
onChangeFromDispatch(selectedCell, currentLayout, activeViewportIndex),
|
2019-10-01 11:55:58 +02:00
|
|
|
};
|
2019-10-11 18:03:59 +02:00
|
|
|
};
|
2019-10-01 11:55:58 +02:00
|
|
|
|
2019-01-06 21:59:25 +01:00
|
|
|
const ConnectedLayoutButton = connect(
|
2019-05-29 14:39:54 +02:00
|
|
|
mapStateToProps,
|
2019-10-01 11:55:58 +02:00
|
|
|
mapDispatchToProps,
|
|
|
|
|
mergeProps
|
2019-01-06 21:59:25 +01:00
|
|
|
)(LayoutButton);
|
|
|
|
|
|
|
|
|
|
export default ConnectedLayoutButton;
|