Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
app_framework.hpp
Go to the documentation of this file.
1#pragma once
2
6
8#include <functional>
9#include <string>
10#include <vector>
11#include <unordered_map>
12#include <filesystem>
13#include <optional>
14
15namespace pulp::view {
16
17// ── Command System ───────────────────────────────────────────────────────
18
20using CommandID = uint32_t;
21
25 uint16_t modifiers = 0;
26
27 bool matches(const KeyEvent& event) const {
28 return event.key == key && event.modifiers == modifiers && event.is_down;
29 }
30
32 static KeyShortcut from_string(const std::string& s);
33
35 std::string to_string() const;
36};
37
39struct Command {
40 CommandID id = 0;
41 std::string name;
42 std::string category;
44 std::function<void()> action;
45 std::function<bool()> is_enabled;
46 bool is_separator = false;
47};
48
49// ── KeyMapping ───────────────────────────────────────────────────────────
50
64public:
67
70 bool handle_key(const KeyEvent& event);
71
73 const std::vector<Command>& commands() const { return commands_; }
74
76 std::vector<const Command*> commands_in_category(const std::string& category) const;
77
79 void rebind(CommandID id, KeyShortcut shortcut);
80
82 bool save_bindings(const std::filesystem::path& path) const;
83
85 bool load_bindings(const std::filesystem::path& path);
86
87private:
88 std::vector<Command> commands_;
89};
90
91// ── MenuBar ──────────────────────────────────────────────────────────────
92
111class MenuBar {
112public:
113 struct MenuItem {
114 std::string title;
115 std::function<void()> action;
117 bool enabled = true;
118 bool is_separator = false;
119 std::vector<MenuItem> submenu;
120 };
121
122 struct Menu {
123 std::string title;
124 std::vector<MenuItem> items;
125 };
126
128 void add_menu(std::string title, std::vector<MenuItem> items);
129
131 void set_key_mapping(const KeyMapping& keys);
132
134 const std::vector<Menu>& menus() const { return menus_; }
135
136private:
137 std::vector<Menu> menus_;
138};
139
140// ── NativeToolbar ────────────────────────────────────────────────────────
141
149public:
150 struct Item {
151 std::string id;
152 std::string label;
153 std::string icon_name;
154 std::function<void()> action;
155 bool is_separator = false;
156 };
157
158 void add_item(Item item);
160
161 const std::vector<Item>& items() const { return items_; }
162
163private:
164 std::vector<Item> items_;
165};
166
167// ── AppSettings ──────────────────────────────────────────────────────────
168
176public:
177 explicit AppSettings(const std::string& app_name);
178
180 std::optional<std::string> get_string(const std::string& key) const;
182 std::optional<int> get_int(const std::string& key) const;
184 std::optional<float> get_float(const std::string& key) const;
186 std::optional<bool> get_bool(const std::string& key) const;
187
189 void set_string(const std::string& key, const std::string& value);
190 void set_int(const std::string& key, int value);
191 void set_float(const std::string& key, float value);
192 void set_bool(const std::string& key, bool value);
193
195 bool save();
197 bool load();
198
200 void save_window_state(int x, int y, int width, int height);
201 struct WindowState { int x, y, width, height; };
202 std::optional<WindowState> load_window_state() const;
203
205 std::filesystem::path settings_path() const { return settings_path_; }
206
207private:
208 std::filesystem::path settings_path_;
209 std::unordered_map<std::string, std::string> values_;
210};
211
212} // namespace pulp::view
bool save()
Persist to disk.
void set_string(const std::string &key, const std::string &value)
Set values (not persisted until save() is called).
std::filesystem::path settings_path() const
Settings file path.
Definition app_framework.hpp:205
void set_float(const std::string &key, float value)
void save_window_state(int x, int y, int width, int height)
Convenience: save/restore window geometry.
std::optional< int > get_int(const std::string &key) const
Get an int setting.
std::optional< float > get_float(const std::string &key) const
Get a float setting.
bool load()
Load from disk.
void set_int(const std::string &key, int value)
std::optional< bool > get_bool(const std::string &key) const
Get a bool setting.
std::optional< std::string > get_string(const std::string &key) const
Get a string setting.
std::optional< WindowState > load_window_state() const
AppSettings(const std::string &app_name)
void set_bool(const std::string &key, bool value)
Manages keyboard shortcuts with configurable bindings.
Definition app_framework.hpp:63
void rebind(CommandID id, KeyShortcut shortcut)
Rebind a command's shortcut.
bool load_bindings(const std::filesystem::path &path)
Load keybindings from a JSON file (overrides defaults).
const std::vector< Command > & commands() const
Get all registered commands.
Definition app_framework.hpp:73
void remove_command(CommandID id)
bool save_bindings(const std::filesystem::path &path) const
Save keybindings to a JSON file.
void add_command(Command cmd)
std::vector< const Command * > commands_in_category(const std::string &category) const
Get commands in a specific category.
bool handle_key(const KeyEvent &event)
Try to handle a key event by matching against registered shortcuts.
Cross-platform menu bar descriptor.
Definition app_framework.hpp:111
const std::vector< Menu > & menus() const
Get all menus for custom rendering (Linux, embedded).
Definition app_framework.hpp:134
void add_menu(std::string title, std::vector< MenuItem > items)
Add a menu with items.
void set_key_mapping(const KeyMapping &keys)
Build menus automatically from a KeyMapping's command categories.
Native-toolbar descriptor — a lightweight config struct for host-level toolbars.
Definition app_framework.hpp:148
void add_item(Item item)
const std::vector< Item > & items() const
Definition app_framework.hpp:161
Input event types with modifier keys and pointer IDs.
Hover-cursor tracking for platform window hosts.
Definition fwd.hpp:27
@ path
Definition anchor_strategy.hpp:42
uint32_t CommandID
A unique command identifier.
Definition app_framework.hpp:20
@ value
the widget's primary value (Knob, Fader, RangeSlider, Toggle, ProgressBar)
Definition binding_diagnostics.hpp:19
KeyCode
Definition input_events.hpp:35
@ s
Definition input_events.hpp:41
@ y
Definition input_events.hpp:42
@ x
Definition input_events.hpp:41
@ unknown
Definition input_events.hpp:36
@ height
Definition css_animation.hpp:128
@ width
Definition css_animation.hpp:127
Definition app_framework.hpp:201
int height
Definition app_framework.hpp:201
int x
Definition app_framework.hpp:201
int width
Definition app_framework.hpp:201
int y
Definition app_framework.hpp:201
A named command with optional shortcut and callback.
Definition app_framework.hpp:39
bool is_separator
True for menu separator items.
Definition app_framework.hpp:46
std::function< bool()> is_enabled
Returns false to grey out.
Definition app_framework.hpp:45
std::string category
Menu category ("File", "Edit", etc.).
Definition app_framework.hpp:42
std::string name
Definition app_framework.hpp:41
std::function< void()> action
Definition app_framework.hpp:44
KeyShortcut shortcut
Definition app_framework.hpp:43
Rich key event with key code, modifiers, and repeat state.
Definition input_events.hpp:193
A keyboard shortcut (key + modifiers).
Definition app_framework.hpp:23
bool matches(const KeyEvent &event) const
Definition app_framework.hpp:27
KeyCode key
Definition app_framework.hpp:24
static KeyShortcut from_string(const std::string &s)
Create from string like "Cmd+S", "Ctrl+Shift+Z", "F5".
uint16_t modifiers
Definition app_framework.hpp:25
std::string to_string() const
Convert to display string.
Definition app_framework.hpp:113
std::vector< MenuItem > submenu
Non-empty for submenu items.
Definition app_framework.hpp:119
bool is_separator
Definition app_framework.hpp:118
bool enabled
Definition app_framework.hpp:117
std::string title
Definition app_framework.hpp:114
std::function< void()> action
Definition app_framework.hpp:115
KeyShortcut shortcut
Definition app_framework.hpp:116
Definition app_framework.hpp:122
std::string title
Definition app_framework.hpp:123
std::vector< MenuItem > items
Definition app_framework.hpp:124
Definition app_framework.hpp:150
std::string label
Definition app_framework.hpp:152
bool is_separator
Definition app_framework.hpp:155
std::function< void()> action
Definition app_framework.hpp:154
std::string id
Definition app_framework.hpp:151
std::string icon_name
SF Symbol name (macOS) or icon path.
Definition app_framework.hpp:153