// SPDX-License-Identifier: MIT // // EmulationStation Desktop Edition // FileFilterIndex.h // // Gamelist filters. // #ifndef ES_APP_FILE_FILTER_INDEX_H #define ES_APP_FILE_FILTER_INDEX_H #if defined(__APPLE__) #include #endif #include #include class FileData; enum FilterIndexType { NONE, FAVORITES_FILTER, GENRE_FILTER, PLAYER_FILTER, PUBDEV_FILTER, RATINGS_FILTER, KIDGAME_FILTER, COMPLETED_FILTER, BROKEN_FILTER, HIDDEN_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 setTextFilter(std::string textFilter); std::string getTextFilter() { return mTextFilter; }; void clearAllFilters(); void debugPrintIndexes(); bool showFile(FileData* game); bool isFiltered() { return (mFilterByText || filterByFavorites || filterByGenre || filterByPlayers || filterByPubDev || filterByRatings || filterByKidGame || filterByCompleted || filterByBroken || filterByHidden ); }; bool isKeyBeingFilteredBy(std::string key, FilterIndexType type); std::vector& getFilterDataDecls(); void importIndex(FileFilterIndex* indexToImport); void resetIndex(); void resetFilters(); void setUIModeFilters(); private: std::vector filterDataDecl; std::string getIndexableKey(FileData* game, FilterIndexType type, bool getSecondary); void manageFavoritesEntryInIndex(FileData* game, bool remove = false); 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 manageKidGameEntryInIndex(FileData* game, bool remove = false); void manageCompletedEntryInIndex(FileData* game, bool remove = false); void manageBrokenEntryInIndex(FileData* game, bool remove = false); void manageHiddenEntryInIndex(FileData* game, bool remove = false); void manageIndexEntry(std::map* index, std::string key, bool remove); void clearIndex(std::map indexMap); std::string mTextFilter; bool mFilterByText; bool filterByFavorites; bool filterByGenre; bool filterByPlayers; bool filterByPubDev; bool filterByRatings; bool filterByKidGame; bool filterByCompleted; bool filterByBroken; bool filterByHidden; std::map favoritesIndexAllKeys; std::map genreIndexAllKeys; std::map playersIndexAllKeys; std::map pubDevIndexAllKeys; std::map ratingsIndexAllKeys; std::map kidGameIndexAllKeys; std::map completedIndexAllKeys; std::map brokenIndexAllKeys; std::map hiddenIndexAllKeys; std::vector favoritesIndexFilteredKeys; std::vector genreIndexFilteredKeys; std::vector playersIndexFilteredKeys; std::vector pubDevIndexFilteredKeys; std::vector ratingsIndexFilteredKeys; std::vector kidGameIndexFilteredKeys; std::vector completedIndexFilteredKeys; std::vector brokenIndexFilteredKeys; std::vector hiddenIndexFilteredKeys; FileData* mRootFolder; }; #endif // ES_APP_FILE_FILTER_INDEX_H