11#include "../l10n/l10n.hpp"
12#include "../macros.hpp"
17namespace hi {
inline namespace v1 {
26 using notifier_type = notifier<>;
27 using callback_token = notifier_type::callback_token;
28 using callback_proto = notifier_type::callback_proto;
57 return _notifier.subscribe(hi_forward(callback), flags);
61 notifier_type _notifier;
76 observer<value_type> value;
77 observer<options_type> options;
78 observer<value_type> off_value;
88 forward_of<observer<options_type>>
auto&& options,
89 forward_of<observer<value_type>>
auto&& off_value) noexcept :
90 value(hi_forward(value)), options(hi_forward(options)), off_value(hi_forward(off_value))
93 _value_cbt = this->value.subscribe([&](
auto...){ this->_notifier(); });
94 _options_cbt = this->options.subscribe([&](
auto...){ this->_notifier(); });
95 _off_value_cbt = this->off_value.subscribe([&](
auto...){ this->_notifier(); });
105 forward_of<observer<value_type>>
auto&& value,
106 forward_of<observer<options_type>>
auto&& options) noexcept :
111 void set_selected(
selection_widget& sender, ptrdiff_t index)
noexcept override
113 if (index == -1 || index >= std::ssize(*options)) {
116 value = (*options)[index].first;
123 labels.
reserve(options->size());
126 auto selected_index = -1_z;
127 for (
auto&& option : *options) {
128 if (*value == option.first) {
129 selected_index = index;
131 labels.push_back(option.second);
135 return {
std::move(labels), selected_index};
139 typename decltype(value)::callback_token _value_cbt;
140 typename decltype(options)::callback_token _options_cbt;
141 typename decltype(off_value)::callback_token _off_value_cbt;
155 requires(
sizeof...(off_value) <= 1) and
159 hi_forward(value), hi_forward(options), hi_forward(off_value)...};
162 return std::make_shared<default_selection_delegate<observer_decay_t<
decltype(value)>>>(
163 hi_forward(value), hi_forward(options), hi_forward(off_value)...);
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:154
geometry/margins.hpp
Definition lookahead_iterator.hpp:5
The HikoGUI API version 1.
Definition lookahead_iterator.hpp:6
std::ptrdiff_t ssize_t
Signed size/index into an array.
Definition misc.hpp:33
A delegate that controls the state of a selection_widget.
Definition selection_delegate.hpp:24
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:47
virtual void set_selected(selection_widget &sender, ssize_t index) noexcept
Called when an option is selected by the user.
Definition selection_delegate.hpp:41
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:55
A delegate that control the state of a selection_widget.
Definition selection_delegate.hpp:70
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:120
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:86
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:104
A graphical control element that allows the user to choose only one of a predefined set of mutually e...
Definition selection_widget.hpp:45
True if T is a forwarded type of Forward.
Definition concepts.hpp:131