Fix ui::checkbox::set_value

This commit is contained in:
Nikita Lisitsa 2022-02-07 13:39:40 +03:00
parent 093308a116
commit 66deca8cda
2 changed files with 17 additions and 3 deletions

View file

@ -14,7 +14,7 @@ namespace psemek::ui
bool on_event(mouse_click const & e) override; bool on_event(mouse_click const & e) override;
bool value() const { return value_; } bool value() const { return value_; }
void set_value(bool value) { value_ = value; } void set_value(bool value, bool signal = true);
using on_value_changed_callback = std::function<void(bool)>; using on_value_changed_callback = std::function<void(bool)>;
@ -40,6 +40,8 @@ namespace psemek::ui
bool value_ = false; bool value_ = false;
on_value_changed_callback callback_; on_value_changed_callback callback_;
void post_value_changed();
}; };
} }

View file

@ -41,8 +41,7 @@ namespace psemek::ui
{ {
state_ = state_t::mousedown; state_ = state_t::mousedown;
value_ = !value_; value_ = !value_;
if (callback_) post_value_changed();
post([cb = callback_, v = value_]{ cb(v); });
on_state_changed(state_t::mouseover); on_state_changed(state_t::mouseover);
return true; return true;
} }
@ -60,6 +59,13 @@ namespace psemek::ui
return false; return false;
} }
void checkbox::set_value(bool value, bool signal)
{
value_ = value;
if (signal)
post_value_changed();
}
void checkbox::on_state_changed(state_t old) void checkbox::on_state_changed(state_t old)
{ {
if (state() == state_t::mousedown || old == state_t::mousedown) if (state() == state_t::mousedown || old == state_t::mousedown)
@ -68,4 +74,10 @@ namespace psemek::ui
} }
} }
void checkbox::post_value_changed()
{
if (callback_)
post([cb = callback_, v = value_]{ cb(v); });
}
} }