/// @author Siarhei Rachytski #pragma once #include "defines.hpp" #include "../geometry/rect2d.hpp" #include "../std/list.hpp" #include "../std/shared_ptr.hpp" /// @example /// /// /// /// /// /// /// ... /// /// /// /// /// /// ... /// /// namespace graphics { namespace gl { class BaseTexture; } class ResourceManager; class ResourceCache; struct Resource; class SkinLoader { private: enum EMode { ERoot, EPage, ESkin, EIcon, EResource }; list m_mode; /// resourceStyle-specific parameters int32_t m_id; uint32_t m_texX; uint32_t m_texY; uint32_t m_texWidth; uint32_t m_texHeight; m2::RectU m_texRect; /// pointStyle-specific parameters string m_resID; /// skin-page specific parameters string m_fileName; shared_ptr m_resourceManager; /// skin-specific parameters vector > & m_caches; typedef list > > TResourceList; TResourceList m_resourceList; public: SkinLoader(shared_ptr const & resourceManager, vector > & caches); bool Push(string const & element); void Pop(string const & element); void AddAttr(string const & attribute, string const & value); void CharData(string const &) {} void popIcon(); void popSkin(); void pushPage(); void popPage(); void pushResource(); void popResource(); vector > const & caches(); }; }