Support a separate callback for ui::selector submenu selection
This commit is contained in:
parent
a6b89e3d54
commit
1cdfcc5aa5
2 changed files with 8 additions and 1 deletions
|
|
@ -35,6 +35,7 @@ namespace psemek::ui
|
||||||
|
|
||||||
virtual std::optional<std::size_t> selected() const { return selected_; }
|
virtual std::optional<std::size_t> selected() const { return selected_; }
|
||||||
virtual void on_selected(std::function<void(std::size_t)> callback);
|
virtual void on_selected(std::function<void(std::size_t)> callback);
|
||||||
|
virtual void on_submenu(std::function<void(std::size_t)> callback);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
|
@ -54,6 +55,7 @@ namespace psemek::ui
|
||||||
std::optional<std::size_t> selected_;
|
std::optional<std::size_t> selected_;
|
||||||
|
|
||||||
std::function<void(std::size_t)> callback_;
|
std::function<void(std::size_t)> callback_;
|
||||||
|
std::function<void(std::size_t)> submenu_callback_;
|
||||||
};
|
};
|
||||||
|
|
||||||
bool spawn(element * root, std::shared_ptr<selector> selector, geom::point<float, 2> const & position, std::function<void(std::size_t)> on_selected);
|
bool spawn(element * root, std::shared_ptr<selector> selector, geom::point<float, 2> const & position, std::function<void(std::size_t)> on_selected);
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,7 @@ namespace psemek::ui
|
||||||
}
|
}
|
||||||
|
|
||||||
if (new_selected && new_selected != selected_ && submenu_[*new_selected] && callback_)
|
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;
|
selected_ = new_selected;
|
||||||
|
|
||||||
|
|
@ -166,6 +166,11 @@ namespace psemek::ui
|
||||||
callback_ = std::move(callback);
|
callback_ = std::move(callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void selector::on_submenu(std::function<void(std::size_t)> callback)
|
||||||
|
{
|
||||||
|
submenu_callback_ = std::move(callback);
|
||||||
|
}
|
||||||
|
|
||||||
bool spawn(element * root, std::shared_ptr<selector> selector, geom::point<float, 2> const & position, std::function<void(std::size_t)> on_selected)
|
bool spawn(element * root, std::shared_ptr<selector> selector, geom::point<float, 2> const & position, std::function<void(std::size_t)> on_selected)
|
||||||
{
|
{
|
||||||
ui::screen * screen = find_last_parent_of_type<struct screen>(root);
|
ui::screen * screen = find_last_parent_of_type<struct screen>(root);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue