ui: the source chooser's window is a .ui file, and its pages an AdwViewStack
The last hand-built UI outside ui.cpp. The window, its header bar, its two pages and the four buttons that are about the chooser rather than about a source now live in src/ui/source-chooser.ui; the rows stay in code because a source row and a waveform row are data, rebuilt whenever the known hosts or the recent files change. The pages were a GtkNotebook and are an AdwViewStack under an AdwViewSwitcherBar, which is what current libadwaita asks for and the same information without a tab strip. The three actions moved from a button row at the foot into the header bar, the shape source-form.ui already uses -- and deliberately without receives-default, since Enter must keep activating the selected row. Nothing carries a value: the tooltips and labels moved as they were, the handlers are the same functions, and the switch is by page *name* rather than by index. The probe reads the frame back -- `[sources] chooser ui: page='sources' title='Sources' icon=yes page='waveforms' … switcher_wired=1 buttons=[prefs=1 new_host=1 open=1 cancel=1]` -- so a .ui that lost an id is named instead of opening a window with a hole in it, and `check_ui` type-checks the file against the GIR (7 ok, 0 failed). Two things the checks caught while doing it: the new frame dropped the call that fills the waveforms page (the unused-function warning), and `AdwViewStackPage` is a GObject that *wraps* a child rather than being one, so reading the pages needs adw_view_stack_get_page().
This commit is contained in:
1 parent
723f5c3b4c
commit
0a64e9e854
5 files changed
+216
-80
No files matched your search
@@ -0,0 +1,119 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- SPDX-License-Identifier: MIT -->
|
||||
<!-- SPDX-FileCopyrightText: 2026 Martino Ferrari -->
|
||||
<!--
|
||||
What to watch: one page of sources it can connect to, one page of waveforms opened before, and the
|
||||
three buttons that are about the chooser rather than about a source.
|
||||
|
||||
This window exists *before* the application does. `main()` asks it what to open and only then builds
|
||||
the model and the rest of the interface, which is why the preferences are reachable from here at all
|
||||
— and why nothing in this file may reach for `App`.
|
||||
|
||||
The two pages are an `AdwViewStack` under an `AdwViewSwitcherBar` and not a `GtkNotebook`: a tab strip
|
||||
is the wrong shape for two views of one thing, and the switcher is what current libadwaita asks for.
|
||||
The bar is revealed unconditionally because this window is small enough that it always is narrow.
|
||||
|
||||
The rows are not here, deliberately. A source row and a waveform row are *data* — `source_dialog.cpp`
|
||||
builds them from the known hosts and the recent files, and rebuilds them whenever either changes — so
|
||||
this file holds the frame and the fixed buttons, and nothing here carries a value.
|
||||
-->
|
||||
<interface>
|
||||
<object class="AdwWindow" id="chooser_window">
|
||||
<property name="title" translatable="yes">udpscope — choose a source</property>
|
||||
<property name="default-width">420</property>
|
||||
<property name="default-height">360</property>
|
||||
<child>
|
||||
<object class="AdwToolbarView">
|
||||
<child type="top">
|
||||
<object class="AdwHeaderBar">
|
||||
<child type="start">
|
||||
<object class="GtkButton" id="prefs_button">
|
||||
<property name="label" translatable="yes">_Preferences…</property>
|
||||
<property name="use-underline">1</property>
|
||||
<property name="tooltip-text" translatable="yes">the event cache, relative time and the interface's theme — the same dialog as the main window's menu, and the only place relative time can still change this run</property>
|
||||
</object>
|
||||
</child>
|
||||
<child type="end">
|
||||
<object class="GtkButton" id="cancel_button">
|
||||
<property name="label" translatable="yes">_Cancel</property>
|
||||
<property name="use-underline">1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child type="end">
|
||||
<object class="GtkButton" id="new_host_button">
|
||||
<property name="label" translatable="yes">_New host…</property>
|
||||
<property name="use-underline">1</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<property name="content">
|
||||
<object class="AdwViewStack" id="page_stack">
|
||||
<child>
|
||||
<object class="AdwViewStackPage">
|
||||
<property name="name">sources</property>
|
||||
<property name="title" translatable="yes">Sources</property>
|
||||
<property name="icon-name">network-transmit-receive-symbolic</property>
|
||||
<property name="child">
|
||||
<object class="GtkScrolledWindow">
|
||||
<property name="hscrollbar-policy">never</property>
|
||||
<property name="child">
|
||||
<object class="GtkListBox" id="sources_list">
|
||||
<property name="activate-on-single-click">1</property>
|
||||
</object>
|
||||
</property>
|
||||
</object>
|
||||
</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="AdwViewStackPage">
|
||||
<property name="name">waveforms</property>
|
||||
<property name="title" translatable="yes">Waveforms</property>
|
||||
<property name="icon-name">document-open-recent-symbolic</property>
|
||||
<property name="child">
|
||||
<object class="GtkBox">
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow">
|
||||
<property name="vexpand">1</property>
|
||||
<property name="hscrollbar-policy">never</property>
|
||||
<property name="child">
|
||||
<object class="GtkListBox" id="waves_list">
|
||||
<property name="activate-on-single-click">1</property>
|
||||
</object>
|
||||
</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="orientation">horizontal</property>
|
||||
<property name="spacing">6</property>
|
||||
<property name="halign">end</property>
|
||||
<property name="margin-top">6</property>
|
||||
<property name="margin-bottom">6</property>
|
||||
<property name="margin-end">12</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="waves_open">
|
||||
<property name="label" translatable="yes">_Open…</property>
|
||||
<property name="use-underline">1</property>
|
||||
<property name="tooltip-text" translatable="yes">choose an exported .npy to view and analyse</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</property>
|
||||
<child type="bottom">
|
||||
<object class="AdwViewSwitcherBar" id="page_switcher">
|
||||
<property name="reveal">1</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
||||
Reference in new issue
Block a user