#pragma once #include #include "FileData.h" #include "Log.h" #include #include #include #include #include "Util.h" enum FilterIndexType { NONE, GENRE_FILTER, PLAYER_FILTER, PUBDEV_FILTER, RATINGS_FILTER }; struct FilterDataDecl { FilterIndexType type; // type of filter std::map* allIndexKeys; // all possible filters for this type bool* filteredByRef; // is it filtered by this type std::vector* currentFilteredKeys; // current keys being filtered for std::string primaryKey; // primary key in metadata bool hasSecondaryKey; // has secondary key for comparison std::string secondaryKey; // what's the secondary key std::string menuLabel; // text to show in menu }; class FileFilterIndex { public: FileFilterIndex(); ~FileFilterIndex(); void addToIndex(FileData* game); void removeFromIndex(FileData* game); void setFilter(FilterIndexType type, std::vector* values); void clearAllFilters(); void debugPrintIndexes(); bool showFile(FileData* game); bool isFiltered() { return (filterByGenre || filterByPlayers || filterByPubDev || filterByRatings); }; bool isKeyBeingFilteredBy(std::string key, FilterIndexType type); std::map* getGenreAllIndexedKeys() { return &genreIndexAllKeys; }; std::vector* getGenreFilteredKeys() { return &genreIndexFilteredKeys; }; std::vector& getFilterDataDecls(); private: std::vector filterDataDecl; std::string getIndexableKey(FileData* game, FilterIndexType type, bool getSecondary); void manageGenreEntryInIndex(FileData* game, bool remove = false); void managePlayerEntryInIndex(FileData* game, bool remove = false); void managePubDevEntryInIndex(FileData* game, bool remove = false); void manageRatingsEntryInIndex(FileData* game, bool remove = false); void manageIndexEntry(std::map* index, std::string key, bool remove); void clearIndex(std::map indexMap); bool filterByGenre; bool filterByPlayers; bool filterByPubDev; bool filterByRatings; std::map genreIndexAllKeys; std::map playersIndexAllKeys; std::map pubDevIndexAllKeys; std::map ratingsIndexAllKeys; std::vector genreIndexFilteredKeys; std::vector playersIndexFilteredKeys; std::vector pubDevIndexFilteredKeys; std::vector ratingsIndexFilteredKeys; FileData* mRootFolder; };