Add toggle functionality for top stack bar visibility and persistent button to reveal it

This commit is contained in:
Ross
2025-09-22 09:41:03 +01:00
parent e6a6128aca
commit 4bff9b39f3
+64 -22
View File
@@ -173,6 +173,8 @@ function App({ container_id, imageStacks, autoCacheStack, annotationJson, viewer
const [presetsOpen, setPresetsOpen] = useState(false); const [presetsOpen, setPresetsOpen] = useState(false);
const [settingsOpen, setSettingsOpen] = useState(false); const [settingsOpen, setSettingsOpen] = useState(false);
// Control visibility of the global top stack bar (hidden by default)
const [topBarVisible, setTopBarVisible] = useState(false);
const [fullscreenHoverIdx, setFullscreenHoverIdx] = useState<number | null>(null); const [fullscreenHoverIdx, setFullscreenHoverIdx] = useState<number | null>(null);
const [openDropdownIdx, setOpenDropdownIdx] = useState<number | null>(null); const [openDropdownIdx, setOpenDropdownIdx] = useState<number | null>(null);
@@ -2983,27 +2985,45 @@ function App({ container_id, imageStacks, autoCacheStack, annotationJson, viewer
</div> </div>
)} )}
{/* Top bar stack browser */} {/* Top bar stack browser (hidden by default) */}
<div <div style={{ display: "flex", alignItems: "center", gap: 12, marginBottom: 8 }}>
style={{ <button
position: "absolute", onClick={() => setTopBarVisible(v => !v)}
top: 0, style={{
left: 0, background: topBarVisible ? "#1976d2" : "#333",
width: "100%", color: "#fff",
minHeight: 54, border: "none",
background: "#23272bE6", // slightly transparent for layering padding: "8px 12px",
color: "#fff", borderRadius: 4,
zIndex: 1001, // higher than most overlays but below modals cursor: "pointer",
display: "flex", }}
alignItems: "center", aria-pressed={topBarVisible}
borderBottom: "2px solid #444", aria-label={topBarVisible ? "Hide stack bar" : "Show stack bar"}
padding: "0 16px", >
gap: 18, {topBarVisible ? "Hide Stack Bar" : "Show Stack Bar"}
overflowX: "auto", </button>
userSelect: "none",
pointerEvents: "auto", {topBarVisible && (
}} <div
> style={{
position: "absolute",
top: 0,
left: 0,
width: "100%",
minHeight: 54,
background: "#23272bE6", // slightly transparent for layering
color: "#fff",
zIndex: 1001, // higher than most overlays but below modals
display: "flex",
alignItems: "center",
borderBottom: "2px solid #444",
padding: "0 16px",
gap: 18,
overflowX: "auto",
userSelect: "none",
pointerEvents: "auto",
}}
>
{/* Group stacks by studyId or studyInstanceUID or 'Unspecified' */} {/* Group stacks by studyId or studyInstanceUID or 'Unspecified' */}
{(() => { {(() => {
const groups: Record<string, { idx: number; stack: StackEntry }[]> = {}; const groups: Record<string, { idx: number; stack: StackEntry }[]> = {};
@@ -3063,9 +3083,31 @@ function App({ container_id, imageStacks, autoCacheStack, annotationJson, viewer
</div> </div>
)); ));
})()} })()}
</div>
)}
</div> </div>
{/* Persistent floating button to reveal the stack bar */}
<button
onClick={() => setTopBarVisible(true)}
style={{
position: "absolute",
top: 12,
left: 12,
zIndex: 2000,
background: "#1976d2",
color: "#fff",
border: "none",
padding: "8px 10px",
borderRadius: 6,
cursor: "pointer",
boxShadow: "0 2px 10px rgba(0,0,0,0.3)",
}}
aria-label="Show stack bar"
>
Show Stacks
</button>
<div> <div>
{/* Side menu toggle button */} {/* Side menu toggle button */}
<button <button
style={{ style={{