7#include "text_field_delegate.hpp"
8#include "../observable.hpp"
10#include "../charconv.hpp"
17namespace hi::inline v1 {
21template<std::
integral T>
30 _value_cbt = this->value.subscribe([&](
auto...) {
38 [[maybe_unused]]
auto dummy = from_string<value_type>(text, 10);
40 return {
tr{
"Invalid integer"}};
48 return to_string(*value);
54 value = from_string<value_type>(text, 10);
62 typename decltype(value)::token_type _value_cbt;
65template<std::
floating_po
int T>
66class default_text_field_delegate<T> :
public text_field_delegate {
70 observable<value_type> value;
72 default_text_field_delegate(
auto&& value) noexcept : value(
hi_forward(value))
74 _value_cbt = this->value.subscribe([&](
auto...) {
82 [[maybe_unused]]
auto dummy = from_string<value_type>(text);
84 return {elusive_icon::WarningSign,
tr{
"Invalid floating point number"}};
92 return to_string(*value);
98 value = from_string<value_type>(text);
106 typename decltype(value)::token_type _value_cbt;
109template<
typename Value>
110default_text_field_delegate(Value&&) -> default_text_field_delegate<observable_argument_t<std::remove_cvref_t<Value>>>;
114 using value_type = observable_argument_t<std::remove_cvref_t<
decltype(value)>>;
115 return std::make_unique<default_text_field_delegate<value_type>>(
hi_forward(value),
hi_forward(args)...);
#define hi_forward(x)
Forward a value, based on the decltype of the value.
Definition required.hpp:29
Exception thrown during parsing on an error.
Definition exception.hpp:25
A localizable message.
Definition translate.hpp:155
A label consisting of localizable text and an icon.
Definition label.hpp:27
An observable value.
Definition observable.hpp:359
Definition default_text_field_delegate.hpp:19
void set_text(text_field_widget &sender, std::string_view text) noexcept override
Set the text as entered by the user.
Definition default_text_field_delegate.hpp:51
std::string text(text_field_widget &sender) noexcept override
Get the text to show in the text field.
Definition default_text_field_delegate.hpp:46
label validate(text_field_widget &sender, std::string_view text) noexcept override
Validate the text field.
Definition default_text_field_delegate.hpp:79
std::optional< label > validate(text_field_widget &sender, std::string_view text) noexcept override
Validate the text field.
Definition default_text_field_delegate.hpp:35
Definition text_field_delegate.hpp:15
A single line text field.
Definition text_field_widget.hpp:55