forked from OHIF/Viewers
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(DoubleClick): double click a viewport to one up and back (OHIF#3285
) * feat(DoubleClick): double click a viewport to one up and back Added a toggleOneUp command that puts the active viewport into a 1x1 grid layout and it toggles out of 'one-up' by restoring its saved 'toggleOneUpViewportGridStore' from the StateSyncService. Added double click customization for the Cornerstone extension with the default double click handling being the toggleOneUp command. Added a cypress test for the double click functionality. * PR feedback: - tracked viewport measurements no longer show as dashed when toggling one up - disallowed double clicking near a measurement - updated cornerstone3D dependencies to fix double click of TMTV and volume viewport 3D - created ViewportGridService.getLayoutOptionsFromState * Updated the ViewportGridService docs. * Switched to using 'cornerstoneViewportClickCommands' and consistency with the context menu clicks.
- Loading branch information
Showing
14 changed files
with
397 additions
and
37 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
import { eventTarget, EVENTS } from '@cornerstonejs/core'; | ||
import { Enums } from '@cornerstonejs/tools'; | ||
import { CommandsManager, CustomizationService, Types } from '@ohif/core'; | ||
import { findNearbyToolData } from './utils/findNearbyToolData'; | ||
|
||
const cs3DToolsEvents = Enums.Events; | ||
|
||
const DEFAULT_DOUBLE_CLICK = { | ||
doubleClick: { | ||
commandName: 'toggleOneUp', | ||
commandOptions: {}, | ||
}, | ||
}; | ||
|
||
/** | ||
* Generates a double click event name, consisting of: | ||
* * alt when the alt key is down | ||
* * ctrl when the cctrl key is down | ||
* * shift when the shift key is down | ||
* * 'doubleClick' | ||
*/ | ||
function getDoubleClickEventName(evt: CustomEvent) { | ||
const nameArr = []; | ||
if (evt.detail.event.altKey) nameArr.push('alt'); | ||
if (evt.detail.event.ctrlKey) nameArr.push('ctrl'); | ||
if (evt.detail.event.shiftKey) nameArr.push('shift'); | ||
nameArr.push('doubleClick'); | ||
return nameArr.join(''); | ||
} | ||
|
||
export type initDoubleClickArgs = { | ||
customizationService: CustomizationService; | ||
commandsManager: CommandsManager; | ||
}; | ||
|
||
function initDoubleClick({ | ||
customizationService, | ||
commandsManager, | ||
}: initDoubleClickArgs): void { | ||
const cornerstoneViewportHandleDoubleClick = (evt: CustomEvent) => { | ||
// Do not allow double click on a tool. | ||
const nearbyToolData = findNearbyToolData(commandsManager, evt); | ||
if (nearbyToolData) { | ||
return; | ||
} | ||
|
||
const eventName = getDoubleClickEventName(evt); | ||
|
||
// Allows for the customization of the double click on a viewport. | ||
const customizations = | ||
customizationService.get('cornerstoneViewportClickCommands') || | ||
DEFAULT_DOUBLE_CLICK; | ||
|
||
const toRun = customizations[eventName]; | ||
|
||
if (!toRun) { | ||
return; | ||
} | ||
|
||
commandsManager.run(toRun); | ||
}; | ||
|
||
function elementEnabledHandler(evt: CustomEvent) { | ||
const { element } = evt.detail; | ||
|
||
element.addEventListener( | ||
cs3DToolsEvents.MOUSE_DOUBLE_CLICK, | ||
cornerstoneViewportHandleDoubleClick | ||
); | ||
} | ||
|
||
function elementDisabledHandler(evt: CustomEvent) { | ||
const { element } = evt.detail; | ||
|
||
element.removeEventListener( | ||
cs3DToolsEvents.MOUSE_DOUBLE_CLICK, | ||
cornerstoneViewportHandleDoubleClick | ||
); | ||
} | ||
|
||
eventTarget.addEventListener( | ||
EVENTS.ELEMENT_ENABLED, | ||
elementEnabledHandler.bind(null) | ||
); | ||
|
||
eventTarget.addEventListener( | ||
EVENTS.ELEMENT_DISABLED, | ||
elementDisabledHandler.bind(null) | ||
); | ||
} | ||
|
||
export default initDoubleClick; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
/** | ||
* Finds tool nearby event position triggered. | ||
* | ||
* @param {Object} commandsManager mannager of commands | ||
* @param {Object} event that has being triggered | ||
* @returns cs toolData or undefined if not found. | ||
*/ | ||
export const findNearbyToolData = (commandsManager, evt) => { | ||
if (!evt?.detail) { | ||
return; | ||
} | ||
const { element, currentPoints } = evt.detail; | ||
return commandsManager.runCommand( | ||
'getNearbyToolData', | ||
{ | ||
element, | ||
canvasCoordinates: currentPoints?.canvas, | ||
}, | ||
'CORNERSTONE' | ||
); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.