16namespace hi {
inline namespace v1 {
24 using notifier_type = notifier<>;
25 using callback_token = notifier_type::callback_token;
26 using callback_proto = notifier_type::callback_proto;
30 virtual void init(
widget& sender)
noexcept {}
32 virtual void deinit(
widget& sender)
noexcept {}
53 subscribe(forward_of<callback_proto>
auto&& callback, callback_flags flags = callback_flags::synchronous)
noexcept
55 return _notifier.subscribe(
hi_forward(callback), flags);
59 notifier_type _notifier;
74 observer<value_type> value;
75 observer<options_type> options;
76 observer<value_type> off_value;
85 forward_of<observer<value_type>>
auto&& value,
86 forward_of<observer<options_type>>
auto&& options,
87 forward_of<observer<value_type>>
auto&& off_value) noexcept :
91 _value_cbt = this->value.subscribe([&](
auto...){ this->_notifier(); });
92 _options_cbt = this->options.subscribe([&](
auto...){ this->_notifier(); });
93 _off_value_cbt = this->off_value.subscribe([&](
auto...){ this->_notifier(); });
103 forward_of<observer<value_type>>
auto&& value,
104 forward_of<observer<options_type>>
auto&& options) noexcept :
109 void set_selected(
widget& sender, ptrdiff_t index)
noexcept override
111 if (index == -1 || index >= std::ssize(*options)) {
114 value = (*options)[index].first;
121 labels.
reserve(options->size());
124 auto selected_index = -1_z;
125 for (
auto&& option : *options) {
126 if (*value == option.first) {
127 selected_index = index;
129 labels.push_back(option.second);
133 return {
std::move(labels), selected_index};
137 typename decltype(value)::callback_token _value_cbt;
138 typename decltype(options)::callback_token _options_cbt;
139 typename decltype(off_value)::callback_token _off_value_cbt;
153 requires(
sizeof...(off_value) <= 1) and
160 return std::make_shared<default_selection_delegate<observer_decay_t<
decltype(value)>>>(
Functionality for labels, text and icons.
#define hi_forward(x)
Forward a value, based on the decltype of the value.
Definition utility.hpp:29
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:152
DOXYGEN BUG.
Definition algorithm.hpp:13
geometry/margins.hpp
Definition cache.hpp:11
A delegate that controls the state of a selection_widget.
Definition selection_delegate.hpp:22
virtual std::pair< std::vector< label >, ssize_t > options_and_selected(widget const &sender) const noexcept
Retrieve the label of an option.
Definition selection_delegate.hpp:45
virtual void set_selected(widget &sender, ssize_t index) noexcept
Called when an option is selected by the user.
Definition selection_delegate.hpp:39
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:53
A delegate that control the state of a selection_widget.
Definition selection_delegate.hpp:68
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:84
std::pair< std::vector< label >, ptrdiff_t > options_and_selected(widget const &sender) const noexcept override
Retrieve the label of an option.
Definition selection_delegate.hpp:118
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:102