2#include "base_widget.hpp"
13struct base_container_widget : base_widget
15 explicit base_container_widget(base_container_widget* parent);
17 virtual void add_held(base_widget*
widget) = 0;
18 virtual void remove_held(base_widget*
widget) = 0;
19 virtual bool handle_child_Delete() = 0;
23 const std::vector<base_widget*>&
get_held()
const {
return held; }
45 template <
typename T,
typename ...Args>
46 requires std::derived_from<T, base_widget>
54 template <
typename T,
typename ...Args>
55 requires std::derived_from<T, base_widget>
64 requires (!std::derived_from<std::remove_pointer_t<Pred>
68 std::vector<base_widget*> held;
69 std::vector<std::unique_ptr<base_widget>> children;
72 void get_deeper_held(std::vector<base_widget*>& deepest
73 , base_container_widget* current_widget)
const;
77 requires (!std::derived_from<std::remove_pointer_t<Pred>
82 const auto it{std::find_if(children.begin()
86 if (it == children.end())
return nullptr;
87 std::erase(held, it->get());
88 std::erase(children, *it);
92template<
typename T,
typename ...Args>
93 requires std::derived_from<T, base_widget>
97 children.emplace_back(
98 std::make_unique<T>(std::forward<Args>(args)...,
this));
99 return children.back().get();
102template<
typename T,
typename ...Args>
103 requires std::derived_from<T, base_widget>
107 children.emplace_back(std::make_unique<T>(args...,
this));
108 return children.back().get();