feat: Allow configurable context menus (#2894)
* feat: Context menu feat: Custom context menu Adding documentation PR updates * fix: Capture tool exception * PR updates * Add fully worked out examples in the basic test mode/extension * Fix the menu display * fix: Make the commands on clicks much more configurable * Wait for load before double clicking * docs * PR changes - nothing functional, just moving things endlessly * PR comments * PR changes - rename the default context menu * Renamed the cornerstoneContextMenu to measurementsContextMenu * Add chevron right to the sub-menus
This commit is contained in:
1 parent
4e94b588a7
commit
bc642fd2b6
40 files changed
+1472
-280
No files matched your search
@@ -1,5 +1,9 @@
|
||||
import { DicomMetadataStore, ServicesManager } from '@ohif/core';
|
||||
import { ServicesManager, Types } from '@ohif/core';
|
||||
|
||||
import {
|
||||
ContextMenuController,
|
||||
defaultContextMenu,
|
||||
} from './CustomizeableContextMenu';
|
||||
import DicomTagBrowser from './DicomTagBrowser/DicomTagBrowser';
|
||||
import reuseCachedLayouts from './utils/reuseCachedLayouts';
|
||||
import findViewportsByPosition, {
|
||||
@@ -23,8 +27,12 @@ const isHangingProtocolCommand = command =>
|
||||
(command.commandName === 'setHangingProtocol' ||
|
||||
command.commandName === 'toggleHangingProtocol');
|
||||
|
||||
const commandsModule = ({ servicesManager, commandsManager }) => {
|
||||
const commandsModule = ({
|
||||
servicesManager,
|
||||
commandsManager,
|
||||
}: Types.Extensions.ExtensionParams): Types.Extensions.CommandsModule => {
|
||||
const {
|
||||
customizationService,
|
||||
measurementService,
|
||||
hangingProtocolService,
|
||||
uiNotificationService,
|
||||
@@ -34,7 +42,60 @@ const commandsModule = ({ servicesManager, commandsManager }) => {
|
||||
toolbarService,
|
||||
} = (servicesManager as ServicesManager).services;
|
||||
|
||||
// Define a context menu controller for use with any context menus
|
||||
const contextMenuController = new ContextMenuController(
|
||||
servicesManager,
|
||||
commandsManager
|
||||
);
|
||||
|
||||
const actions = {
|
||||
/**
|
||||
* Show the context menu.
|
||||
* @param options.menuId defines the menu name to lookup, from customizationService
|
||||
* @param options.defaultMenu contains the default menu set to use
|
||||
* @param options.element is the element to show the menu within
|
||||
* @param options.event is the event that caused the context menu
|
||||
* @param options.selectorProps is the set of selection properties to use
|
||||
*/
|
||||
showContextMenu: options => {
|
||||
const {
|
||||
menuCustomizationId,
|
||||
element,
|
||||
event,
|
||||
selectorProps,
|
||||
defaultPointsPosition = [],
|
||||
} = options;
|
||||
|
||||
const optionsToUse = { ...options };
|
||||
|
||||
if (menuCustomizationId) {
|
||||
Object.assign(
|
||||
optionsToUse,
|
||||
customizationService.get(menuCustomizationId, defaultContextMenu)
|
||||
);
|
||||
}
|
||||
|
||||
// TODO - make the selectorProps richer by including the study metadata and display set.
|
||||
const { protocol, stage } = hangingProtocolService.getActiveProtocol();
|
||||
optionsToUse.selectorProps = {
|
||||
event,
|
||||
protocol,
|
||||
stage,
|
||||
...selectorProps,
|
||||
};
|
||||
|
||||
contextMenuController.showContextMenu(
|
||||
optionsToUse,
|
||||
element,
|
||||
defaultPointsPosition
|
||||
);
|
||||
},
|
||||
|
||||
/** Close a context menu currently displayed */
|
||||
closeContextMenu: () => {
|
||||
contextMenuController.closeContextMenu();
|
||||
},
|
||||
|
||||
displayNotification: ({ text, title, type }) => {
|
||||
uiNotificationService.show({
|
||||
title: title,
|
||||
@@ -336,6 +397,12 @@ const commandsModule = ({ servicesManager, commandsManager }) => {
|
||||
};
|
||||
|
||||
const definitions = {
|
||||
showContextMenu: {
|
||||
commandFn: actions.showContextMenu,
|
||||
},
|
||||
closeContextMenu: {
|
||||
commandFn: actions.closeContextMenu,
|
||||
},
|
||||
clearMeasurements: {
|
||||
commandFn: actions.clearMeasurements,
|
||||
storeContexts: [],
|
||||
|
||||
Reference in new issue
Block a user