7#include "button_delegate.hpp"
9#include "../observable.hpp"
13namespace hi::inline v1 {
24template<button_type ButtonType,
typename T>
27 static_assert(ButtonType == button_type::radio or ButtonType == button_type::toggle);
31 static constexpr bool can_make_defaults =
32 std::is_same_v<value_type, bool> or std::is_integral_v<value_type> or std::is_enum_v<value_type>;
48 _value_cbt = this->value.subscribe([&](
auto...){ this->_notifier(); });
49 _on_value_cbt = this->on_value.subscribe([&](
auto...){ this->_notifier(); });
50 _off_value_cbt = this->off_value.subscribe([&](
auto...){ this->_notifier(); });
60 requires(can_make_defaults or
button_type == button_type::radio) :
77 if (*value == *on_value) {
78 return button_state::on;
79 }
else if (*value == *off_value) {
80 return button_state::off;
82 return button_state::other;
86 void activate(abstract_button_widget &sender)
noexcept override
89 if (*value == *off_value) {
94 }
else if constexpr (
button_type == button_type::radio) {
100 typename decltype(value)::token_type _value_cbt;
101 typename decltype(on_value)::token_type _on_value_cbt;
102 typename decltype(off_value)::token_type _off_value_cbt;
105template<
button_type ButtonType,
typename Value,
typename... Args>
106default_button_delegate(Value &&, Args &&...)
107 -> default_button_delegate<ButtonType, observable_argument_t<std::remove_cvref_t<Value>>>;
109template<
button_type ButtonType,
typename Value,
typename... Args>
112 using value_type = observable_argument_t<std::remove_cvref_t<Value>>;
113 return std::make_unique<default_button_delegate<ButtonType, value_type>>(
114 std::forward<Value>(value), std::forward<Args>(args)...);
#define hi_forward(x)
Forward a value, based on the decltype of the value.
Definition required.hpp:29
button_state
The state of a button.
Definition button_state.hpp:13
button_type
The type of button.
Definition button_type.hpp:13
An observable value.
Definition observable.hpp:359
Definition abstract_button_widget.hpp:23
Definition button_delegate.hpp:14
A default button delegate.
Definition default_button_delegate.hpp:25
default_button_delegate(auto &&value, auto &&on_value, auto &&off_value) noexcept
Construct a delegate.
Definition default_button_delegate.hpp:44
default_button_delegate(auto &&value, auto &&on_value) noexcept
Construct a delegate.
Definition default_button_delegate.hpp:59
default_button_delegate(auto &&value) noexcept
Construct a delegate.
Definition default_button_delegate.hpp:69