#ifndef OPENMW_LUAUI_ELEMENT #define OPENMW_LUAUI_ELEMENT #include #include #include #include "widget.hpp" namespace LuaUi { struct Element { static std::shared_ptr make(sol::table layout, bool menu, sol::optional options); static void erase(Element* element); template static void forEach(bool menu, Callback callback) { auto& container = menu ? sMenuElements : sGameElements; for (auto& [_, element] : container) callback(element.get()); } template static void forEachShared(bool menu, Callback callback) { auto& container = menu ? sMenuElements : sGameElements; for (auto& [_, element] : container) callback(element); } static const std::vector& allLayoutProperties(); WidgetExtension* mRoot; sol::main_object mLayout; std::string mLayer; bool mWarnedOnce{ false }; // From options bool mNoWarnUnused{ false }; enum State { New, Created, Update, Destroy, Destroyed, }; State mState; void create(uint64_t dept = 0); void update(); void destroy(); friend void clearGameInterface(); friend void clearMenuInterface(); void checkWarnings(); private: Element(sol::table layout, sol::optional options); sol::table layout() { return LuaUtil::cast(mLayout); } static std::map> sGameElements; static std::map> sMenuElements; }; } #endif // !OPENMW_LUAUI_ELEMENT