19 inline unsigned short getPriority()
const {
return this->m_priority; }
21 inline void setPriority(
const unsigned short &priority) {
23 this->m_priority = priority;
26 inline virtual void onAttach() {
29 this->m_attached =
true;
32 inline void setRenderFunc(std::function<
void()> &&func) { this->m_renderFunc = std::move(func); }
34 inline virtual void onRender() { this->m_renderFunc(); }
36 ImGuiPanel(
const std::string &name =
"Panel",
const unsigned short &priority = 0) :
37 m_name(std::move(name)), m_priority(priority) {}
39 virtual ~ImGuiPanel() =
default;
42 std::string m_name =
"Panel";
43 unsigned short m_priority = 0;
44 bool m_attached =
false;
46 std::function<void()> m_renderFunc = []() {};
49 class ImGuiManager :
public Layer {
51 ImGuiManager() =
delete;
53 ImGuiManager(
const std::string &layerName,
Window *window,
const ImGuiConfigFlags &flags = 0) :
54 Layer(std::move(layerName)), m_window(window), m_flags(flags) {}
56 ImGuiManager(
Window *window,
const ImGuiConfigFlags &flags) :
57 Layer(
"ImGui Manager"), m_flags(flags), m_window(window) {}
59 template <
typename T,
typename... Args>
60 inline Shared<T> addPanel(Args &&...args) {
61 if (!this->m_attached)
64 Shared<T> elem = CreateShared<T>(std::forward<Args>(args)...);
67 if (this->m_panels.find(elem->getPriority()) == this->m_panels.end()) {
68 this->m_panels.insert_or_assign(elem->getPriority(), std::vector<Shared<ImGuiPanel>>());
71 this->m_panels.at(elem->getPriority()).push_back(elem);
76 inline bool removePanel(
const Shared<ImGuiPanel> &panel) {
77 auto prio = panel->getPriority();
78 auto elem = std::find(ALL(this->m_panels.at(prio)), panel);
79 if (elem != this->m_panels.at(prio).end()) {
80 this->m_panels.at(prio).erase(elem);
86 inline void addPanel(
const Shared<ImGuiPanel> &panel) {
87 if (this->m_panels.find(panel->getPriority()) == this->m_panels.end()) {
88 this->m_panels.insert_or_assign(panel->getPriority(), std::vector<Shared<ImGuiPanel>>());
91 this->m_panels.at(panel->getPriority()).push_back(panel);
94 std::vector<Shared<ImGuiPanel>> getPanels(
const unsigned short &priority) {
return {this->m_panels.at(priority)}; }
96 virtual void onAttach()
override;
97 virtual void onDetach()
override;
99 virtual void onUpdate()
override;
100 virtual void onRender()
override;
102 virtual void begin()
override;
103 virtual void end()
override;
106 ImGuiConfigFlags m_flags = DEFAULT_IMGUI_CONFIGS;
109 std::map<unsigned short, std::vector<Shared<ImGuiPanel>>> m_panels{};