#pragma once class LayoutManager { std::string m_path; struct stat m_file_info { 0 }; public: std::map> m_layouts; bool m_loaded = false; std::function on_loaded; std::function on_reloading; void unload(); void create(); bool load(const char* path); bool parse(const std::string& xml_string) noexcept; bool reload(); class Node* operator[](uint16_t id) { auto i = m_layouts.find(id); return i == m_layouts.end() ? nullptr : i->second.get(); } class Node* get(uint16_t id) { auto i = m_layouts.find(id); return i == m_layouts.end() ? nullptr : i->second.get(); } template std::shared_ptr get_ref(const char* name) { auto i = m_layouts.find(const_hash(name)); return i == m_layouts.end() ? nullptr : std::dynamic_pointer_cast(i->second); } template std::shared_ptr instantiate(const char* name) { if (auto layout = get_ref(name)) return layout->m_children[0]->clone(); return nullptr; } void restore_context(); void clear_context(); //Node& operator[](const char* ids) { return m_layouts[const_hash(ids)]; } };