Oxygen Engine
Modern C++ 3D Engine using OpenGL
Loading...
Searching...
No Matches
manager.h
1#ifndef OE_GUI_MANAGER_H
2#define OE_GUI_MANAGER_H
3
4#include <memory>
5#include <glm/vec2.hpp>
6#include <vector>
7#include <string>
8
9#include "datatypes.h"
10#include "theme.h"
11#include "renderer.h"
12
13namespace oe
14{
15 struct Native;
16}
17
18namespace oe::core
19{
20 class Window;
21 class EventHandler;
22}
23
24struct nk_context;
25
26namespace oe::gui
27{
28 namespace component {
29 class Window;
30 }
31
32 class Component;
33
34 class Manager
35 {
36 public:
41
42 ~Manager();
43
48 (
49 const std::string& name, const std::string& title,
50 const glm::vec2& pos, const glm::vec2& size,
51 const int& options = DEFAULT_WINDOW_FLAGS
52 );
53
57 component::Window* getWindow(const std::string& name);
58
63 {
64 return _theme;
65 }
66
71 {
72 return _renderer;
73 }
74
82
87
93 void generate();
94
98 template <typename T, typename... Args>
99 T* createComponent(Args&&... args)
100 {
101 std::shared_ptr<T> result = std::make_shared<T>(std::forward<Args>(args)...);
102 _components.push_back(result);
103
104 result->setManager(this);
105
106 return result.get();
107 }
108
112 void render();
113
120
124 glm::ivec2 dimensions = glm::ivec2(0);
125
126 #ifdef OXYGEN_ENGINE_DEBUG_VALIDATE_ORDERED_OPERATIONS
127 bool is_between_generate_render = false;
128 #endif
129
130 private:
131 inline gui_id_t _generate_new_id()
132 {
133 return ++_last_id;
134 }
135
136 oe::core::Window* _window = nullptr;
137
138 std::shared_ptr<nk_context> _ctx;
139
140 oe::core::EventHandler* _events_bound_event_handler = nullptr;
141
142 Theme _theme;
143 Renderer _renderer;
144
145 gui_id_t _last_id = 0;
146
147 std::vector<component::Window*> _windows;
148
149 std::vector<std::shared_ptr<Component>> _components;
150
151 friend Component;
152
153 friend Native;
154 };
155}
156#endif
Event handler.
Definition event_handler.h:18
Definition window.h:24
Definition component.h:20
component::Window * createWindow(const std::string &name, const std::string &title, const glm::vec2 &pos, const glm::vec2 &size, const int &options=DEFAULT_WINDOW_FLAGS)
Create a new window.
void generate()
Generate UI content (no render performed).
Renderer & getRenderer()
Get ui renderer (for example: to change the shader).
Definition manager.h:70
Manager()
Constructor.
Theme & getTheme()
Get theme handler (for example: to make color / fonts edits).
Definition manager.h:62
void bindToWindow(oe::core::Window *window)
Allow the UI to send events / take control of specific application window.
void handleEvents(oe::core::EventHandler &)
Transmit event states to UI.
T * createComponent(Args &&... args)
Definition manager.h:99
void applyTheme()
Apply theme settings before generating GUI.
void render()
Render the GUI.
glm::ivec2 dimensions
Dimensions of the GUI.
Definition manager.h:124
component::Window * getWindow(const std::string &name)
Get an existing window by name.
Definition renderer.h:27
Definition theme.h:18
Definition window.h:10
Core functionality (windows, event handler, logger, ...).
Definition args.h:10
UI components.
Definition component.h:13
Graphical user interface (panels, buttons, text input, ...).
Definition component.h:11
Oxygen Engine common namespace.
Definition debug.h:17
Class providing native access to underlying handles.
Definition native.h:20