Support selector canceled callback in ui::spawn

This commit is contained in:
Nikita Lisitsa 2022-05-03 20:14:14 +03:00
parent fe1769cf46
commit a368eb32ff
2 changed files with 5 additions and 3 deletions

View file

@ -74,6 +74,6 @@ namespace psemek::ui
std::function<void(std::optional<std::size_t>)> mouseover_callback_; std::function<void(std::optional<std::size_t>)> mouseover_callback_;
}; };
bool spawn(element * root, std::shared_ptr<selector> selector, geom::point<float, 2> const & position); bool spawn(element * root, std::shared_ptr<selector> selector, geom::point<float, 2> const & position, std::function<void()> on_canceled = nullptr);
} }

View file

@ -237,7 +237,7 @@ namespace psemek::ui
} }
bool spawn(element * root, std::shared_ptr<selector> selector, geom::point<float, 2> const & position) bool spawn(element * root, std::shared_ptr<selector> selector, geom::point<float, 2> const & position, std::function<void()> on_canceled)
{ {
ui::screen * screen = find_last_parent_of_type<struct screen>(root); ui::screen * screen = find_last_parent_of_type<struct screen>(root);
if (!screen) if (!screen)
@ -248,8 +248,10 @@ namespace psemek::ui
positioner->set_child(selector); positioner->set_child(selector);
event_interceptor->set_child(positioner); event_interceptor->set_child(positioner);
auto close = [selector_root = event_interceptor.get(), selector = selector.get()]{ auto close = [selector_root = event_interceptor.get(), selector = selector.get(), on_canceled]{
selector->on_selected([](std::size_t){}); selector->on_selected([](std::size_t){});
if (on_canceled)
on_canceled();
auto p = dynamic_cast<struct screen *>(selector_root->parent()); auto p = dynamic_cast<struct screen *>(selector_root->parent());
if (p) if (p)