add mouse tool bindings persistence with localStorage

This commit is contained in:
Ross
2025-08-11 11:01:39 +01:00
parent de9cf60adc
commit efc91f8b19
+35 -1
View File
@@ -152,6 +152,10 @@ function App({ container_id, imageStacks, autoCacheStack, annotationJson, viewer
const elementRef = useRef<HTMLDivElement>(null) const elementRef = useRef<HTMLDivElement>(null)
const running = useRef(false) const running = useRef(false)
const MOUSE_SETTINGS_KEY = "dv3d_mouseToolBindings";
const CTRL_MOUSE_SETTINGS_KEY = "dv3d_ctrlMouseToolBindings";
// State to control preset menu open/close // State to control preset menu open/close
const [presetsOpen, setPresetsOpen] = useState(false); const [presetsOpen, setPresetsOpen] = useState(false);
@@ -176,6 +180,8 @@ function App({ container_id, imageStacks, autoCacheStack, annotationJson, viewer
() => Array(MAX_VIEWPORTS).fill([]) () => Array(MAX_VIEWPORTS).fill([])
); );
// Replace all setViewportImageIds calls with this function: // Replace all setViewportImageIds calls with this function:
const setViewportImageIds = (value: React.SetStateAction<string[][]>) => { const setViewportImageIds = (value: React.SetStateAction<string[][]>) => {
// Log every call // Log every call
@@ -502,6 +508,9 @@ function App({ container_id, imageStacks, autoCacheStack, annotationJson, viewer
renderingEngineRef.current.render(); renderingEngineRef.current.render();
return next; return next;
}); });
}; };
// Add this function to gather and format metadata: // Add this function to gather and format metadata:
@@ -562,7 +571,32 @@ function App({ container_id, imageStacks, autoCacheStack, annotationJson, viewer
setMetaModalOpen(true); setMetaModalOpen(true);
}; };
// Inside your App component:
// --- Load from localStorage on mount ---
useEffect(() => {
try {
const mouse = localStorage.getItem(MOUSE_SETTINGS_KEY);
const ctrl = localStorage.getItem(CTRL_MOUSE_SETTINGS_KEY);
if (mouse) setMouseToolBindings(JSON.parse(mouse));
if (ctrl) setCtrlMouseToolBindings(JSON.parse(ctrl));
} catch (e) {
// Ignore parse errors
}
}, []);
// --- Save to localStorage when changed ---
useEffect(() => {
try {
localStorage.setItem(MOUSE_SETTINGS_KEY, JSON.stringify(mouseToolBindings));
} catch (e) {}
}, [mouseToolBindings]);
useEffect(() => {
try {
localStorage.setItem(CTRL_MOUSE_SETTINGS_KEY, JSON.stringify(ctrlMouseToolBindings));
} catch (e) {}
}, [ctrlMouseToolBindings]);
useEffect(() => { useEffect(() => {
window.loadDicomStackFromFiles = (files: FileList | File[]) => { window.loadDicomStackFromFiles = (files: FileList | File[]) => {
// Convert FileList to array if needed // Convert FileList to array if needed