feat: two-tier status bar, one glance line with the detail behind an info popover
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
f9490061a1
commit
8242812338
4 files changed
+319
-76
No files matched your search
@@ -0,0 +1,65 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
#pragma once
|
||||
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
|
||||
namespace udpscope {
|
||||
|
||||
/// Everything either tier of the status bar shows, gathered once per frame by the tick so the
|
||||
/// two cannot disagree. No GTK here on purpose: this is the one part of the status bar that
|
||||
/// can be reasoned about as text.
|
||||
struct StatusSnapshot {
|
||||
/// One word from the fixed set: "live", "paused", "armed", "capturing", "event held",
|
||||
/// "disarmed". It is a word from a *fixed* set because the bar sits directly above the plot
|
||||
/// and a field whose width tracked the stream would relayout it every frame.
|
||||
const char* state_word = "live";
|
||||
/// The long prose the old single-line bar carried, kept for the detail string and the dump.
|
||||
std::string state_detail;
|
||||
|
||||
bool connected = false;
|
||||
bool have_config = false;
|
||||
bool trigger_on = false;
|
||||
|
||||
/// Already collapsed to one figure or a range by the caller, without the "rate " prefix.
|
||||
std::string rate_text;
|
||||
double stored_rate_hz = 0.0;
|
||||
double declared_rate_hz = 0.0;
|
||||
|
||||
/// Pre-formatted by ui.cpp's format_window(), which the window control and the Fit notices
|
||||
/// also use, so it stays there rather than moving here.
|
||||
std::string window_text;
|
||||
|
||||
std::uint64_t packets = 0;
|
||||
std::uint64_t frames = 0;
|
||||
std::uint64_t gaps = 0;
|
||||
std::size_t signals = 0;
|
||||
std::size_t channels = 0;
|
||||
int plot1_traces = 0;
|
||||
std::size_t plot1_samples = 0;
|
||||
double buffer_mb = 0.0;
|
||||
double span_s = 0.0;
|
||||
std::uint64_t time_stride = 1;
|
||||
bool have_event = false;
|
||||
double since_event_s = 0.0;
|
||||
int reconnects = 0;
|
||||
};
|
||||
|
||||
/// The bar: "live · 10.0 kS/s · 2 s window", plus " · event 4.2 s ago" in trigger mode and
|
||||
/// nothing else ever. The badge glyph is a separate widget and is not part of this string.
|
||||
std::string format_glance(const StatusSnapshot& s);
|
||||
|
||||
/// The popover's prose and the exit dump's line, field for field as the old single-line bar
|
||||
/// wrote it. CLAUDE.md asserts those fields are read out of the dump, so the field names and
|
||||
/// their order must not change without updating it.
|
||||
std::string format_detail(const StatusSnapshot& s);
|
||||
|
||||
/// A sample rate as "10.0 kS/s". Moved here from ui.cpp, which still calls it.
|
||||
std::string format_rate(double hz);
|
||||
|
||||
/// An elapsed time, stepping to a coarser unit rather than growing digits, so its width
|
||||
/// cannot track the stream. Moved here from ui.cpp.
|
||||
std::string format_elapsed(double seconds);
|
||||
|
||||
} // namespace udpscope
|
||||
Reference in new issue
Block a user