ui: a badge bar with a Trigger badge, and the trigger form in the slide-over
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
a40863fa45
commit
5fb479bd69
9 files changed
+215
-7
No files matched your search
+14
-4
@@ -3380,6 +3380,7 @@ gboolean tick(gpointer user) {
|
||||
if (app->window == nullptr) return G_SOURCE_REMOVE;
|
||||
note_panel_controls(*app);
|
||||
sync_source_panels(*app);
|
||||
sync_badge_bar(*app);
|
||||
// The tour, re-measured every frame: the target's allocation is 0 on the frame it is first shown
|
||||
// (see the allocation bullets in `docs/claude/invariants-trigger-and-pinning.md`) and the widget
|
||||
// moves under the spotlight on a window resize, so a one-shot measurement is wrong both ways.
|
||||
@@ -5021,13 +5022,17 @@ void on_activate(GtkApplication* application, gpointer user) {
|
||||
GtkWidget* side_switcher = GTK_WIDGET(gtk_builder_get_object(app->window_ui, "side_switcher"));
|
||||
GtkWidget* measure_page = GTK_WIDGET(gtk_builder_get_object(app->window_ui, "measure_page"));
|
||||
GtkWidget* signals_page = GTK_WIDGET(gtk_builder_get_object(app->window_ui, "signals_page"));
|
||||
app->badge_bar = GTK_WIDGET(gtk_builder_get_object(app->window_ui, "badge_bar"));
|
||||
app->badge_signals = GTK_WIDGET(gtk_builder_get_object(app->window_ui, "badge_signals"));
|
||||
app->badge_system = GTK_WIDGET(gtk_builder_get_object(app->window_ui, "badge_system"));
|
||||
// A missing id is the one mistake neither the build nor `GtkBuilder` sees, and every use below would
|
||||
// be a null pointer.
|
||||
if (app->window == nullptr || side_view == nullptr || events_divider == nullptr ||
|
||||
app->plot_box == nullptr || app->plot_overlay == nullptr || app->plot_split == nullptr ||
|
||||
app->status_badge == nullptr ||
|
||||
app->status_label == nullptr || app->status_info_button == nullptr ||
|
||||
app->status_row == nullptr ||
|
||||
app->status_row == nullptr || app->badge_bar == nullptr || app->badge_signals == nullptr ||
|
||||
app->badge_system == nullptr ||
|
||||
side == nullptr || side_stack == nullptr || side_switcher == nullptr ||
|
||||
measure_page == nullptr || signals_page == nullptr) {
|
||||
return;
|
||||
@@ -5067,6 +5072,8 @@ void on_activate(GtkApplication* application, gpointer user) {
|
||||
}
|
||||
// The slide-over panel: an overlay child of the plot, above the GL area.
|
||||
build_slideover(*app);
|
||||
// The badge bar reads `trigger_toggle`, which `build_toolbar()` made above.
|
||||
build_badge_bar(*app);
|
||||
|
||||
// The size the window opens at, stated in code as well as in the `.ui`: `default-width` there is the
|
||||
// size it *asks* for, and a window whose content has a larger minimum opens at that minimum instead --
|
||||
@@ -5188,10 +5195,10 @@ void on_activate(GtkApplication* application, gpointer user) {
|
||||
gtk_box_append(GTK_BOX(measure_page), gtk_separator_new(GTK_ORIENTATION_HORIZONTAL));
|
||||
gtk_box_append(GTK_BOX(measure_page), build_measures_panel(*app));
|
||||
|
||||
// Signals: the trigger picks a channel from the list beside it.
|
||||
// The trigger form lives in the slide-over (reached by the Trigger badge); the signal list stays in the
|
||||
// sidebar until the dock replaces it.
|
||||
app->trigger_panel = build_trigger_panel(*app);
|
||||
gtk_box_append(GTK_BOX(signals_page), app->trigger_panel);
|
||||
gtk_box_append(GTK_BOX(signals_page), gtk_separator_new(GTK_ORIENTATION_HORIZONTAL));
|
||||
slideover_add_page(*app, "trigger", "Trigger", app->trigger_panel);
|
||||
app->signal_panel = build_signal_panel(*app);
|
||||
gtk_box_append(GTK_BOX(signals_page), app->signal_panel);
|
||||
|
||||
@@ -5912,6 +5919,9 @@ int run_ui(int argc, char** argv, const Config& cfg, ScopeModel& model, Acquisit
|
||||
if (const char* env = g_getenv("UDPSCOPE_PROBE_SLIDEOVER_MS")) {
|
||||
g_timeout_add(static_cast<guint>(std::atoi(env)), slideover_probe, &app);
|
||||
}
|
||||
if (const char* env = g_getenv("UDPSCOPE_PROBE_BADGES_MS")) {
|
||||
g_timeout_add(static_cast<guint>(std::atoi(env)), badges_probe, &app);
|
||||
}
|
||||
if (const char* env = g_getenv("UDPSCOPE_PROBE_SEARCH_MS")) {
|
||||
g_timeout_add(static_cast<guint>(std::atoi(env)), search_probe, &app);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user