docs: the readouts dock, the cursors and measurement pages

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Martino FerrariandClaude Sonnet 4.6 committed 2026-11-03 06:37:57 +01:00
1 parent a2ce02db92
commit ce3cc97b91
11 files changed
+205 -88

No files matched your search

+51 -25
View File
@@ -146,10 +146,21 @@ panel laid over the plot's right edge, opaque, with its own title, a *Close* but
page. The Trigger badge opens the trigger form; the Source badge (when shown) opens the source kind's own panels
(the E-1608's *Analog out* and *Digital I/O*, behind a segmented switch at the top of the panel). It
closes with a second click on its badge, with `Esc`, with *Close*, or with a click on the plot; it never
resizes the plot. The right-hand **dock** (the existing sidebar, 320 px) holds what is left of the old
tabs in one scroller: the cursors and the measurements, shown from the start and insensitive until
the stream has signals (the signal list moved to the `signals` slide-over page). It is temporary -- see
"Review findings not (yet) implemented" for what the redesign still has to do with it.
resizes the plot. The right-hand **dock** (the sidebar, **280 px**, fixed) holds the **readouts**: a
compact, read-only copy of the cursors table (a header row `A B delta`, then one line per cursor
line) and of the measurements (one line each: the signal's colour chip, the type, the value). It is
shown from the start and insensitive until the stream has signals. Each of the two blocks has an
**Edit** button, which opens the full panel as a slide-over page -- `cursors` or `measure` -- over the
plot; `m` toggles the `measure` page, and a click on a measurement's line in the dock opens that
measurement's dialog. The header's **Cursors** toggle only switches the cursors on and off (it
mirrors the switch inside the `cursors` page); with the cursors off the dock's cursor lines are
insensitive, not hidden. Both pages are insensitive until the stream has signals, like the dock. The dock's
cells are a fixed number of characters wide and ellipsized, so the dock's width and height do not
depend on what a value reads: the **who** cell of a cursor line is 5 characters (the full text is its
tooltip), a value cell 9 (its tooltip is the full text). The dock and the pages show **one string**:
`update_cursors_pane()` and `update_measures()` format each value once and hand that variable to the
page's label and to the dock's, so the two cannot disagree. The remaining part of the redesign is
listed under "Review findings not (yet) implemented".
Threading: one producer thread owns the data source (the UDPStreamer client is the built-in
one) and calls `poll()`; the GTK main thread owns every widget and the GL contexts.
@@ -1229,7 +1240,11 @@ decides which steps exist at all: a stop on a slide-over page is always kept, be
reveals it, while one whose *pane is collapsed* (the dock, in a window too narrow to put it beside the
plot) is dropped, because it is unmapped with its pane (a hidden page keeps its own *visible* flag
true -- the widget's own flag, which is all `is_visible()` walks -- so the old test walked over
surfaces that were not on screen); a narrow window therefore walks four steps. The chooser's
surfaces that were not on screen); a narrow window therefore walks five steps. The dock's stop
describes the readouts and the **Edit** buttons; it names no slide-over page, so it closes the panel
like the plot's. The cursors and measurements pages have no stop of their own, and their contextual
help "(i)" hints are attached to the pages' headings the way the trigger's and the signals' are: they
are drawn while the page is open, and the dock has none. The chooser's
tour works the same way over its own two pages: its tabs step shows the *Waveforms* page and
stepping off it -- in either direction -- brings the *Sources* page back.
@@ -1631,9 +1646,10 @@ it holds more than the window the bound became the whole ring, and a zoom-out wa
view past the window into data the window was never set to show. A partly filled window
simply has an empty left-hand side.
**The panel switches are on the toolbar, and the panes own their own controls.** Cursors,
Measurements and Math channels are icon toggles in the header bar rather than rows in the overflow
menu, and **Reset cursors** sits in the cursors pane beside the mode it resets (it acts on that
**The panel switches are on the toolbar, and the panes own their own controls.** (Since the
slide-over redesign the toolbar keeps only the **Cursors** toggle of the three icons named here, and it
only enables the cursors; the measurements are reached by `m` or the dock's Edit button, and the math
editor from the signal list.) **Reset cursors** sits in the cursors page beside the mode it resets (it acts on that
pane's instruments and is only visible while they exist). The rows read, left to right: **window control, trigger, pause** — the trigger and the pause are
read against the span on screen, so they sit with the control that sets it — then, on the right,
**cursors, measurements, math, sidebar** and **the menu last**. With `HeaderBar::pack_end()` the
@@ -2849,7 +2865,7 @@ reaches every widget). The full key table:
| `Space` | pause / resume |
| `t` | enable / disable trigger mode |
| `c` | enable / disable the cursors |
| `m` | go to Measure (scroll the dock to the cursors and the measurements) |
| `m` | open or close the Measurements page (the `measure` slide-over page; the dock's Edit button for the cursors opens the `cursors` page) |
| `g` | go to Signals (open or close the signal list, the `signals` slide-over page, also reached by the `+` badge) |
| `l` | show / hide the layout editor |
| `s` | show / hide the dock |
@@ -2970,9 +2986,10 @@ now — they are listed so they are not mistaken for anything else:
signal list -- in one scrolling column; with four of them open in a 320 px sidebar every
section was short of room, and finding one meant scrolling past the others. The sidebar was then two
text tabs (a **Measure** tab and a **Signals** tab, with a source kind's own tabs beside them), and four
tabs did not fit 320 px. It is **one dock** now, with no tab switcher: the cursors and the
measurements in one scroller, shown from the start and insensitive until the stream has signals; `m`
scrolls it to the cursors; the **signal list** is the `signals` slide-over page (`g`, or the `+` badge). The **trigger form** and a **source's own
tabs did not fit 320 px. It is **one dock** now, with no tab switcher: the **readouts** (a compact,
read-only copy of the cursors and of the measurements, each block with an **Edit** button), shown from
the start and insensitive until the stream has signals; the full cursors and measurements panels are the
`cursors` and `measure` slide-over pages (`m` toggles `measure`); the **signal list** is the `signals` slide-over page (`g`, or the `+` badge). The **trigger form** and a **source's own
controls** are pages of the slide-over, reached from the badge bar. The trigger pane also has a **locked** mode, which is what a returning user gets: it
shows one line saying what it is set to and offers no control that changes the configuration -- its
heading has an `[edit]` button to switch to the full pane, and back. The signals have no lock: the
@@ -2987,19 +3004,28 @@ now — they are listed so they are not mistaken for anything else:
toggle hides a pane any more: cursors-off **disables** its readout and leaves it in place, and
trigger-off leaves the trigger form fully editable -- a trigger is configured *before* it is
switched on, and the locked view says `stream (trigger off)` instead of the settings -- and the measurements' and math panes' toolbar toggles are gone with the panes.
- **The badge bar / slide-over / dock redesign is in progress; this is its first step, and it deviates
from `docs/superpowers/specs/2026-11-02-ui-badges-dock-design.md` in three known ways.**
(1) The dock keeps the sidebar's **320 px**, not the spec's ~280: the panels it holds were built for
320, and the width changes when they become compact readouts (step 3). (2) The session file gains the
dock's *shown* state only, not a width -- the dock's width is fixed, so there is nothing to persist
-- and does not store the open slide-over page. (3) The **Trigger badge** shows `off`, `armed` and
`triggered` as the spec says, and two more words, `capturing` (a post-trigger window is filling) and
`disarmed` (trigger on, not armed), so the label never claims a state the engine is not in. The signal badges, the
signal pages and the drag (step 2) are done. Still to
come, in the spec's order: the compact readouts (3), the events
section in the dock, the deletion of the left pane and the Events toggle, and `USER-GUIDE.md` and the
manual's figures (4). Until then the events pane, the header's Events toggle and the manual still
describe the previous layout.
- **The badge bar / slide-over / dock redesign is in progress; steps 1-3 are done, and they deviate
from `docs/superpowers/specs/2026-11-02-ui-badges-dock-design.md` in these known ways.**
(1) The session file gains the dock's *shown* state only, not a width -- the dock's width is
fixed (**280 px**, as the spec says), so there is nothing to persist -- and does not store the open
slide-over page. (2) The **Trigger badge** shows `off`, `armed` and `triggered` as the spec says, and
two more words, `capturing` (a post-trigger window is filling) and `disarmed` (trigger on, not
armed), so the label never claims a state the engine is not in. (3) The **`cursors` and `measure`
pages hold the existing panels unchanged** (the cursors table with its mode, its Reset and its
switch; the measurement list with its `+`, statistics and per-row edit), so the pages carry the
panels' own controls, not a new form. (4) The **measurement editor stays a dialog**: the spec has the
measurement add/edit/remove inside the `measure` page, but the dialog (`open_measure_dialog()`) is
what the `+`, a row's edit button and a click on a dock line all open; the page lists the measurements
and hosts the dialog's entry points. (5) A **dock cursor line carries the full who / A / B / delta
cells** (not one value per line as the spec sketches), in a 5 + 3 x 9 character fixed-width grid: the
**who** cell ellipsizes at **5 characters** -- the width the 280 px pin allows; with 8 the readouts'
minimum width was 304 px and widened the sidebar -- and its tooltip carries the full text. (6) The dock and
the pages **share one string** for every value (see `docs/claude/invariants-readouts-and-cursors.md`).
The signal badges, the signal pages and the drag (step 2) are done. Still to come, in the spec's
order: the events section in the dock, the deletion of the left pane and the Events toggle, and
`USER-GUIDE.md` and the manual's figures (4). Until then the events pane, the header's Events toggle
and the manual (which still describes the side panel's tabs, and the cursors and measurements as
panes of it) still describe the previous layout.
- **A plot holds at most eight signals** (`RowSet::kSlotsPerRow`), because a `Plot`
cannot give up a trace and the slots are therefore created up front.
- **One toggle drives both cursor orientations.** The vertical markers and the