#ifndef GAMESMODEL_H #define GAMESMODEL_H #include "gametypemap.h" #include "pb/serverinfo_game.pb.h" #include "tab_supervisor.h" #include #include #include #include class GamesModel : public QAbstractTableModel { Q_OBJECT private: QList gameList; QMap rooms; QMap gameTypes; static const int NUM_COLS = 8; static const int SECS_PER_MIN = 60; static const int SECS_PER_TEN_MIN = 600; static const int SECS_PER_HOUR = 3600; public: static const int SORT_ROLE = Qt::UserRole + 1; GamesModel(const QMap &_rooms, const QMap &_gameTypes, QObject *parent = nullptr); int rowCount(const QModelIndex &parent = QModelIndex()) const { return parent.isValid() ? 0 : gameList.size(); } int columnCount(const QModelIndex & /*parent*/ = QModelIndex()) const { return NUM_COLS; } QVariant data(const QModelIndex &index, int role) const; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; const QString getGameCreatedString(const int secs) const; const ServerInfo_Game &getGame(int row); /** * Update game list with a (possibly new) game. */ void updateGameList(const ServerInfo_Game &game); int roomColIndex() { return 0; } int startTimeColIndex() { return 1; } const QMap &getGameTypes() { return gameTypes; } }; class ServerInfo_User; class GamesProxyModel : public QSortFilterProxyModel { Q_OBJECT private: bool ownUserIsRegistered; const TabSupervisor *tabSupervisor; bool showBuddiesOnlyGames; bool hideIgnoredUserGames; bool unavailableGamesVisible; bool showPasswordProtectedGames; QString gameNameFilter, creatorNameFilter; QSet gameTypeFilter; int maxPlayersFilterMin, maxPlayersFilterMax; static const bool DEFAULT_UNAVAILABLE_GAMES_VISIBLE = false; static const bool DEFAULT_SHOW_PASSWORD_PROTECTED_GAMES = true; static const bool DEFAULT_SHOW_BUDDIES_ONLY_GAMES = true; static const bool DEFAULT_HIDE_IGNORED_USER_GAMES = false; static const int DEFAULT_MAX_PLAYERS_MIN = 1; static const int DEFAULT_MAX_PLAYERS_MAX = 99; public: GamesProxyModel(QObject *parent = nullptr, const TabSupervisor *_tabSupervisor = nullptr); bool getShowBuddiesOnlyGames() const { return showBuddiesOnlyGames; } void setShowBuddiesOnlyGames(bool _showBuddiesOnlyGames); bool getHideIgnoredUserGames() const { return hideIgnoredUserGames; } void setHideIgnoredUserGames(bool _hideIgnoredUserGames); bool getUnavailableGamesVisible() const { return unavailableGamesVisible; } void setUnavailableGamesVisible(bool _unavailableGamesVisible); bool getShowPasswordProtectedGames() const { return showPasswordProtectedGames; } void setShowPasswordProtectedGames(bool _showPasswordProtectedGames); QString getGameNameFilter() const { return gameNameFilter; } void setGameNameFilter(const QString &_gameNameFilter); QString getCreatorNameFilter() const { return creatorNameFilter; } void setCreatorNameFilter(const QString &_creatorNameFilter); QSet getGameTypeFilter() const { return gameTypeFilter; } void setGameTypeFilter(const QSet &_gameTypeFilter); int getMaxPlayersFilterMin() const { return maxPlayersFilterMin; } int getMaxPlayersFilterMax() const { return maxPlayersFilterMax; } void setMaxPlayersFilter(int _maxPlayersFilterMin, int _maxPlayersFilterMax); int getNumFilteredGames() const; void resetFilterParameters(); bool areFilterParametersSetToDefaults() const; void loadFilterParameters(const QMap &allGameTypes); void saveFilterParameters(const QMap &allGameTypes); void refresh(); protected: bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const; bool filterAcceptsRow(int sourceRow) const; }; #endif