Design correction from smoke-testing SlicerOpenLIFU#641. I introduced new patterns instead of using the reference.
What I got wrong
-
Session Overview is not on the timeline. The reference design has Session Overview as the FIRST page of the workflow timeline, followed by Target Selection. I put only Target Selection on the timeline, leaving Overview as an off-timeline page users had to navigate to via a bespoke button.
-
"Edit Targets…" button on Session Overview is spurious. I added an Actions group to Planning Session Overview with an "Edit Targets…" button that navigates to Target Selection. That's not the right pattern -- Overview is itself the first workflow step, and the timeline strip is how the user moves to Target Selection. Users navigate the timeline; they don't tap page-specific navigation buttons.
-
Targets table is uncapped-tall. The outer.addWidget(build_targets_group(), 1) stretch factor plus the table's own stretch inside the group means the table grows to fill all available vertical space. The user has to scroll the page to see the Add Target button. Table should be fixed / capped at ~3-4 rows and scroll internally when there are more targets.
Fix
PAGE_DEFS (host/page_registry.py)
Put Planning Session Overview on the timeline, before Target Selection:
PAGE_DEFS: List[Page] = [
Page("OpenLIFUHome", "Home", on_timeline=False),
Page("OpenLIFUDataManager", "Data Manager", on_timeline=False),
Page("OpenLIFUSonicationSessionOverview", "Sonication Session Overview", on_timeline=False),
Page("OpenLIFUPlanningSessionOverview", "Planning Session Overview", on_timeline=True),
Page("OpenLIFUTargetSelection", "Target Selection", on_timeline=True),
]
Sonication Session Overview stays off-timeline for now because the Sonication workflow pages (Localization / Sonication Control) don't exist yet. When they land, Session Overview registration for that workflow branches into a mode-switch (still deferred per SlicerOpenLIFU#633). For now, Planning workflow gets the timeline treatment first.
Planning Session Overview
- Remove the
build_actions_group() method and the "Edit Targets…" button entirely.
- Remove the
on_edit_targets_button_clicked() handler.
- Remove the
navigate_to_host_page import (no longer needed here).
- Overview stays information-only; users advance via the timeline strip's Target Selection circle in the footer or the Next button.
Target Selection
- Cap the targets table's height so it shows ~3-4 rows and scrolls internally when there are more.
- Drop the stretch factor on the targets group so it doesn't expand vertically past its natural size.
- Add a stretch at the bottom of the page's outer QVBoxLayout so the group hugs the top of the available space.
Docs
docs/pages/planning-session-overview.md: drop the Actions section from the screen layout, update the Public API table, remove the Edit Targets handler row.
docs/pages/target-selection.md: note that navigation into this page is via the timeline strip (or the Next button on Overview) rather than an in-page button.
docs/architecture.md: block diagram drops the Edit Targets… edge; the timeline is the sole navigation surface for the workflow.
Non-goals
- No changes to
TimelineWidget, Workflow, or WorkflowControls. The existing infrastructure is fine.
- No changes to the header / footer layout.
hostFooterContainer already sits outside the scrollable pageStack -- the fixed-footer semantics were there all along.
- No Sonication workflow timeline yet. Follow-up when Sonication Localization + Sonication Control pages land.
Acceptance
- Load a PlanningSession from Home. Planning Session Overview opens with the timeline strip in the fixed footer showing two circles: "Planning Session Overview" (current, ring around it) and "Target Selection" (reachable, hollow).
- Overview has no Edit Targets… button. Only the info-only groups (Session, Context, Summary).
- Click the Target Selection circle in the footer timeline → Target Selection page opens.
- Target Selection page fits inside the viewport without scrolling to see Add Target. Targets table shows at most ~3-4 rows; scrolls internally when a session has more.
- Add / Import / Edit / Remove buttons are visible without scrolling the page.
- Timeline circles reflect visited (filled) vs current (with ring) vs reachable (hollow).
Relates to SlicerOpenLIFU#641, SlicerOpenLIFU#640, SlicerOpenLIFU#631.
Design correction from smoke-testing SlicerOpenLIFU#641. I introduced new patterns instead of using the reference.
What I got wrong
Session Overview is not on the timeline. The reference design has Session Overview as the FIRST page of the workflow timeline, followed by Target Selection. I put only Target Selection on the timeline, leaving Overview as an off-timeline page users had to navigate to via a bespoke button.
"Edit Targets…" button on Session Overview is spurious. I added an Actions group to Planning Session Overview with an "Edit Targets…" button that navigates to Target Selection. That's not the right pattern -- Overview is itself the first workflow step, and the timeline strip is how the user moves to Target Selection. Users navigate the timeline; they don't tap page-specific navigation buttons.
Targets table is uncapped-tall. The
outer.addWidget(build_targets_group(), 1)stretch factor plus the table's own stretch inside the group means the table grows to fill all available vertical space. The user has to scroll the page to see the Add Target button. Table should be fixed / capped at ~3-4 rows and scroll internally when there are more targets.Fix
PAGE_DEFS (host/page_registry.py)
Put Planning Session Overview on the timeline, before Target Selection:
Sonication Session Overview stays off-timeline for now because the Sonication workflow pages (Localization / Sonication Control) don't exist yet. When they land, Session Overview registration for that workflow branches into a mode-switch (still deferred per SlicerOpenLIFU#633). For now, Planning workflow gets the timeline treatment first.
Planning Session Overview
build_actions_group()method and the "Edit Targets…" button entirely.on_edit_targets_button_clicked()handler.navigate_to_host_pageimport (no longer needed here).Target Selection
Docs
docs/pages/planning-session-overview.md: drop the Actions section from the screen layout, update the Public API table, remove the Edit Targets handler row.docs/pages/target-selection.md: note that navigation into this page is via the timeline strip (or the Next button on Overview) rather than an in-page button.docs/architecture.md: block diagram drops theEdit Targets…edge; the timeline is the sole navigation surface for the workflow.Non-goals
TimelineWidget,Workflow, orWorkflowControls. The existing infrastructure is fine.hostFooterContaineralready sits outside the scrollable pageStack -- the fixed-footer semantics were there all along.Acceptance
Relates to SlicerOpenLIFU#641, SlicerOpenLIFU#640, SlicerOpenLIFU#631.