#pragma once #include "pugixml/src/pugixml.hpp" #include #include #include "GuiComponent.h" #include #include enum MetaDataType { //generic types MD_STRING, MD_INT, MD_FLOAT, //specialized types MD_MULTILINE_STRING, MD_PATH, MD_RATING, MD_DATE, MD_TIME //used for lastplayed }; struct MetaDataDecl { std::string key; MetaDataType type; std::string defaultValue; bool isStatistic; //if true, ignore scraper values for this metadata std::string displayName; // displayed as this in editors std::string displayPrompt; // phrase displayed in editors when prompted to enter value (currently only for strings) }; enum MetaDataListType { GAME_METADATA, FOLDER_METADATA }; const std::vector& getMDDByType(MetaDataListType type); class MetaDataList { public: static MetaDataList createFromXML(MetaDataListType type, pugi::xml_node node, const boost::filesystem::path& relativeTo); void appendToXML(pugi::xml_node parent, bool ignoreDefaults, const boost::filesystem::path& relativeTo) const; MetaDataList(MetaDataListType type); void set(const std::string& key, const std::string& value); void setTime(const std::string& key, const boost::posix_time::ptime& time); //times are internally stored as ISO strings (e.g. boost::posix_time::to_iso_string(ptime)) const std::string& get(const std::string& key) const; int getInt(const std::string& key) const; float getFloat(const std::string& key) const; boost::posix_time::ptime getTime(const std::string& key) const; bool isDefault(); bool wasChanged() const; void resetChangedFlag(); inline MetaDataListType getType() const { return mType; } inline const std::vector& getMDD() const { return getMDDByType(getType()); } private: MetaDataListType mType; std::map mMap; bool mWasChanged; };