#ifndef __URDE_CGUISYS_HPP__ #define __URDE_CGUISYS_HPP__ #include "hecl/hecl.hpp" #include #include #include #include #include "CGuiAutoRepeatData.hpp" #include "CSaveableState.hpp" namespace std { template <> struct hash { size_t operator() (const urde::EPhysicalControllerID& id) const NOEXCEPT {return size_t(id);} }; } namespace urde { class CGuiObject; class CVParamTransfer; class SObjectTag; class IFactory; class CSimplePool; typedef CGuiObject*(*FGuiFactoryFunc)(const SObjectTag&, const CVParamTransfer&); class CGuiFactoryMgr { friend class CGuiSys; std::unordered_map m_factories; public: void AddFactory(hecl::FourCC key, FGuiFactoryFunc func) { m_factories[key] = func; } }; class CGuiSys { public: enum class EUsageMode { Zero }; private: IFactory& x0_resFactory; CSimplePool& x4_resStore; CGuiFactoryMgr x8_factoryMgr; std::unordered_map x18_repeatMap; EUsageMode x2c_mode; std::stack> x28_saveStack; CVParamTransfer x38_frameFactoryParams; std::chrono::time_point x40_constructTime; void AddFactories(EUsageMode mode); void LoadWidgetFunctions(); public: CGuiSys(IFactory& resFactory, CSimplePool& resStore, EUsageMode mode); }; /** Parameter pack for FRME factory */ struct CGuiResFrameData { CGuiSys& x0_guiSys; CGuiResFrameData(CGuiSys& guiSys) : x0_guiSys(guiSys) {} }; } #endif // __URDE_CGUISYS_HPP__