From 1cdfcc5aa5326242c6f77fc22cbf312e0eaca73c Mon Sep 17 00:00:00 2001 From: lisyarus Date: Sat, 30 Apr 2022 20:31:34 +0300 Subject: [PATCH] Support a separate callback for ui::selector submenu selection --- libs/ui/include/psemek/ui/selector.hpp | 2 ++ libs/ui/source/selector.cpp | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/libs/ui/include/psemek/ui/selector.hpp b/libs/ui/include/psemek/ui/selector.hpp index 8ca8877b..cf78429a 100644 --- a/libs/ui/include/psemek/ui/selector.hpp +++ b/libs/ui/include/psemek/ui/selector.hpp @@ -35,6 +35,7 @@ namespace psemek::ui virtual std::optional selected() const { return selected_; } virtual void on_selected(std::function callback); + virtual void on_submenu(std::function callback); protected: @@ -54,6 +55,7 @@ namespace psemek::ui std::optional selected_; std::function callback_; + std::function submenu_callback_; }; bool spawn(element * root, std::shared_ptr selector, geom::point const & position, std::function on_selected); diff --git a/libs/ui/source/selector.cpp b/libs/ui/source/selector.cpp index b0a51705..e41de2f0 100644 --- a/libs/ui/source/selector.cpp +++ b/libs/ui/source/selector.cpp @@ -97,7 +97,7 @@ namespace psemek::ui } if (new_selected && new_selected != selected_ && submenu_[*new_selected] && callback_) - post([cb = callback_, i = *new_selected]{ cb(i); }); + post([cb = submenu_callback_, i = *new_selected]{ cb(i); }); selected_ = new_selected; @@ -166,6 +166,11 @@ namespace psemek::ui callback_ = std::move(callback); } + void selector::on_submenu(std::function callback) + { + submenu_callback_ = std::move(callback); + } + bool spawn(element * root, std::shared_ptr selector, geom::point const & position, std::function on_selected) { ui::screen * screen = find_last_parent_of_type(root);