The hand-rolled grid existed to avoid GTK's deprecated GtkShortcutsWindow; libadwaita 1.8's AdwShortcutsDialog is the supported replacement, so use the platform widget and get its search, sectioning and shortcut labels for free. The table strings become GTK accelerator syntax, since the shortcut label parses them. The six mouse rows cannot: no accelerator syntax names a wheel or a drag, so they carry an empty accelerator and prose in the new subtitle field. adw_init() is called in run_ui() and in choose_source() (replacing its gtk_init()), which means the whole app is drawn with libadwaita's stylesheet. Verified settled: viewport.w 870..870, axes.w changes 2, x-desync 0. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
54 lines
1.7 KiB
C++
54 lines
1.7 KiB
C++
// SPDX-License-Identifier: MIT
|
|
#pragma once
|
|
|
|
namespace udpscope {
|
|
|
|
/// Everything a key can ask the application to do. The plot's own actions (zoom, pan, fit)
|
|
/// are not here: they belong to the plotter's input controller, which handles its own keys.
|
|
enum class AppAction {
|
|
PauseToggle,
|
|
TriggerArm,
|
|
TriggerPanel,
|
|
CursorsPane,
|
|
MeasuresPane,
|
|
MathPane,
|
|
LayoutEditor,
|
|
SidePanel,
|
|
Export,
|
|
Help,
|
|
Shortcuts,
|
|
Quit,
|
|
};
|
|
|
|
/// One application accelerator: what to press, what it does, and where the overview lists it.
|
|
struct Accel {
|
|
unsigned keyval; ///< GDK keyval
|
|
unsigned mods; ///< GdkModifierType mask, 0 for a bare key
|
|
AppAction action;
|
|
const char* accel; ///< GTK accelerator syntax, as `gtk_accelerator_parse()` reads it
|
|
const char* description;
|
|
const char* section;
|
|
};
|
|
|
|
/// One documented plot interaction. These have no AppAction: the plotter's own controller
|
|
/// implements them, and this table exists so the overview can list them.
|
|
struct Gesture {
|
|
const char* accel; ///< GTK accelerator syntax, or "" for a pointer gesture
|
|
const char* subtitle; ///< prose for what no accelerator can express ("Wheel"), else ""
|
|
const char* description;
|
|
const char* section;
|
|
};
|
|
|
|
/// The application accelerator table. Writes the row count to `count`.
|
|
const Accel* app_accels(int* count);
|
|
|
|
/// The plot keyboard and mouse table. Writes the row count to `count`.
|
|
const Gesture* plot_gestures(int* count);
|
|
|
|
/// The accelerator for `keyval` with `mods`, or nullptr. `mods` is masked to
|
|
/// Ctrl/Shift/Alt before comparing, because Lock, Num-Lock and the pointer buttons
|
|
/// arrive in the same mask and would otherwise never match a table row.
|
|
const Accel* find_accel(unsigned keyval, unsigned mods);
|
|
|
|
} // namespace udpscope
|