ui: the signals panel's frame is a .ui file
src/ui/signals-panel.ui holds the panel's shape: the box and its margins, the heading, the hint that says what a signal is for, and the list. The rows stay in code -- one per signal, carrying that signal's switch, colour, calibration and drop targets, rebuilt whenever the stream's signals change -- so the file holds the frame, which is the shape the plan gives this slice. The list's width-only size request moved with it, comment and all: a height floor there made the list occupy 120 px whatever it held, which hid the compact rows' height behind it. Read back by a new dump line, `signals panel: labels=2 list=1`, where a lost id reads as `labels=1` or `list=0` instead of a panel quietly missing its hint; `panels: … row_h=26` still reads the list's geometry and the height a row takes. check_ui is at 10 ok.
This commit is contained in:
1 parent
1ccc70c5ac
commit
c37fbdde21
6 files changed
+88
-22
No files matched your search
+12
-22
@@ -382,28 +382,18 @@ void rebuild_signal_panels(App& app) {
|
||||
}
|
||||
|
||||
GtkWidget* build_signal_panel(App& app) {
|
||||
GtkWidget* box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6);
|
||||
gtk_widget_set_margin_top(box, 8);
|
||||
gtk_widget_set_margin_bottom(box, 8);
|
||||
gtk_widget_set_margin_start(box, 8);
|
||||
gtk_widget_set_margin_end(box, 8);
|
||||
|
||||
GtkWidget* heading = gtk_label_new("Signals");
|
||||
gtk_widget_set_halign(heading, GTK_ALIGN_START);
|
||||
gtk_box_append(GTK_BOX(box), heading);
|
||||
|
||||
GtkWidget* hint = gtk_label_new("drag a signal onto a plot");
|
||||
gtk_widget_set_halign(hint, GTK_ALIGN_START);
|
||||
gtk_widget_add_css_class(hint, "dim-label");
|
||||
gtk_box_append(GTK_BOX(box), hint);
|
||||
|
||||
app.signal_list = gtk_list_box_new();
|
||||
gtk_list_box_set_selection_mode(GTK_LIST_BOX(app.signal_list), GTK_SELECTION_NONE);
|
||||
// Width only. A height floor here made the list occupy 120 px whatever it held,
|
||||
// which hid the compact rows' height behind it and wasted the space on an empty
|
||||
// stream; the scroller above it already caps how tall it can grow.
|
||||
gtk_widget_set_size_request(app.signal_list, 260, -1);
|
||||
gtk_box_append(GTK_BOX(box), app.signal_list);
|
||||
// The panel's frame -- the heading, the hint under it, and the list -- is a UI file. The rows are not:
|
||||
// there is one per signal, carrying that signal's switch, colour, calibration and drop targets, and the
|
||||
// whole list is rebuilt whenever the stream's signals change. `make test-ui` checks the file's types
|
||||
// against the GIR; the id below is what keeps the code and the file agreeing on the name.
|
||||
GtkBuilder* ui = ui_load(app, "/org/udpscope/ui/signals-panel.ui");
|
||||
GtkWidget* box = GTK_WIDGET(gtk_builder_get_object(ui, "signal_panel"));
|
||||
app.signal_list = GTK_WIDGET(gtk_builder_get_object(ui, "signal_list"));
|
||||
if (box == nullptr || app.signal_list == nullptr) {
|
||||
// A missing id is a mistake in the `.ui`: the panel comes up empty rather than taking the window with
|
||||
// it, and `[udpscope] signals panel:` reads the difference.
|
||||
return box != nullptr ? box : gtk_box_new(GTK_ORIENTATION_VERTICAL, 6);
|
||||
}
|
||||
return box;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user