11#include "../observer/module.hpp"
12#include "../macros.hpp"
16namespace hi {
inline namespace v1 {
18class abstract_button_widget;
48 using callback_token = notifier_type::callback_token;
49 using callback_proto = notifier_type::callback_proto;
73 return _notifier.subscribe(hi_forward(callback), flags);
77 notifier_type _notifier;
104 value(hi_forward(value)), on_value(hi_forward(on_value))
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 constexpr static 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>;
161 value(hi_forward(value)), on_value(hi_forward(on_value)), off_value(hi_forward(off_value))
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(); });
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)>>>(
233 hi_forward(value), hi_forward(on_value));
250 return std::make_shared<default_toggle_button_delegate<observer_decay_t<
decltype(value)>>>(
251 hi_forward(value), hi_forward(args)...);
@ 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:16
geometry/margins.hpp
Definition lookahead_iterator.hpp:5
@ on
The border is drawn on the edge of a quad.
constexpr Out narrow_cast(In const &rhs) noexcept
Cast numeric values without loss of precision.
Definition cast.hpp:377
Base class for implementing button widgets.
Definition abstract_button_widget.hpp:33
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
True if T is a forwarded type of Forward.
Definition concepts.hpp:131