From 73d05a5ec49cb42082f9e265d25fb0c8ce787939 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Thu, 10 Mar 2022 12:19:26 +0300 Subject: [PATCH] Add ui helpers for finding a specific element type in element tree --- libs/ui/include/psemek/ui/element.hpp | 31 +++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/libs/ui/include/psemek/ui/element.hpp b/libs/ui/include/psemek/ui/element.hpp index f5ea9058..177d4d2a 100644 --- a/libs/ui/include/psemek/ui/element.hpp +++ b/libs/ui/include/psemek/ui/element.hpp @@ -88,4 +88,35 @@ namespace psemek::ui void post_delayed_callbacks() const; }; + template + Type * find_first_parent_of_type(element * e) + { + while (true) + { + if (!e) + return nullptr; + + if (auto p = dynamic_cast(e)) + return p; + + e = e->parent(); + } + } + + template + Type * find_last_parent_of_type(element * e) + { + Type * r = nullptr; + while (true) + { + if (auto p = find_first_parent_of_type(e)) + { + r = p; + e = p->parent(); + } + else + return r; + } + } + }