Oxygen Engine
Modern C++ 3D Engine using OpenGL
Loading...
Searching...
No Matches
component.h
1#ifndef OE_GUI_COMPONENT_H
2#define OE_GUI_COMPONENT_H
3
4#include <glm/vec2.hpp>
5#include "manager.h"
6
7struct nk_context;
8struct nk_font;
9
10namespace oe::gui
11{
12 namespace component
13 {
14 class Row;
15 }
16
17 class Component;
18
20 {
21 public:
25 Component(Manager* manager = nullptr);
26
27 virtual ~Component() {}
28
33 template <typename T>
35 {
36 assert(child);
37
38 _children.push_back(child);
39 child->_parent = this;
40
41 return this;
42 }
43
48 template <typename T>
49 Component* addSibling(T* component)
50 {
51 _parent->addChild(component);
52
53 return this;
54 }
55
61 template <typename T, typename... Args>
62 T* createChild(Args&&... args)
63 {
64 T* component = _manager->createComponent<T>(std::forward<Args>(args)...);
65 addChild(component);
66
67 component->_font = _font;
68
69 return component;
70 }
71
75 template <typename T, typename... Args>
76 T& createSibling(Args&&... args)
77 {
78 T& component = _manager->createComponent<T>(std::forward<Args>(args)...);
79 _parent->addChild(component);
80
81 return component;
82 }
83
84 template <typename T>
85 T* getParent()
86 {
87 return (T*)_parent;
88 }
89
97 template <typename... Args>
98 component::Row* createRow(const float& height, const int& cols = 0)
99 {
100 return createChild<component::Row>(height, cols);
101 }
102
107 Component* setFont(const std::string& font_name);
108
114
119
120 virtual void generate() = 0;
121
122 protected:
123 gui_id_t _id = 0;
124
125 Manager* _manager;
126 nk_context* _context;
127 nk_font* _font = nullptr;
128 Component* _parent;
129 std::vector<Component*> _children;
130
131 friend class Manager;
132 };
133}
134
135#include "component/all.h" // IWYU pragma: keep
136
137#endif
Definition component.h:20
Component * setFont(const std::string &font_name)
component::Row * createRow(const float &height, const int &cols=0)
Definition component.h:98
Component * setManager(Manager *manager)
Component * addChild(T *child)
Definition component.h:34
T * createChild(Args &&... args)
Definition component.h:62
Component(Manager *manager=nullptr)
T & createSibling(Args &&... args)
Definition component.h:76
Component * addSibling(T *component)
Definition component.h:49
Definition manager.h:35
T * createComponent(Args &&... args)
Definition manager.h:99
Definition layout.h:26
Graphical user interface (panels, buttons, text input, ...)
Definition component.h:11