16namespace hi {
inline namespace v1 {
17class selection_widget;
25 using notifier_type = notifier<>;
26 using callback_token = notifier_type::callback_token;
27 using callback_proto = notifier_type::callback_proto;
54 subscribe(forward_of<callback_proto>
auto&& callback, callback_flags flags = callback_flags::synchronous)
noexcept
56 return _notifier.subscribe(
hi_forward(callback), flags);
60 notifier_type _notifier;
75 observer<value_type> value;
76 observer<options_type> options;
77 observer<value_type> off_value;
86 forward_of<observer<value_type>>
auto&& value,
87 forward_of<observer<options_type>>
auto&& options,
88 forward_of<observer<value_type>>
auto&& off_value) noexcept :
92 _value_cbt = this->value.subscribe([&](
auto...){ this->_notifier(); });
93 _options_cbt = this->options.subscribe([&](
auto...){ this->_notifier(); });
94 _off_value_cbt = this->off_value.subscribe([&](
auto...){ this->_notifier(); });
104 forward_of<observer<value_type>>
auto&& value,
105 forward_of<observer<options_type>>
auto&& options) noexcept :
110 void set_selected(
selection_widget& sender, ptrdiff_t index)
noexcept override
112 if (index == -1 || index >= std::ssize(*options)) {
115 value = (*options)[index].first;
122 labels.
reserve(options->size());
125 auto selected_index = -1_z;
126 for (
auto&& option : *options) {
127 if (*value == option.first) {
128 selected_index = index;
130 labels.push_back(option.second);
134 return {
std::move(labels), selected_index};
138 typename decltype(value)::callback_token _value_cbt;
139 typename decltype(options)::callback_token _options_cbt;
140 typename decltype(off_value)::callback_token _off_value_cbt;
154 requires(
sizeof...(off_value) <= 1) and
161 return std::make_shared<default_selection_delegate<observer_decay_t<
decltype(value)>>>(
#define hi_forward(x)
Forward a value, based on the decltype of the value.
Definition utility.hpp:29
Functionality for labels, text and icons.
std::shared_ptr< selection_delegate > make_default_selection_delegate(auto &&value, auto &&options, auto &&...off_value) noexcept
Create a shared pointer to a default selection delegate.
Definition selection_delegate.hpp:153
DOXYGEN BUG.
Definition algorithm.hpp:15
The HikoGUI namespace.
Definition ascii.hpp:19
A delegate that controls the state of a selection_widget.
Definition selection_delegate.hpp:23
virtual std::pair< std::vector< label >, ssize_t > options_and_selected(selection_widget const &sender) const noexcept
Retrieve the label of an option.
Definition selection_delegate.hpp:46
virtual void set_selected(selection_widget &sender, ssize_t index) noexcept
Called when an option is selected by the user.
Definition selection_delegate.hpp:40
callback_token subscribe(forward_of< callback_proto > auto &&callback, callback_flags flags=callback_flags::synchronous) noexcept
Subscribe a callback for notifying the widget of a data change.
Definition selection_delegate.hpp:54
A delegate that control the state of a selection_widget.
Definition selection_delegate.hpp:69
std::pair< std::vector< label >, ptrdiff_t > options_and_selected(selection_widget const &sender) const noexcept override
Retrieve the label of an option.
Definition selection_delegate.hpp:119
default_selection_delegate(forward_of< observer< value_type > > auto &&value, forward_of< observer< options_type > > auto &&options, forward_of< observer< value_type > > auto &&off_value) noexcept
Construct a default selection delegate.
Definition selection_delegate.hpp:85
default_selection_delegate(forward_of< observer< value_type > > auto &&value, forward_of< observer< options_type > > auto &&options) noexcept
Construct a default selection delegate.
Definition selection_delegate.hpp:103
A graphical control element that allows the user to choose only one of a predefined set of mutually e...
Definition selection_widget.hpp:44