8 auto convert_to_stable(
const std::vector<entt::meta_any>& selection) -> std::vector<entt::meta_any>
10 std::vector<entt::meta_any> stable_selection;
11 for(
const auto& sel : selection)
13 if(sel.type() == entt::resolve<entt::handle>())
15 auto handle = sel.cast<entt::handle>();
23 stable_selection.emplace_back(sel);
26 return stable_selection;
29 auto resolve_stable(
const std::vector<entt::meta_any>& selection) -> std::vector<entt::meta_any>
31 std::vector<entt::meta_any> resolved_selection;
32 for(
const auto& sel : selection)
34 if(sel.type() == entt::resolve<entt::uhandle>())
37 auto resolved = uhandle.
resolve();
40 resolved_selection.emplace_back(resolved);
45 resolved_selection.emplace_back(sel);
48 return resolved_selection;
53 const std::vector<entt::meta_any>& old_sel,
54 const std::vector<entt::meta_any>& new_sel,
bool is_select)
55 : manager(mgr), old_selection(convert_to_stable(old_sel)), new_selection(convert_to_stable(new_sel)), is_select(is_select)
87 if(selection_action.is_select != is_select)
97 if(old_selection.empty() && selection_action.new_selection.empty())
102 if(old_selection.size() != selection_action.new_selection.size())
109 for(
const auto& old_item : old_selection)
112 for(
const auto& prev_new_item : selection_action.new_selection)
114 if(old_item == prev_new_item)
auto make_uhandle(entt::handle handle) -> uhandle
auto resolve() const -> entt::handle
void restore_selection_impl(const std::vector< entt::meta_any > &selection_snapshot)
void undo_action() override
void merge_with(const editing_action_t &previous) override
void do_action() override
auto is_valid() const -> bool override
std::vector< entt::meta_any > old_selection
selection_action_t(editing_manager *mgr, const std::vector< entt::meta_any > &old_sel, const std::vector< entt::meta_any > &new_sel, bool is_select)
editing_manager * manager
auto is_mergeable(const editing_action_t &previous) const -> bool override
std::vector< entt::meta_any > new_selection