#ifndef __PRESET_LOADER_HPP #define __PRESET_LOADER_HPP #include // used for path / filename stuff #include // for auto pointers #include #ifdef WIN32 #include "win32-dirent.h" #endif #ifdef LINUX #include #endif #ifdef MACOS #include #endif #include #include #include "PresetFactoryManager.hpp" class Preset; class PresetFactory; class PresetLoader { public: /// Initializes the preset loader with the target directory specified PresetLoader(int gx, int gy, std::string dirname); ~PresetLoader(); /// Load a preset by specifying it's unique identifier given when the preset url /// was added to this loader std::unique_ptr loadPreset(unsigned int index) const; std::unique_ptr loadPreset ( const std::string & url ) const; /// Add a preset to the loader's collection. /// \param url an url referencing the preset /// \param presetName a name for the preset /// \param rating an integer representing the goodness of the preset /// \returns The unique index assigned to the preset in the collection. Used with loadPreset unsigned int addPresetURL ( const std::string & url, const std::string & presetName, const RatingList & ratings); /// Add a preset to the loader's collection. /// \param index insertion index /// \param url an url referencing the preset /// \param presetName a name for the preset /// \param rating an integer representing the goodness of the preset void insertPresetURL (unsigned int index, const std::string & url, const std::string & presetName, const RatingList & ratings); /// Clears all presets from the collection inline void clear() { _entries.clear(); _presetNames.clear(); _ratings = std::vector(TOTAL_RATING_TYPES, RatingList()); clearRatingsSum(); } inline void clearRatingsSum() { _ratingsSums = std::vector(TOTAL_RATING_TYPES, 0); } const std::vector & getPresetRatings() const; const std::vector & getPresetRatingsSums() const; /// Removes a preset from the loader /// \param index the unique identifier of the preset url to be removed void removePreset(unsigned int index); /// Sets the rating of a preset to a new value void setRating(unsigned int index, int rating, const PresetRatingType ratingType); /// Get a preset rating given an index int getPresetRating ( unsigned int index, const PresetRatingType ratingType) const; /// Get a preset url given an index const std::string & getPresetURL ( unsigned int index) const; /// Get a preset name given an index const std::string & getPresetName ( unsigned int index) const; /// Returns the number of presets in the active directory inline std::size_t size() const { return _entries.size(); } /// Sets the directory where the loader will search for files void setScanDirectory(std::string pathname); /// Returns the directory path associated with this preset chooser inline const std::string & directoryName() const { return _dirname; } /// Rescans the active preset directory void rescan(); void setPresetName(unsigned int index, std::string name); private: void handleDirectoryError(); std::string _dirname; DIR * _dir; std::vector _ratingsSums; mutable PresetFactoryManager _presetFactoryManager; // vector chosen for speed, but not great for reverse index lookups std::vector _entries; std::vector _presetNames; // Indexed by ratingType, preset position. std::vector _ratings; }; #endif