diff --git a/libs/ui/include/psemek/ui/checkbox.hpp b/libs/ui/include/psemek/ui/checkbox.hpp index bbacc450..1a56cf71 100644 --- a/libs/ui/include/psemek/ui/checkbox.hpp +++ b/libs/ui/include/psemek/ui/checkbox.hpp @@ -14,7 +14,7 @@ namespace psemek::ui bool on_event(mouse_click const & e) override; 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; @@ -40,6 +40,8 @@ namespace psemek::ui bool value_ = false; on_value_changed_callback callback_; + + void post_value_changed(); }; } diff --git a/libs/ui/source/checkbox.cpp b/libs/ui/source/checkbox.cpp index cfe01b72..7874623e 100644 --- a/libs/ui/source/checkbox.cpp +++ b/libs/ui/source/checkbox.cpp @@ -41,8 +41,7 @@ namespace psemek::ui { state_ = state_t::mousedown; value_ = !value_; - if (callback_) - post([cb = callback_, v = value_]{ cb(v); }); + post_value_changed(); on_state_changed(state_t::mouseover); return true; } @@ -60,6 +59,13 @@ namespace psemek::ui 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) { 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); }); + } + }