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 <list>
6
7#include "manager.h"
8
9struct nk_context;
10struct nk_font;
11
12namespace oe::gui
13{
14 namespace component
15 {
16 class Row;
17 }
18
19 class Component;
20
22 {
23 public:
27 Component(Manager* manager = nullptr);
28
29 virtual ~Component() {}
30
35 template <typename T>
37 {
38 assert(child);
39
40 _children.push_back(child);
41 child->_parent = this;
42
43 return this;
44 }
45
50 template <typename T>
51 Component* addSibling(T* component)
52 {
53 _parent->addChild(component);
54
55 return this;
56 }
57
63 template <typename T, typename... Args>
64 T* createChild(Args&&... args)
65 {
66 T* component = _manager->createComponent<T>(std::forward<Args>(args)...);
67 addChild(component);
68
69 component->_font = _font;
70
71 return component;
72 }
73
77 template <typename T, typename... Args>
78 T& createSibling(Args&&... args)
79 {
80 T& component = _manager->createComponent<T>(std::forward<Args>(args)...);
81 _parent->addChild(component);
82
83 return component;
84 }
85
86 template <typename T>
87 T* getParent()
88 {
89 return (T*)_parent;
90 }
91
99 template <typename... Args>
100 component::Row* createRow(const float& height, const int& cols = 0)
101 {
102 return createChild<component::Row>(height, cols);
103 }
104
109 Component* setFont(const std::string& font_name);
110
116
121
122 virtual void generate() = 0;
123
124 protected:
125 gui_id_t _id = 0;
126
127 Manager* _manager;
128 nk_context* _context;
129 nk_font* _font = nullptr;
130 Component* _parent;
131 std::vector<Component*> _children;
132
133 friend class Manager;
134 };
135}
136
137#include "component/all.h"
138
139#endif
Definition component.h:22
Component * setFont(const std::string &font_name)
component::Row * createRow(const float &height, const int &cols=0)
Definition component.h:100
Component * setManager(Manager *manager)
Component * addChild(T *child)
Definition component.h:36
T * createChild(Args &&... args)
Definition component.h:64
Component(Manager *manager=nullptr)
T & createSibling(Args &&... args)
Definition component.h:78
Component * addSibling(T *component)
Definition component.h:51
Definition manager.h:39
T * createComponent(Args &&... args)
Definition manager.h:106
Definition layout.h:26
Graphical user interface (panels, buttons, text input, ...)
Definition component.h:13