11#include "../notifier.hpp"
12#include "../observer.hpp"
16namespace hi {
inline namespace v1 {
18class abstract_button_widget;
47 using notifier_type = notifier<>;
48 using callback_token = notifier_type::callback_token;
49 using callback_proto = notifier_type::callback_proto;
70 [[nodiscard]] callback_token
71 subscribe(forward_of<callback_proto>
auto&& callback, callback_flags flags = callback_flags::synchronous)
noexcept
73 return _notifier.subscribe(
hi_forward(callback), flags);
77 notifier_type _notifier;
93 observer<value_type> value;
94 observer<value_type> on_value;
102 forward_of<observer<value_type>>
auto&& value,
103 forward_of<observer<value_type>>
auto&& on_value) noexcept :
107 _value_cbt = this->value.subscribe([&](
auto...){ this->_notifier(); });
108 _on_value_cbt = this->on_value.subscribe([&](
auto...){ this->_notifier(); });
115 if (*value == *on_value) {
122 void activate(abstract_button_widget& sender)
noexcept override
128 typename decltype(value)::callback_token _value_cbt;
129 typename decltype(on_value)::callback_token _on_value_cbt;
143 using value_type = T;
144 static constexpr bool can_make_defaults =
145 std::is_same_v<value_type, bool> or std::is_integral_v<value_type> or std::is_enum_v<value_type>;
147 observer<value_type> value;
148 observer<value_type> on_value;
149 observer<value_type> off_value;
158 forward_of<observer<value_type>>
auto&& value,
159 forward_of<observer<value_type>>
auto&& on_value,
160 forward_of<observer<value_type>>
auto&& off_value) noexcept :
164 _value_cbt = this->value.subscribe([&](
auto...){ this->_notifier(); });
165 _on_value_cbt = this->on_value.subscribe([&](
auto...){ this->_notifier(); });
166 _off_value_cbt = this->off_value.subscribe([&](
auto...){ this->_notifier(); });
176 forward_of<observer<value_type>>
auto&& value,
177 forward_of<observer<value_type>>
auto&& on_value)
noexcept requires can_make_defaults :
192 [[nodiscard]]
button_state state(abstract_button_widget
const& sender)
const noexcept override
194 if (*value == *on_value) {
196 }
else if (*value == *off_value) {
203 void activate(abstract_button_widget& sender)
noexcept override
205 if (*value == *off_value) {
213 typename decltype(value)::callback_token _value_cbt;
214 typename decltype(on_value)::callback_token _on_value_cbt;
215 typename decltype(off_value)::callback_token _off_value_cbt;
232 return std::make_shared<default_radio_button_delegate<observer_decay_t<
decltype(value)>>>(
250 return std::make_shared<default_toggle_button_delegate<observer_decay_t<
decltype(value)>>>(
#define hi_forward(x)
Forward a value, based on the decltype of the value.
Definition utility.hpp:29
@ other
The gui_event does not have associated data.
std::shared_ptr< button_delegate > make_default_toggle_button_delegate(auto &&value, auto &&...args) noexcept
Make a shared pointer to a toggle-button delegate.
Definition button_delegate.hpp:245
std::shared_ptr< button_delegate > make_default_radio_button_delegate(auto &&value, auto &&on_value) noexcept
Make a shared pointer to a radio-button delegate.
Definition button_delegate.hpp:227
button_state
The state of a button.
Definition button_delegate.hpp:23
@ off
The 'off' state of a button.
@ other
The other state of a button.
@ on
The 'on' state of a button.
DOXYGEN BUG.
Definition algorithm.hpp:15
geometry/margins.hpp
Definition assert.hpp:18
Base class for implementing button widgets.
Definition abstract_button_widget.hpp:32
A button delegate controls the state of a button widget.
Definition button_delegate.hpp:45
virtual void activate(abstract_button_widget &sender) noexcept
Called when the button is pressed by the user.
Definition button_delegate.hpp:59
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 button_delegate.hpp:71
virtual button_state state(abstract_button_widget const &sender) const noexcept
Used by the widget to check the state of the button.
Definition button_delegate.hpp:63
A default radio button delegate.
Definition button_delegate.hpp:89
default_radio_button_delegate(forward_of< observer< value_type > > auto &&value, forward_of< observer< value_type > > auto &&on_value) noexcept
Construct a delegate.
Definition button_delegate.hpp:101
A default toggle button delegate.
Definition button_delegate.hpp:141
default_toggle_button_delegate(forward_of< observer< value_type > > auto &&value, forward_of< observer< value_type > > auto &&on_value, forward_of< observer< value_type > > auto &&off_value) noexcept
Construct a delegate.
Definition button_delegate.hpp:157
default_toggle_button_delegate(forward_of< observer< value_type > > auto &&value) noexcept
Construct a delegate.
Definition button_delegate.hpp:186
default_toggle_button_delegate(forward_of< observer< value_type > > auto &&value, forward_of< observer< value_type > > auto &&on_value) noexcept
Construct a delegate.
Definition button_delegate.hpp:175