Two label-only rows in trigger-panel.ui (band_row, hf_row, after holdoff_row and before
mode_row) and the two spins the code appends into them: the band on the level spins' scale
in signal units, the HF reject at 0-1e7 Hz with 0 off. Both are published with the other
fields -- read before the model lock is taken, assigned inside it -- and both join the
value-changed loop, so editing either republishes the condition.
The rows are shown per type: the band for every type but Dropout, which is an absence a
band cannot describe, and the HF reject for all of them, since it sits before every
comparison. `sync_trigger_rows()` resolves a row as its spin's parent rather than keeping a
second handle to it: the row comes from the file and holds one child.
The exit dump counts the panel's controls, so it reads controls_inside=15/15 now -- and the
probe confirms it, along with both search readings and no Gtk-CRITICAL:
[udpscope] trigger panel: boxes=15 controls_inside=15/15 search_widgets=4/4 search_inside=4/4
301 lines
11 KiB
XML
301 lines
11 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!-- SPDX-License-Identifier: MIT -->
|
|
<!-- SPDX-FileCopyrightText: 2026 Martino Ferrari -->
|
|
<!--
|
|
The trigger panel's frame: the heading, one labelled row per setting, the two buttons that run it, and
|
|
the search block.
|
|
|
|
Every row here is a label and a place for a control, and the control itself is built in code. A
|
|
dropdown's model and a spin button's range are the *application's* (the condition list, the level
|
|
range that follows the channel's scale), while a label is text a translator owns, so the split runs
|
|
between them: the row is the file's and the control is appended into it. That is the arrangement
|
|
`labeled_box()` used to make in code, with the label moved where all the other labels are.
|
|
|
|
Between the controls, the labels and the search block are what "read the panel" means, so they are
|
|
here: which of these rows `sync_trigger_rows()` shows depends on the condition (a pulse width has a
|
|
width, a window has two levels, a dropout has a timeout), and that is the code's decision, not this
|
|
file's — this file just has to have a row for each of them to show or hide.
|
|
-->
|
|
<interface>
|
|
<object class="GtkBox" id="trigger_panel">
|
|
<property name="orientation">vertical</property>
|
|
<property name="spacing">6</property>
|
|
<property name="margin-top">8</property>
|
|
<property name="margin-bottom">8</property>
|
|
<property name="margin-start">8</property>
|
|
<property name="margin-end">8</property>
|
|
<child>
|
|
<object class="GtkLabel" id="trigger_heading">
|
|
<property name="label" translatable="yes">Trigger</property>
|
|
<property name="halign">start</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkBox" id="signal_row">
|
|
<property name="orientation">horizontal</property>
|
|
<property name="spacing">6</property>
|
|
<child>
|
|
<object class="GtkLabel">
|
|
<property name="label" translatable="yes">signal</property>
|
|
<property name="halign">start</property>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkBox" id="condition_row">
|
|
<property name="orientation">horizontal</property>
|
|
<property name="spacing">6</property>
|
|
<child>
|
|
<object class="GtkLabel">
|
|
<property name="label" translatable="yes">condition</property>
|
|
<property name="halign">start</property>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkBox" id="edge_row">
|
|
<property name="orientation">horizontal</property>
|
|
<property name="spacing">6</property>
|
|
<child>
|
|
<object class="GtkLabel">
|
|
<property name="label" translatable="yes">edge</property>
|
|
<property name="halign">start</property>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkBox" id="cmp_row">
|
|
<property name="orientation">horizontal</property>
|
|
<property name="spacing">6</property>
|
|
<child>
|
|
<object class="GtkLabel">
|
|
<property name="label" translatable="yes">width is</property>
|
|
<property name="halign">start</property>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkBox" id="width_row">
|
|
<property name="orientation">horizontal</property>
|
|
<property name="spacing">6</property>
|
|
<child>
|
|
<object class="GtkLabel">
|
|
<property name="label" translatable="yes">width s</property>
|
|
<property name="halign">start</property>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkBox" id="width2_row">
|
|
<property name="orientation">horizontal</property>
|
|
<property name="spacing">6</property>
|
|
<child>
|
|
<object class="GtkLabel">
|
|
<property name="label" translatable="yes">and s</property>
|
|
<property name="halign">start</property>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkBox" id="level2_row">
|
|
<property name="orientation">horizontal</property>
|
|
<property name="spacing">6</property>
|
|
<child>
|
|
<object class="GtkLabel">
|
|
<property name="label" translatable="yes">to level</property>
|
|
<property name="halign">start</property>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkBox" id="timeout_row">
|
|
<property name="orientation">horizontal</property>
|
|
<property name="spacing">6</property>
|
|
<child>
|
|
<object class="GtkLabel">
|
|
<property name="label" translatable="yes">timeout s</property>
|
|
<property name="halign">start</property>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkBox" id="level_row">
|
|
<property name="orientation">horizontal</property>
|
|
<property name="spacing">6</property>
|
|
<child>
|
|
<object class="GtkLabel">
|
|
<property name="label" translatable="yes">level</property>
|
|
<property name="halign">start</property>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkBox" id="pre_row">
|
|
<property name="orientation">horizontal</property>
|
|
<property name="spacing">6</property>
|
|
<child>
|
|
<object class="GtkLabel">
|
|
<property name="label" translatable="yes">pre-trigger %</property>
|
|
<property name="halign">start</property>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkBox" id="holdoff_row">
|
|
<property name="orientation">horizontal</property>
|
|
<property name="spacing">6</property>
|
|
<child>
|
|
<object class="GtkLabel">
|
|
<property name="label" translatable="yes">hold-off s</property>
|
|
<property name="halign">start</property>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkBox" id="band_row">
|
|
<property name="orientation">horizontal</property>
|
|
<property name="spacing">6</property>
|
|
<child>
|
|
<object class="GtkLabel">
|
|
<property name="label" translatable="yes">noise band</property>
|
|
<property name="halign">start</property>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkBox" id="hf_row">
|
|
<property name="orientation">horizontal</property>
|
|
<property name="spacing">6</property>
|
|
<child>
|
|
<object class="GtkLabel">
|
|
<property name="label" translatable="yes">HF reject Hz</property>
|
|
<property name="halign">start</property>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkBox" id="mode_row">
|
|
<property name="orientation">horizontal</property>
|
|
<property name="spacing">6</property>
|
|
<child>
|
|
<object class="GtkLabel">
|
|
<property name="label" translatable="yes">mode</property>
|
|
<property name="halign">start</property>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkBox" id="record_row">
|
|
<property name="orientation">horizontal</property>
|
|
<property name="spacing">6</property>
|
|
<child>
|
|
<object class="GtkLabel" id="record_label">
|
|
<property name="label" translatable="yes">record events</property>
|
|
<property name="halign">start</property>
|
|
<property name="hexpand">1</property>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkButton" id="trigger_arm">
|
|
<property name="label" translatable="yes">Arm</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkButton" id="trigger_live">
|
|
<property name="label" translatable="yes">Go live (trigger off)</property>
|
|
<property name="tooltip-text" translatable="yes">disable trigger mode and stream continuously</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkExpander" id="search_exp">
|
|
<property name="label" translatable="yes">Search the buffer</property>
|
|
<property name="tooltip-text" translatable="yes">find every place in the retained buffer where the condition above holds, and step through them</property>
|
|
<property name="child">
|
|
|
|
<object class="GtkBox" id="search_sbox">
|
|
<property name="orientation">vertical</property>
|
|
<property name="spacing">4</property>
|
|
<property name="margin-top">4</property>
|
|
<child>
|
|
<object class="GtkBox">
|
|
<property name="orientation">horizontal</property>
|
|
<property name="spacing">6</property>
|
|
<child>
|
|
<object class="GtkButton" id="search_run">
|
|
<property name="label" translatable="yes">Search</property>
|
|
<property name="hexpand">1</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkButton" id="search_cancel">
|
|
<property name="label" translatable="yes">Stop</property>
|
|
<property name="sensitive">0</property>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkLabel" id="search_status">
|
|
<property name="label" translatable="yes">not searched</property>
|
|
<property name="halign">start</property>
|
|
<property name="wrap">1</property>
|
|
<property name="css-classes">dim-label</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkBox">
|
|
<property name="orientation">horizontal</property>
|
|
<property name="spacing">6</property>
|
|
<child>
|
|
<object class="GtkButton" id="search_prev">
|
|
<property name="icon-name">go-previous-symbolic</property>
|
|
<property name="tooltip-text" translatable="yes">the previous hit</property>
|
|
<property name="sensitive">0</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkLabel" id="search_pos">
|
|
<property name="label">--</property>
|
|
<property name="hexpand">1</property>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkButton" id="search_next">
|
|
<property name="icon-name">go-next-symbolic</property>
|
|
<property name="tooltip-text" translatable="yes">the next hit</property>
|
|
<property name="sensitive">0</property>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</child>
|
|
<child>
|
|
<object class="GtkLabel" id="search_marks">
|
|
<property name="label"> </property>
|
|
<property name="halign">start</property>
|
|
<property name="css-classes">dim-label</property>
|
|
<property name="ellipsize">3</property>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</property>
|
|
</object>
|
|
</child>
|
|
</object>
|
|
</interface>
|