11#include "../observer/module.hpp"
15namespace hi {
inline namespace v1 {
17class abstract_button_widget;
46 using notifier_type = notifier<>;
47 using callback_token = notifier_type::callback_token;
48 using callback_proto = notifier_type::callback_proto;
69 [[nodiscard]] callback_token
70 subscribe(forward_of<callback_proto>
auto&& callback, callback_flags flags = callback_flags::synchronous)
noexcept
72 return _notifier.subscribe(
hi_forward(callback), flags);
76 notifier_type _notifier;
92 observer<value_type> value;
93 observer<value_type> on_value;
101 forward_of<observer<value_type>>
auto&& value,
102 forward_of<observer<value_type>>
auto&& on_value) noexcept :
106 _value_cbt = this->value.subscribe([&](
auto...){ this->_notifier(); });
107 _on_value_cbt = this->on_value.subscribe([&](
auto...){ this->_notifier(); });
114 if (*value == *on_value) {
121 void activate(abstract_button_widget& sender)
noexcept override
127 typename decltype(value)::callback_token _value_cbt;
128 typename decltype(on_value)::callback_token _on_value_cbt;
142 using value_type = T;
143 static constexpr bool can_make_defaults =
144 std::is_same_v<value_type, bool> or std::is_integral_v<value_type> or std::is_enum_v<value_type>;
146 observer<value_type> value;
147 observer<value_type> on_value;
148 observer<value_type> off_value;
157 forward_of<observer<value_type>>
auto&& value,
158 forward_of<observer<value_type>>
auto&& on_value,
159 forward_of<observer<value_type>>
auto&& off_value) noexcept :
163 _value_cbt = this->value.subscribe([&](
auto...){ this->_notifier(); });
164 _on_value_cbt = this->on_value.subscribe([&](
auto...){ this->_notifier(); });
165 _off_value_cbt = this->off_value.subscribe([&](
auto...){ this->_notifier(); });
175 forward_of<observer<value_type>>
auto&& value,
176 forward_of<observer<value_type>>
auto&& on_value)
noexcept requires can_make_defaults :
191 [[nodiscard]]
button_state state(abstract_button_widget
const& sender)
const noexcept override
193 if (*value == *on_value) {
195 }
else if (*value == *off_value) {
202 void activate(abstract_button_widget& sender)
noexcept override
204 if (*value == *off_value) {
212 typename decltype(value)::callback_token _value_cbt;
213 typename decltype(on_value)::callback_token _on_value_cbt;
214 typename decltype(off_value)::callback_token _off_value_cbt;
231 return std::make_shared<default_radio_button_delegate<observer_decay_t<
decltype(value)>>>(
249 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:244
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:226
button_state
The state of a button.
Definition button_delegate.hpp:22
@ 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:13
geometry/margins.hpp
Definition cache.hpp:11
@ on
The border is drawn on the edge of a quad.
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:44
virtual void activate(abstract_button_widget &sender) noexcept
Called when the button is pressed by the user.
Definition button_delegate.hpp:58
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:70
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:62
A default radio button delegate.
Definition button_delegate.hpp:88
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:100
A default toggle button delegate.
Definition button_delegate.hpp:140
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:156
default_toggle_button_delegate(forward_of< observer< value_type > > auto &&value) noexcept
Construct a delegate.
Definition button_delegate.hpp:185
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:174