docs: the badge bar, the slide-over and the dock (step 1 of the redesign)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
a1672acc70
commit
0c94caf866
7 files changed
+203
-70
No files matched your search
@@ -91,6 +91,39 @@ What feeds `Acquisition` is a `DataSource`, one of the registered *kinds*.
|
||||
every handler tests `Form::alive`, which the groups' `destroy` clears, because the chooser may have
|
||||
destroyed the sibling widgets the handlers reach by raw pointer.
|
||||
|
||||
### The window's chrome: plot, slide-over, badge bar, dock
|
||||
|
||||
The main window is a plot with three things around it, each a unit of `src/ui_*.cpp` and none of them
|
||||
touching the data path.
|
||||
|
||||
- **`SlideOver`** (`src/ui_slideover.cpp`) is one `GtkRevealer` holding a `GtkStack`, added as the second
|
||||
child placed *over* the plot (after the layout editor's buttons) in `GtkOverlay#plot_overlay`. A page is
|
||||
a `slideover_add_page(app, id, title, widget)`: the widget is wrapped in a `GtkScrolledWindow` of its
|
||||
own and registered under its id (`trigger`, `source-<id>`; `signal:<name>`, `signals`, `measure`,
|
||||
`cursors` and `events` are reserved for later steps). One page is open at a time and `App::slideover.page`
|
||||
is its id, empty when closed. The open page is **not** a session value. Esc, *Close*, a second click on the
|
||||
badge and a click on the plot close it; the click-away is a capture-phase observer (see
|
||||
[invariants-gtk-and-chrome.md](invariants-gtk-and-chrome.md)). With two or more `source-*` pages, an
|
||||
`AdwToggleGroup` under the header is the segmented switch between them.
|
||||
- **`BadgeBar`** (`src/ui_badges.cpp`) is the fixed-height row between the plot and the status line
|
||||
(`main-window.ui` `badge_bar`, two slots: signals, left, empty until step 2; system, right, holding the
|
||||
**Trigger** and **Source** badges). A badge is a flat button whose `page` is the slide-over page it
|
||||
toggles; the Source badge's page is the first `source-*` page, and a kind with none (UDPS, Flat UDP, a
|
||||
file) leaves it a read-out with `can_target` off.
|
||||
- **The dock** is the `AdwOverlaySplitView` sidebar (`side_box` > `dock_scroller` > `dock_page`): the
|
||||
signal list, the cursors and the measurements in one scroller. It holds no tab switcher and no
|
||||
revealer, and it does not hold a source kind's panels (those are slide-over pages).
|
||||
|
||||
**When each is built and when it is read.** `build_slideover()` runs in `on_activate` right after the tour
|
||||
overlay is built (the tour's overlay wraps the whole window, so its dim rectangles cover the slide-over
|
||||
too); the trigger form is registered as
|
||||
a page by `build_trigger_panel`; `build_source_panels()` registers the source pages; and
|
||||
`build_badge_bar()` runs *after* all of them, because the Source badge needs to know the first page.
|
||||
Per-tick state (the Trigger word, the Source name and `connected`, the open marks) is written by
|
||||
`sync_badge_bar()`, called from `tick()` and from `slideover_open`/`slideover_close`; it writes a label
|
||||
only when its text changed. Nothing in the badge bar or the slide-over may be read from the producer
|
||||
thread.
|
||||
|
||||
### Data path
|
||||
|
||||
`ScopeModel` holds **one `BufferStore`** (`live()`): one shared time-base ring plus one
|
||||
|
||||
Reference in new issue
Block a user