ui: a slide-over panel over the plot's right edge, with its probe
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
73f74ca495
commit
a40863fa45
7 files changed
+334
-9
No files matched your search
@@ -117,6 +117,19 @@ struct SourcePanelPage {
|
||||
GtkWidget* content = nullptr;
|
||||
};
|
||||
|
||||
/// The slide-over panel's widgets and state (src/ui_slideover.cpp). `page` is the open page's id, empty when closed.
|
||||
struct SlideOver {
|
||||
GtkWidget* overlay = nullptr; ///< the GtkOverlay around the plot (main-window.ui `plot_overlay`)
|
||||
GtkWidget* revealer = nullptr; ///< the one overlay child; halign END, valign FILL, 360 px
|
||||
GtkWidget* title = nullptr; ///< GtkLabel in the panel header
|
||||
GtkWidget* stack = nullptr; ///< GtkStack: one scroller per page
|
||||
GtkWidget* source_switch = nullptr; ///< AdwToggleGroup, shown on a source page when there are >= 2
|
||||
std::vector<std::string> source_pages;
|
||||
std::string page;
|
||||
bool syncing = false; ///< true while we write the toggle group ourselves
|
||||
};
|
||||
constexpr int kSlideOverWidth = 360;
|
||||
|
||||
struct App {
|
||||
ScopeModel* model = nullptr;
|
||||
Acquisition* acq = nullptr;
|
||||
@@ -124,6 +137,9 @@ struct App {
|
||||
|
||||
GtkWidget* window = nullptr;
|
||||
GtkWidget* plot_box = nullptr;
|
||||
/// The `GtkOverlay` around `plot_box` (`main-window.ui`), which the slide-over panel is a child of.
|
||||
GtkWidget* plot_overlay = nullptr;
|
||||
SlideOver slideover;
|
||||
/// The one GL area, drawing the `RowSet`'s figure: every row is a row of that
|
||||
/// figure, so there is one widget, one context and one `::render` whatever the row
|
||||
/// count is.
|
||||
@@ -1872,6 +1888,19 @@ gboolean stats_probe_report(gpointer user);
|
||||
gboolean stats_probe(gpointer user);
|
||||
gboolean side_tab_probe_report(gpointer user);
|
||||
gboolean side_tab_probe(gpointer user);
|
||||
/// The slide-over panel (`src/ui_slideover.cpp`): one panel at a time over the plot's right edge, a page
|
||||
/// per setup surface, each page in a scroller of its own.
|
||||
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);
|
||||
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
|
||||
const std::string& slideover_page(const App& app); // "" when closed
|
||||
bool slideover_escape(App& app); // closes if open; true when it did
|
||||
/// x, y in the overlay's coordinates; closes unless the point is inside the panel; true when it closed.
|
||||
bool slideover_click_away(App& app, double x, double y);
|
||||
gboolean slideover_probe(gpointer user); // UDPSCOPE_PROBE_SLIDEOVER_MS
|
||||
gboolean source_kinds_probe_report(gpointer user);
|
||||
gboolean source_kinds_probe(gpointer user);
|
||||
/// MCC E-1608 end to end against `tools/mock_e1608.py`: the stream, the calibration, the panels and
|
||||
|
||||
Reference in new issue
Block a user