scope windows: the same instruments as the main window
A scope or detached window drew its traces and nothing else: no cursors, no gate band, no trigger marker, no measurement marks. They are not per-window state to be recreated -- the cursors are one pair of times, the gate one band, the trigger one instant -- so the main window's row set stays the **owner** and every window is written from it. `sync_scope_instruments()` runs in the main tick after the main's own `sync_cursors()`/ `sync_gate()`: a gesture inside a scope window is read back from *that* window's controllers first (those two calls only adopt while their own plot holds the grab, which is exactly "the drag happened here"), adopted by the owner, and then every window -- the dragged one included -- is written from the owner with the same cursor pair, mode and visibility, gate bounds and visibility, and trigger marker. `RowSet::set_cursors()` is the new pair setter; `trigger_marker_x()`/`_visible()` are the getters the mirror reads. The measurement marks travel by signal name (`RowSet::MeasureMark::signal`, filled by the measures pass), so each window finds the row that plots the signal and draws its ruler or mark there -- or none, when it does not plot it. The search marks are times on the window and are placed on every window by the same per-frame path, and the crosshair-axis-labels preference is restated to open windows when it changes. Probe: `[scope-probe] instruments windows=N cursors=N gate=N trigger=N marks=N (main trigger on=..)`, after adding a real gated `Top` measurement on `sine` -- the gate is restated visible each frame by `update_measures()` and marks come only from `show_on_plot` measurements, so the leg uses the app's own path. Docs: README, the cursors invariant, and the probe readings.
This commit is contained in:
1 parent
a29f38eaa9
commit
91ca29d181
10 files changed
+211
No files matched your search
@@ -1494,6 +1494,15 @@ alone). `copied=''` with every slot empty is a copy that moved nothing. Measured
|
||||
*Reopen closed windows* item ("clicked", the item's own handler) opens every remembered one, and
|
||||
the list is empty after (`left=0`). A `remembered` that did not grow is a destroy handler that
|
||||
forgot to record; `left` non-zero is an entry the menu did not take.
|
||||
- `instruments windows=N cursors=N gate=N trigger=N marks=N` is the **one owner, every window**:
|
||||
given a cursor pair, a gate band and the trigger marker on the main window, every scope window
|
||||
reports the same (each count is how many windows matched). `marks` is the per-window measurement
|
||||
mark count agreeing with what that window plots -- a window that plots the measured signal has
|
||||
its ruler, one that does not has none. All four counts equal to `windows` is the reading;
|
||||
`trigger` is compared against the **main** (the marker is up only while the trigger is), and the
|
||||
parenthesis reports the main's state so a zero is distinguishable from an unequal one. The leg
|
||||
adds a real gated `Top` measurement on `sine`, because the gate is restated visible every frame
|
||||
by `update_measures()` and `marks` only come from `show_on_plot` measurements.
|
||||
- The second line is the **window as a drop target and a *Plot on* group**: `drop=1` is
|
||||
`on_scope_drop_channel()` — the handler the window's own target wires — putting `square` in
|
||||
the copied window's second slot (`slot1=`), the rebuild and the area's re-point then left to
|
||||
|
||||
Reference in new issue
Block a user