Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
accessibility.hpp
Go to the documentation of this file.
1#pragma once
2
3// Accessibility interfaces for platform screen reader integration.
4// Provides ValueInterface, TextInterface, TableInterface, CellInterface
5// that can be attached to Views for accessibility provider implementation.
6
7#include <string>
8#include <string_view>
9#include <functional>
10#include <optional>
11#include <vector>
12
13namespace pulp::view {
14
17public:
18 // Out-of-line in src/accessibility.cpp so the vtable + typeinfo
19 // anchors there — required for dynamic_cast on Android NDK builds
20 // that link with -Wl,--no-undefined.
22
24 virtual double get_current_value() const = 0;
25
27 virtual void set_current_value(double value) = 0;
28
30 virtual double get_minimum_value() const = 0;
31
33 virtual double get_maximum_value() const = 0;
34
36 virtual double get_step_size() const { return (get_maximum_value() - get_minimum_value()) / 100.0; }
37
39 virtual std::string get_value_string() const;
40};
41
44public:
46
48 virtual std::string get_text() const = 0;
49
51 virtual void set_text(std::string_view text) = 0;
52
54 virtual std::pair<int, int> get_selection() const { return {0, 0}; }
55
57 virtual void set_selection(int start, int end) { (void)start; (void)end; }
58
60 virtual bool is_editable() const { return false; }
61
63 virtual int get_character_count() const {
64 return static_cast<int>(get_text().size());
65 }
66
68 virtual std::string get_text_range(int start, int end) const {
69 auto text = get_text();
70 if (start < 0) start = 0;
71 if (end > static_cast<int>(text.size())) end = static_cast<int>(text.size());
72 if (start >= end) return "";
73 return text.substr(static_cast<size_t>(start), static_cast<size_t>(end - start));
74 }
75};
76
79public:
81
83 virtual int get_row_count() const = 0;
84
86 virtual int get_column_count() const = 0;
87
89 virtual std::string get_column_header(int column) const = 0;
90
92 virtual int get_selected_row() const { return -1; }
93
95 virtual void select_row(int row) { (void)row; }
96
98 virtual bool supports_multi_selection() const { return false; }
99
101 virtual std::vector<int> get_selected_rows() const {
102 int row = get_selected_row();
103 return row >= 0 ? std::vector<int>{row} : std::vector<int>{};
104 }
105};
106
109public:
111
113 virtual std::string get_cell_text(int row, int column) const = 0;
114
116 virtual bool is_cell_editable(int row, int column) const { (void)row; (void)column; return false; }
117
119 virtual std::pair<int, int> get_cell_span(int row, int column) const {
120 (void)row; (void)column;
121 return {1, 1};
122 }
123};
124
125// ── Value resolution ────────────────────────────────────────────────────
126
127class View;
128
133
137
142
169
175
182 bool value = false;
186 bool text = false;
187};
189
194
199
219
220// ── Live-region announcements ───────────────────────────────────────────
221
229
240void announce_accessibility(std::string_view text,
242
247 std::function<void(std::string_view text, AnnouncementPriority)>;
249
250} // namespace pulp::view
Interface for individual table cells.
Definition accessibility.hpp:108
virtual bool is_cell_editable(int row, int column) const
Whether the cell is editable.
Definition accessibility.hpp:116
virtual std::pair< int, int > get_cell_span(int row, int column) const
Row and column span (for merged cells).
Definition accessibility.hpp:119
virtual std::string get_cell_text(int row, int column) const =0
Cell text content.
Interface for accessible tables and lists.
Definition accessibility.hpp:78
virtual void select_row(int row)
Select a row.
Definition accessibility.hpp:95
virtual int get_selected_row() const
Get the currently selected row (-1 if none).
Definition accessibility.hpp:92
virtual std::string get_column_header(int column) const =0
Get header text for a column.
virtual std::vector< int > get_selected_rows() const
Get all selected rows.
Definition accessibility.hpp:101
virtual int get_column_count() const =0
Number of columns.
virtual int get_row_count() const =0
Number of rows.
virtual bool supports_multi_selection() const
Whether multiple selection is supported.
Definition accessibility.hpp:98
Interface for accessible text content (text editors, labels).
Definition accessibility.hpp:43
virtual std::string get_text_range(int start, int end) const
Get text in a range.
Definition accessibility.hpp:68
virtual void set_selection(int start, int end)
Set selection range.
Definition accessibility.hpp:57
virtual int get_character_count() const
Number of characters.
Definition accessibility.hpp:63
virtual std::string get_text() const =0
Get the full text.
virtual void set_text(std::string_view text)=0
Set the text (if editable).
virtual bool is_editable() const
Whether the text is editable.
Definition accessibility.hpp:60
virtual std::pair< int, int > get_selection() const
Get selected text range.
Definition accessibility.hpp:54
Interface for accessible values (sliders, knobs, progress bars).
Definition accessibility.hpp:16
virtual double get_minimum_value() const =0
Minimum value.
virtual double get_current_value() const =0
Current value as a number.
virtual double get_maximum_value() const =0
Maximum value.
virtual std::string get_value_string() const
Value as a human-readable string (e.g., "50%" or "-6 dB").
virtual double get_step_size() const
Step increment for keyboard navigation.
Definition accessibility.hpp:36
virtual void set_current_value(double value)=0
Set the value (if editable).
Definition view.hpp:73
Hover-cursor tracking for platform window hosts.
Definition fwd.hpp:27
std::string accessibility_text_content(const View &v)
The string content a text interface exposes: AccessibilityTextInterface's content,...
AccessibilityInterfaceSet accessibility_interfaces(const View &v)
bool is_accessibility_element(const View &v)
The single gate EVERY accessibility bridge uses to decide whether a View enters the platform accessib...
@ text
Plain text (default color).
Definition code_editor_tokenizer.hpp:37
std::string accessibility_value_string(const View &v)
What assistive tech reads as the element's VALUE, resolved from the one source that is actually prese...
bool has_accessibility_value(const View &v)
True when the view has ANY value source at all (slots 1–4 above).
std::string accessibility_toggle_state_string(const View &v)
The state as the word a reader announces: "checked" / "unchecked" / "mixed" (aria-checked) or "presse...
void announce_accessibility(std::string_view text, AnnouncementPriority priority=AnnouncementPriority::Polite)
Request the installed accessibility announcement sink speak text.
@ value
the widget's primary value (Knob, Fader, RangeSlider, Toggle, ProgressBar)
Definition binding_diagnostics.hpp:19
@ v
Definition input_events.hpp:41
@ column
Definition design_ir.hpp:53
@ row
Definition design_ir.hpp:53
bool accessibility_text_editable(const View &v)
True when the text content is user-editable (an editable AccessibilityTextInterface).
@ end
Definition geometry.hpp:370
@ start
Definition geometry.hpp:370
AccessToggleState accessibility_toggle_state(const View &v)
The View's check/press state.
std::function< void(std::string_view text, AnnouncementPriority)> AnnouncementSink
Install a platform-specific announcement sink when a live-region backend is available.
Definition accessibility.hpp:246
AnnouncementPriority
Politeness level for a live-region announcement.
Definition accessibility.hpp:225
@ Assertive
Definition accessibility.hpp:227
@ Polite
Definition accessibility.hpp:226
void set_announcement_sink(AnnouncementSink sink)
AccessToggleState
Tri-state check/press state, resolved from the ARIA slots a View carries (aria-checked first,...
Definition accessibility.hpp:132
@ mixed
Definition accessibility.hpp:132
@ off
Definition accessibility.hpp:132
@ unset
Definition accessibility.hpp:132
@ on
Definition accessibility.hpp:132
The accessibility interfaces a View can actually serve.
Definition accessibility.hpp:180
bool text
String content: AccessibilityTextInterface (a TextEditor) OR the access_value slot (a ComboBox's sele...
Definition accessibility.hpp:186
bool value
Numeric range (min / max / current): AccessibilityValueInterface.
Definition accessibility.hpp:182