lxgui
Loading...
Searching...
No Matches
gui_frame_container.hpp
1#ifndef LXGUI_GUI_FRAME_CONTAINER_HPP
2#define LXGUI_GUI_FRAME_CONTAINER_HPP
3
4#include "lxgui/gui_frame_core_attributes.hpp"
5#include "lxgui/lxgui.hpp"
6#include "lxgui/utils_observer.hpp"
7#include "lxgui/utils_view.hpp"
8
9#include <list>
10#include <memory>
11#include <vector>
12
13namespace lxgui::gui {
14
15class region;
16class frame;
17class registry;
18class frame_renderer;
19class factory;
20
27public:
37 using root_frame_list = std::list<utils::owner_ptr<frame>>;
38
39 using root_frame_list_view = utils::view::
40 adaptor<root_frame_list, utils::view::smart_ptr_dereferencer, utils::view::non_null_filter>;
41
43 const root_frame_list,
46
53 explicit frame_container(factory& fac, registry& reg, utils::observer_ptr<frame_renderer> rdr);
54
55 virtual ~frame_container() = default;
60
71 utils::observer_ptr<frame> create_root_frame(frame_core_attributes attr) {
72 attr.parent = nullptr;
73
74 return create_root_frame_(std::move(attr));
75 }
76
87 template<
88 typename FrameType,
89 typename Enable =
90 typename std::enable_if<std::is_base_of<gui::frame, FrameType>::value>::type>
91 utils::observer_ptr<frame> create_root_frame(frame_core_attributes attr) {
92 attr.object_type = FrameType::CLASS_NAME;
93 attr.parent = nullptr;
94
95 return utils::static_pointer_cast<FrameType>(create_root_frame_(std::move(attr)));
96 }
97
108 template<
109 typename FrameType,
110 typename Enable =
111 typename std::enable_if<std::is_base_of<gui::frame, FrameType>::value>::type>
112 utils::observer_ptr<frame> create_root_frame(const std::string& name) {
114 attr.name = name;
115 attr.object_type = FrameType::class_name;
116
117 return utils::static_pointer_cast<FrameType>(create_root_frame_(std::move(attr)));
118 }
119
125 utils::observer_ptr<frame> add_root_frame(utils::owner_ptr<frame> obj);
126
132 utils::owner_ptr<frame> remove_root_frame(const utils::observer_ptr<frame>& obj);
133
139
145
152 void garbage_collect();
153
159 return factory_;
160 }
161
166 const factory& get_factory() const {
167 return factory_;
168 }
169
175 return registry_;
176 }
177
182 const registry& get_registry() const {
183 return registry_;
184 }
185
186protected:
187 virtual utils::observer_ptr<frame> create_root_frame_(frame_core_attributes attr);
188
189 void clear_frames_();
190
191private:
192 factory& factory_;
193 registry& registry_;
194 utils::observer_ptr<frame_renderer> renderer_;
195
196 root_frame_list root_frames_;
197};
198
199} // namespace lxgui::gui
200
201#endif
Handles the creation of new UI objects.
frame_container & operator=(const frame_container &)=delete
utils::observer_ptr< frame > create_root_frame(const std::string &name)
Creates a new frame, ready for use, and owned by this frame_container.
utils::observer_ptr< frame > create_root_frame(frame_core_attributes attr)
Creates a new frame, ready for use, and owned by this frame_container.
frame_container(frame_container &&)=delete
factory & get_factory()
Returns the GUI object factory.
virtual utils::observer_ptr< frame > create_root_frame_(frame_core_attributes attr)
const factory & get_factory() const
Returns the GUI object factory.
registry & get_registry()
Returns the UI object registry, which keeps track of all objects in the UI.
utils::observer_ptr< frame > create_root_frame(frame_core_attributes attr)
Creates a new frame, ready for use, and owned by this frame_container.
void garbage_collect()
Clean deleted entries from the frame list.
utils::owner_ptr< frame > remove_root_frame(const utils::observer_ptr< frame > &obj)
Remove a frame from the list of frames owned by this frame_container.
std::list< utils::owner_ptr< frame > > root_frame_list
Type of the root frame list.
virtual ~frame_container()=default
frame_container(const frame_container &)=delete
utils::view::adaptor< const root_frame_list, utils::view::smart_ptr_dereferencer, utils::view::non_null_filter > const_root_frame_list_view
utils::view::adaptor< root_frame_list, utils::view::smart_ptr_dereferencer, utils::view::non_null_filter > root_frame_list_view
root_frame_list_view get_root_frames()
Returns the root frame list.
utils::observer_ptr< frame > add_root_frame(utils::owner_ptr< frame > obj)
Make a frame owned by this frame_container.
frame_container & operator=(frame_container &&)=delete
const registry & get_registry() const
Returns the UI object registry, which keeps track of all objects in the UI.
Keeps track of created UI objects and records their names for lookup.
Allow iterating over a container without access to the container itself.
oup::observable_sealed_ptr< T > owner_ptr
Struct holding all the core information about a frame necessary for its creation.
Convert unique_ptr or shared_ptr to standard pointer.