Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
toolbar.hpp
Go to the documentation of this file.
1#pragma once
2
3// Toolbar — horizontal or vertical bar of configurable items.
4// Items can be buttons, toggles, separators, or custom views.
5
6#include <pulp/view/view.hpp>
7#include <string>
8#include <vector>
9#include <memory>
10#include <functional>
11
12namespace pulp::view {
13
15enum class ToolbarItemType {
16 Button, // Clickable button with icon/text
17 Toggle, // On/off toggle
18 Separator, // Visual separator
19 Spacer, // Flexible space
20 Custom // Custom view
21};
22
25 std::string id;
26 std::string label;
27 std::string tooltip;
29 bool enabled = true;
30 bool toggled = false;
31 std::function<void()> on_click;
32 std::function<void(bool)> on_toggle;
33 std::unique_ptr<View> custom_view;
34};
35
37class Toolbar : public View {
38public:
40
41 Toolbar() = default;
42
44 void add_button(std::string id, std::string label, std::function<void()> on_click);
45
47 void add_toggle(std::string id, std::string label, std::function<void(bool)> on_toggle);
48
51
53 void add_spacer();
54
59 void add_custom(std::string id, std::unique_ptr<View> view);
60
62 void remove_item(std::string_view id);
63
65 void set_orientation(Orientation o) { orientation_ = o; }
66 Orientation orientation() const { return orientation_; }
67
69 void set_spacing(float s) { spacing_ = s; }
70
72 void set_item_size(float s) { item_size_ = s; }
73
75 bool is_toggled(std::string_view id) const;
76 void set_toggled(std::string_view id, bool state);
77
79 void set_enabled(std::string_view id, bool enabled);
80
81 int item_count() const { return static_cast<int>(items_.size()); }
82
83 void paint(canvas::Canvas& canvas) override;
84 void on_mouse_down(Point pos) override;
85 bool wants_mouse_input() const override { return true; }
86
87 float intrinsic_height() const override {
88 return orientation_ == Orientation::horizontal ? item_size_ + 8.0f : 0;
89 }
90
91private:
92 std::vector<ToolbarItem> items_;
94 float spacing_ = 4.0f;
95 float item_size_ = 28.0f;
96
97 int hit_test_item(Point pos) const;
98 float custom_item_width(const ToolbarItem& item) const;
99};
100
101} // namespace pulp::view
Definition canvas.hpp:240
Definition widgets.hpp:2036
float intrinsic_height() const override
Definition toolbar.hpp:87
Orientation orientation() const
Definition toolbar.hpp:66
void add_button(std::string id, std::string label, std::function< void()> on_click)
Add a button item.
bool wants_mouse_input() const override
True if this widget handles mouse down/drag through virtual methods even when it does not expose JS p...
Definition toolbar.hpp:85
void add_separator()
Add a separator.
void set_enabled(std::string_view id, bool enabled)
Enable/disable an item by ID.
Orientation
Definition toolbar.hpp:39
@ horizontal
Definition toolbar.hpp:39
@ vertical
Definition toolbar.hpp:39
void set_spacing(float s)
Item spacing.
Definition toolbar.hpp:69
void remove_item(std::string_view id)
Remove an item by ID.
void set_toggled(std::string_view id, bool state)
void add_toggle(std::string id, std::string label, std::function< void(bool)> on_toggle)
Add a toggle item.
int item_count() const
Definition toolbar.hpp:81
void set_item_size(float s)
Item size (buttons).
Definition toolbar.hpp:72
void add_custom(std::string id, std::unique_ptr< View > view)
Add a custom view.
void set_orientation(Orientation o)
Set orientation.
Definition toolbar.hpp:65
void paint(canvas::Canvas &canvas) override
bool is_toggled(std::string_view id) const
Get/set toggle state by ID.
void on_mouse_down(Point pos) override
void add_spacer()
Add flexible spacer.
std::function< void()> on_click
Generic click callback (fires on mouse-down, if set).
Definition view.hpp:1476
@ label
Definition view.hpp:989
bool enabled() const
CSS :disabled equivalent — blocks input, reduces opacity.
Definition view.hpp:715
Definition affine_transform.hpp:24
SequencerStateChannel is the audio-safe transport for a plugin's structured NON-parameter state: the ...
Definition audio_device_manager.hpp:48
Hover-cursor tracking for platform window hosts.
Definition fwd.hpp:27
@ Button
Definition text_accessibility.hpp:30
@ s
Definition input_events.hpp:41
@ o
Definition input_events.hpp:40
ToolbarItemType
Toolbar item types.
Definition toolbar.hpp:15
@ Separator
Definition toolbar.hpp:18
@ Spacer
Definition toolbar.hpp:19
@ Button
Definition toolbar.hpp:16
@ Custom
Definition toolbar.hpp:20
Definition geometry.hpp:20
Single toolbar item.
Definition toolbar.hpp:24
std::unique_ptr< View > custom_view
Definition toolbar.hpp:33
std::string tooltip
Definition toolbar.hpp:27
std::string label
Definition toolbar.hpp:26
std::string id
Definition toolbar.hpp:25
std::function< void()> on_click
Definition toolbar.hpp:31
std::function< void(bool)> on_toggle
Definition toolbar.hpp:32
bool toggled
Definition toolbar.hpp:30
bool enabled
Definition toolbar.hpp:29
ToolbarItemType type
Definition toolbar.hpp:28