ui: per-signal slide-over pages; the drop's assignment and the colour reset as shared functions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
0dd235e41c
commit
baf4a1f20f
8 files changed
+529
-48
No files matched your search
@@ -44,6 +44,7 @@
|
||||
#include <array>
|
||||
#include <cmath>
|
||||
#include <cstdint>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <string>
|
||||
@@ -885,6 +886,8 @@ struct App {
|
||||
guint layout_save_source = 0;
|
||||
bool layout_loaded = false;
|
||||
unsigned signal_generation = ~0u;
|
||||
/// Signal name -> the content box of its `signal:<name>` slide-over page (src/ui_signal_page.cpp).
|
||||
std::map<std::string, GtkWidget*> signal_pages;
|
||||
bool updating_panels = false; ///< guards signal handlers during a rebuild
|
||||
bool relayout_pending = false;
|
||||
/// True once the renderer's `Style` has been stated (see `tick()`): the renderer does not
|
||||
@@ -1669,6 +1672,24 @@ std::string signal_chip_markup(App& app, const std::vector<SignalInfo>& signals,
|
||||
void on_signal_color_chosen(GObject* source, GAsyncResult* res, gpointer user);
|
||||
void open_signal_color(App& app, std::size_t signal);
|
||||
void rebuild_signal_list(App& app, const std::vector<SignalInfo>& signals);
|
||||
/// Every plottable signal once (the time base skipped, a group's layers folded to the first), in model order.
|
||||
/// The one rule the list and the badges share.
|
||||
std::vector<std::size_t> listed_signals(const std::vector<SignalInfo>& signals);
|
||||
/// Puts `signal` (an index into `signals()`) on plot `row` in the first free slot, switching it on first if
|
||||
/// need be. Says why not through `set_notice` and returns false when it cannot. The one path a drop and a
|
||||
/// signal page's "Plot on" button share.
|
||||
bool assign_signal_to_row(App& app, std::size_t signal, int row);
|
||||
/// Back to the palette colour for the signal's position.
|
||||
void reset_signal_color(App& app, std::size_t signal);
|
||||
/// Holds `widget` alive across the current emission: a handler that rebuilds the list or a page destroys the
|
||||
/// widget it was emitted from.
|
||||
void outlive_the_rebuild(GtkWidget* widget);
|
||||
/// Creates the page `signal:<name>` if it is missing, fills it, and returns whether it exists afterwards.
|
||||
bool signal_page_ensure(App& app, const std::string& name);
|
||||
/// Called at the end of `rebuild_signal_panels`: refills every existing signal page, drops the pages of
|
||||
/// signals the model no longer has (closing the slide-over first if one of them is open).
|
||||
void signal_pages_sync(App& app);
|
||||
gboolean signal_page_probe(gpointer user); // UDPSCOPE_PROBE_SIGNAL_PAGES_MS
|
||||
/// The `MATH` divider row in the one channel list, and the `+` it carries.
|
||||
GtkWidget* make_math_divider(App& app, bool with_add);
|
||||
void on_math_add_clicked(GtkButton* button, gpointer user);
|
||||
@@ -1915,6 +1936,8 @@ gboolean dock_session_probe(gpointer user); // UDPSCOPE_PROBE_DOCK_SESSION_MS
|
||||
void build_slideover(App& app); // once, after the plot_overlay exists
|
||||
bool slideover_add_page(App& app, const std::string& id, const std::string& title, GtkWidget* content);
|
||||
bool slideover_has_page(const App& app, const std::string& id);
|
||||
/// The inverse of `slideover_add_page`: false when the id is unknown or is the open page.
|
||||
bool slideover_remove_page(App& app, const std::string& id);
|
||||
bool slideover_open(App& app, const std::string& id); // false when the id is unknown
|
||||
void slideover_close(App& app);
|
||||
bool slideover_toggle(App& app, const std::string& id); // open if closed or on another page, else close
|
||||
|
||||
Reference in new issue
Block a user