`UDPSCOPE_PROBE_SIDE_TAB_MS` is the one reading for the design's §5 rule -- the statistics accumulator keeps running on the hidden page -- which nothing tested before. It switches to Measure, forces one pass so there is a baseline, switches away to Signals and reads again two seconds later: `advanced=4` is the assertion, and `advanced=0` is the defect where the accumulation is gated on the visible tab, which would leave a gap in min/max/avg for exactly as long as the trigger was on screen. Two things the probe has to do for itself, and getting either wrong makes `advanced=0` a lie about the tab: - it **enables its own signal**, because a signal starts disabled (enabling is what starts acquisition) and a probe that waited for one to be on would be reading another probe's side effects -- and `UDPSCOPE_ENABLE_ALL_MS` is not part of this run; - it **assigns that channel to a plot**, because a channel with no trace leaves the live window *still*, and a still window is precisely the state `update_measures()` is supposed to skip. Measured the hard way: without the assignment the probe read `advanced=0 min_n=0` with the view pinned and only four passes in twelve seconds, none of them the tab's doing. Docs: `probe-readings.md` gains the probe's entry and the signals panel's new shape (`rows == signals + 1 + math`, `divider=0` a list that lost its `+`), loses the whole `math panel:` entry, and follows `pane_sensitive=`, the gone `revealed=` field, the six toolbar controls and the tab-reading `m`/`g` key pairs. `verification.md` gains the probe's bullet and the re-measured warning figures. The invariants record the sidebar as a switcher above a stack with a scroller per page, the hidden-page trap that replaces the unrevealed-revealer one for it, that a feature's on/off is sensitivity rather than visibility, that a math channel is a row of the signal list, and that a cursors-off readout blanks to `--` with the panel left on screen. `shortcuts.ui` and the help page's window and sidebar bullets stop describing five revealers. The README records the deviation from `SPECS.md` that names the panes as separate collapsible sections. Verified: `[side-tab-probe] page=signals rows=4 accums=4 advanced=4 min_n=16`; `signals panel: labels=2 list=1 rows=9 signals=4 math=4 divider=1`; `panels: … (page_current=1) (sensitive=0) switcher=1`; `toolbar icons:` six controls with every name `(ok)`, with the Preferences dialog opened in the same run; zero `Gtk-CRITICAL` and no missing icon.
334 lines
16 KiB
XML
334 lines
16 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!-- SPDX-License-Identifier: MIT -->
|
|
<!-- SPDX-FileCopyrightText: 2026 Martino Ferrari -->
|
|
<!--
|
|
The shortcut overview, as a UI file instead of a couple of hundred lines of widget construction, and
|
|
in gedit's arrangement: one GtkShortcutsWindow holding a section per page (the window draws the
|
|
sidebar and the search box over them), each section holding a group, each group holding rows.
|
|
|
|
The mouse rows are the reason this file exists. An accelerator cannot spell "Ctrl and drag", and
|
|
libadwaita's AdwShortcutsItem, the modern replacement for this widget, has no icon property at all,
|
|
so its cell reads "No Shortcut". GtkShortcutsShortcut has exactly one gesture type whose *icon* is
|
|
drawn (shortcut-type "gesture" plus the icon property, per its own documentation), and that is what
|
|
puts the mouse glyph where the keycaps would otherwise be.
|
|
|
|
Keep this file in step with the tables in shortcuts.cpp: those are what the application handles,
|
|
this is what it shows. The `[help]` probe's `ui=` against `tables=` is the guard against the two
|
|
drifting apart.
|
|
-->
|
|
<interface>
|
|
<object class="GtkShortcutsWindow" id="help_overlay">
|
|
<property name="modal">1</property>
|
|
<child>
|
|
<object class="GtkShortcutsSection">
|
|
<property name="visible">1</property>
|
|
<property name="section-name">Acquisition</property>
|
|
<property name="title" translatable="yes">Acquisition</property>
|
|
<property name="max-height">12</property>
|
|
<child>
|
|
<object class="GtkShortcutsGroup">
|
|
<property name="visible">1</property>
|
|
<child>
|
|
<object class="GtkShortcutsShortcut">
|
|
<property name="visible">1</property>
|
|
<property name="accelerator">space</property>
|
|
<property name="title" translatable="yes">Pause or resume the display</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkShortcutsShortcut">
|
|
<property name="visible">1</property>
|
|
<property name="accelerator">a</property>
|
|
<property name="title" translatable="yes">Arm or disarm the trigger</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkShortcutsShortcut">
|
|
<property name="visible">1</property>
|
|
<property name="accelerator">t</property>
|
|
<property name="title" translatable="yes">Enable or disable trigger mode</property>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkShortcutsSection">
|
|
<property name="visible">1</property>
|
|
<property name="section-name">Panes and editors</property>
|
|
<property name="title" translatable="yes">Panes and editors</property>
|
|
<property name="max-height">12</property>
|
|
<child>
|
|
<object class="GtkShortcutsGroup">
|
|
<property name="visible">1</property>
|
|
<child>
|
|
<object class="GtkShortcutsShortcut">
|
|
<property name="visible">1</property>
|
|
<property name="accelerator">c</property>
|
|
<property name="title" translatable="yes">Enable or disable the cursors</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkShortcutsShortcut">
|
|
<property name="visible">1</property>
|
|
<property name="accelerator">m</property>
|
|
<property name="title" translatable="yes">Show the Measure tab</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkShortcutsShortcut">
|
|
<property name="visible">1</property>
|
|
<property name="accelerator">g</property>
|
|
<property name="title" translatable="yes">Show the Signals tab</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkShortcutsShortcut">
|
|
<property name="visible">1</property>
|
|
<property name="accelerator">l</property>
|
|
<property name="title" translatable="yes">Show or hide the layout editor</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkShortcutsShortcut">
|
|
<property name="visible">1</property>
|
|
<property name="accelerator">s</property>
|
|
<property name="title" translatable="yes">Show or hide the side panel</property>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkShortcutsSection">
|
|
<property name="visible">1</property>
|
|
<property name="section-name">Files and windows</property>
|
|
<property name="title" translatable="yes">Files and windows</property>
|
|
<property name="max-height">12</property>
|
|
<child>
|
|
<object class="GtkShortcutsGroup">
|
|
<property name="visible">1</property>
|
|
<child>
|
|
<object class="GtkShortcutsShortcut">
|
|
<property name="visible">1</property>
|
|
<property name="accelerator"><Control>e</property>
|
|
<property name="title" translatable="yes">Export the visible range</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkShortcutsShortcut">
|
|
<property name="visible">1</property>
|
|
<property name="accelerator">F1</property>
|
|
<property name="title" translatable="yes">Open the help window</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkShortcutsShortcut">
|
|
<property name="visible">1</property>
|
|
<property name="accelerator"><Control>slash</property>
|
|
<property name="title" translatable="yes">Open this shortcut overview</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkShortcutsShortcut">
|
|
<property name="visible">1</property>
|
|
<property name="accelerator"><Control>q</property>
|
|
<property name="title" translatable="yes">Quit udpscope</property>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkShortcutsSection">
|
|
<property name="visible">1</property>
|
|
<property name="section-name">Plot keyboard</property>
|
|
<property name="title" translatable="yes">Plot keyboard</property>
|
|
<property name="max-height">12</property>
|
|
<child>
|
|
<object class="GtkShortcutsGroup">
|
|
<property name="visible">1</property>
|
|
<child>
|
|
<object class="GtkShortcutsShortcut">
|
|
<property name="visible">1</property>
|
|
<property name="accelerator">plus minus</property>
|
|
<property name="title" translatable="yes">Zoom in or out, both axes</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkShortcutsShortcut">
|
|
<property name="visible">1</property>
|
|
<property name="accelerator"><Control>plus <Control>minus</property>
|
|
<property name="title" translatable="yes">Zoom the time axis only</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkShortcutsShortcut">
|
|
<property name="visible">1</property>
|
|
<property name="accelerator"><Alt>plus <Alt>minus</property>
|
|
<property name="title" translatable="yes">Zoom the value axis only</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkShortcutsShortcut">
|
|
<property name="visible">1</property>
|
|
<property name="accelerator">Left Right</property>
|
|
<property name="title" translatable="yes">Pan along time</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkShortcutsShortcut">
|
|
<property name="visible">1</property>
|
|
<property name="accelerator">Up Down</property>
|
|
<property name="title" translatable="yes">Pan along values</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkShortcutsShortcut">
|
|
<property name="visible">1</property>
|
|
<property name="accelerator">f</property>
|
|
<property name="title" translatable="yes">Fit the view to the data</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkShortcutsShortcut">
|
|
<property name="visible">1</property>
|
|
<property name="accelerator">Escape</property>
|
|
<property name="title" translatable="yes">Cancel the gesture in progress</property>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkShortcutsSection">
|
|
<property name="visible">1</property>
|
|
<property name="section-name">Plot mouse</property>
|
|
<property name="title" translatable="yes">Plot mouse</property>
|
|
<property name="max-height">12</property>
|
|
<child>
|
|
<object class="GtkShortcutsGroup">
|
|
<property name="visible">1</property>
|
|
<child>
|
|
<object class="GtkShortcutsShortcut">
|
|
<property name="visible">1</property>
|
|
<property name="shortcut-type">gesture</property>
|
|
<!-- A GIcon property takes an object, not a name: GtkBuilder reads a bare string as a
|
|
reference to another object and fails the whole file with "Object with ID … not
|
|
found" (a Gtk-ERROR, which aborts the process by default). -->
|
|
<property name="icon">
|
|
<object class="GThemedIcon">
|
|
<property name="names">input-mouse-symbolic</property>
|
|
</object>
|
|
</property>
|
|
<property name="title" translatable="yes">Zoom about the pointer, both axes</property>
|
|
<property name="subtitle" translatable="yes">Wheel</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkShortcutsShortcut">
|
|
<property name="visible">1</property>
|
|
<property name="shortcut-type">gesture</property>
|
|
<!-- A GIcon property takes an object, not a name: GtkBuilder reads a bare string as a
|
|
reference to another object and fails the whole file with "Object with ID … not
|
|
found" (a Gtk-ERROR, which aborts the process by default). -->
|
|
<property name="icon">
|
|
<object class="GThemedIcon">
|
|
<property name="names">input-mouse-symbolic</property>
|
|
</object>
|
|
</property>
|
|
<property name="title" translatable="yes">Zoom the time axis only</property>
|
|
<property name="subtitle" translatable="yes">Shift and wheel</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkShortcutsShortcut">
|
|
<property name="visible">1</property>
|
|
<property name="shortcut-type">gesture</property>
|
|
<!-- A GIcon property takes an object, not a name: GtkBuilder reads a bare string as a
|
|
reference to another object and fails the whole file with "Object with ID … not
|
|
found" (a Gtk-ERROR, which aborts the process by default). -->
|
|
<property name="icon">
|
|
<object class="GThemedIcon">
|
|
<property name="names">input-mouse-symbolic</property>
|
|
</object>
|
|
</property>
|
|
<property name="title" translatable="yes">Zoom the value axis only</property>
|
|
<property name="subtitle" translatable="yes">Ctrl and wheel</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkShortcutsShortcut">
|
|
<property name="visible">1</property>
|
|
<property name="shortcut-type">gesture</property>
|
|
<!-- A GIcon property takes an object, not a name: GtkBuilder reads a bare string as a
|
|
reference to another object and fails the whole file with "Object with ID … not
|
|
found" (a Gtk-ERROR, which aborts the process by default). -->
|
|
<property name="icon">
|
|
<object class="GThemedIcon">
|
|
<property name="names">input-mouse-symbolic</property>
|
|
</object>
|
|
</property>
|
|
<property name="title" translatable="yes">Pan</property>
|
|
<property name="subtitle" translatable="yes">Drag</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkShortcutsShortcut">
|
|
<property name="visible">1</property>
|
|
<property name="shortcut-type">gesture</property>
|
|
<!-- A GIcon property takes an object, not a name: GtkBuilder reads a bare string as a
|
|
reference to another object and fails the whole file with "Object with ID … not
|
|
found" (a Gtk-ERROR, which aborts the process by default). -->
|
|
<property name="icon">
|
|
<object class="GThemedIcon">
|
|
<property name="names">input-mouse-symbolic</property>
|
|
</object>
|
|
</property>
|
|
<property name="title" translatable="yes">Box zoom on time</property>
|
|
<property name="subtitle" translatable="yes">Ctrl and drag</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkShortcutsShortcut">
|
|
<property name="visible">1</property>
|
|
<property name="shortcut-type">gesture</property>
|
|
<!-- A GIcon property takes an object, not a name: GtkBuilder reads a bare string as a
|
|
reference to another object and fails the whole file with "Object with ID … not
|
|
found" (a Gtk-ERROR, which aborts the process by default). -->
|
|
<property name="icon">
|
|
<object class="GThemedIcon">
|
|
<property name="names">input-mouse-symbolic</property>
|
|
</object>
|
|
</property>
|
|
<property name="title" translatable="yes">Box zoom on values</property>
|
|
<property name="subtitle" translatable="yes">Alt and drag</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkShortcutsShortcut">
|
|
<property name="visible">1</property>
|
|
<property name="shortcut-type">gesture</property>
|
|
<!-- A GIcon property takes an object, not a name: GtkBuilder reads a bare string as a
|
|
reference to another object and fails the whole file with "Object with ID … not
|
|
found" (a Gtk-ERROR, which aborts the process by default). -->
|
|
<property name="icon">
|
|
<object class="GThemedIcon">
|
|
<property name="names">input-mouse-symbolic</property>
|
|
</object>
|
|
</property>
|
|
<property name="title" translatable="yes">Box zoom on time and values</property>
|
|
<property name="subtitle" translatable="yes">Shift and drag</property>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</interface>
|