From 3294151a922a45b20455439947d22b212a5a92b0 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 27 Apr 2026 09:26:27 +0100 Subject: [PATCH] Add shift key support for reference cursors and update button text --- dicom-viewer/src/App.tsx | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/dicom-viewer/src/App.tsx b/dicom-viewer/src/App.tsx index e5ccb0b..fe576b3 100644 --- a/dicom-viewer/src/App.tsx +++ b/dicom-viewer/src/App.tsx @@ -1118,6 +1118,7 @@ function App({ container_id, imageStacks, autoCacheStack, annotationJson, viewer }, []); const [altPressed, setAltPressed] = useState(false); + const [shiftPressed, setShiftPressed] = useState(false); useEffect(() => { const mainToolGroup = ToolGroupManager.getToolGroup(MAIN_TOOL_GROUP_ID); @@ -1144,23 +1145,32 @@ function App({ container_id, imageStacks, autoCacheStack, annotationJson, viewer useEffect(() => { const handleKeyDown = (e: KeyboardEvent) => { if (e.altKey) setAltPressed(true); + if (e.shiftKey) setShiftPressed(true); }; const handleKeyUp = (e: KeyboardEvent) => { if (!e.altKey) setAltPressed(false); + if (!e.shiftKey) setShiftPressed(false); + }; + const handleBlur = () => { + setAltPressed(false); + setShiftPressed(false); }; window.addEventListener("keydown", handleKeyDown); window.addEventListener("keyup", handleKeyUp); + window.addEventListener("blur", handleBlur); return () => { window.removeEventListener("keydown", handleKeyDown); window.removeEventListener("keyup", handleKeyUp); + window.removeEventListener("blur", handleBlur); }; }, []); useEffect(() => { - if (!altEnablesReferenceCursors) return; const mainToolGroup = ToolGroupManager.getToolGroup(MAIN_TOOL_GROUP_ID); if (!mainToolGroup) return; - if (altPressed) { + const modifierActive = shiftPressed || (altEnablesReferenceCursors && altPressed); + + if (modifierActive) { if (!mainToolGroup.hasTool(ReferenceCursors.toolName)) { mainToolGroup.addTool(ReferenceCursors.toolName); } @@ -1171,7 +1181,7 @@ function App({ container_id, imageStacks, autoCacheStack, annotationJson, viewer mainToolGroup.setToolDisabled(ReferenceCursors.toolName); } } - }, [altPressed, altEnablesReferenceCursors]); + }, [altPressed, shiftPressed, altEnablesReferenceCursors]); // Helper to apply all mouse tool bindings (normal or ctrl) const applyMouseToolBindings = useCallback(() => { @@ -4111,8 +4121,8 @@ function App({ container_id, imageStacks, autoCacheStack, annotationJson, viewer onClick={() => setAltEnablesReferenceCursors((prev) => !prev)} > {altEnablesReferenceCursors - ? "Disable Alt Key for Reference Cursors" - : "Enable Alt Key for Reference Cursors"} + ? "Disable Alt Key for Reference Cursors (Shift always works)" + : "Enable Alt Key for Reference Cursors (Shift always works)"}