Cockatrice 2026-06-01-Development-3.1.0-beta.3
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
games_model.h
Go to the documentation of this file.
1#ifndef GAMESMODEL_H
2#define GAMESMODEL_H
3
5#include "game_type_map.h"
6
7#include <QList>
8#include <QSet>
9#include <QSortFilterProxyModel>
10#include <QTime>
11#include <libcockatrice/protocol/pb/serverinfo_game.pb.h>
12
13class UserListProxy;
14
23class GamesModel : public QAbstractTableModel
24{
25 Q_OBJECT
26private:
27 QList<ServerInfo_Game> gameList;
28 QMap<int, QString> rooms;
29 QMap<int, GameTypeMap> gameTypes;
30
31 static const int NUM_COLS = 8;
32
33public:
34 static const int SORT_ROLE = Qt::UserRole + 1;
35
42 GamesModel(const QMap<int, QString> &_rooms, const QMap<int, GameTypeMap> &_gameTypes, QObject *parent = nullptr);
43
44 [[nodiscard]] int rowCount(const QModelIndex &parent = QModelIndex()) const override
45 {
46 return parent.isValid() ? 0 : gameList.size();
47 }
48
49 [[nodiscard]] int columnCount(const QModelIndex & /*parent*/ = QModelIndex()) const override
50 {
51 return NUM_COLS;
52 }
53
54 [[nodiscard]] QVariant data(const QModelIndex &index, int role) const override;
55
56 [[nodiscard]] QVariant
57 headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
58
64 static const QString getGameCreatedString(const int secs);
65
71 const ServerInfo_Game &getGame(int row);
72
77 void updateGameList(const ServerInfo_Game &game);
78
83 {
84 return 0;
85 }
86
91 {
92 return 1;
93 }
94
98 const QMap<int, GameTypeMap> &getGameTypes()
99 {
100 return gameTypes;
101 }
102};
103
112class GamesProxyModel : public QSortFilterProxyModel
113{
114 Q_OBJECT
115private:
117
118 // If adding any additional filters, make sure to update:
119 // - GamesProxyModel()
120 // - resetFilterParameters()
121 // - areFilterParametersSetToDefaults()
122 // - loadFilterParameters()
123 // - saveFilterParameters()
124 // - filterAcceptsRow()
126
127signals:
129
130public:
136 explicit GamesProxyModel(QObject *parent = nullptr, const UserListProxy *_userListProxy = nullptr);
137
138 // Getters for filter parameters
139 [[nodiscard]] const GameFilterConfigs &getFilters() const
140 {
141 return filters;
142 }
143
147 void setGameFilters(const GameFilterConfigs &_filters);
148
152 [[nodiscard]] int getNumFilteredGames() const;
153
158
162 [[nodiscard]] bool areFilterParametersSetToDefaults() const;
163
168 void loadFilterParameters(const QMap<int, QString> &allGameTypes);
169
174 void saveFilterParameters(const QMap<int, QString> &allGameTypes);
175
179 void refresh();
180
181protected:
182 [[nodiscard]] bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
183 [[nodiscard]] bool filterAcceptsRow(int sourceRow) const;
184};
185
186#endif
QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override
Definition games_model.cpp:215
QMap< int, GameTypeMap > gameTypes
Definition games_model.h:29
const QMap< int, GameTypeMap > & getGameTypes()
Returns the map of game types per room.
Definition games_model.h:98
const ServerInfo_Game & getGame(int row)
Returns a reference to a specific game by row index.
Definition games_model.cpp:258
int columnCount(const QModelIndex &=QModelIndex()) const override
Definition games_model.h:49
void updateGameList(const ServerInfo_Game &game)
Updates the game list with a new or updated game.
Definition games_model.cpp:264
int rowCount(const QModelIndex &parent=QModelIndex()) const override
Definition games_model.h:44
int startTimeColIndex()
Returns the index of the start time column.
Definition games_model.h:90
QVariant data(const QModelIndex &index, int role) const override
Definition games_model.cpp:64
GamesModel(const QMap< int, QString > &_rooms, const QMap< int, GameTypeMap > &_gameTypes, QObject *parent=nullptr)
Constructs a GamesModel.
Definition games_model.cpp:59
int roomColIndex()
Returns the index of the room column.
Definition games_model.h:82
QList< ServerInfo_Game > gameList
Definition games_model.h:27
static const QString getGameCreatedString(const int secs)
Formats the game creation time into a human-readable string.
Definition games_model.cpp:26
static const int SORT_ROLE
Definition games_model.h:34
static const int NUM_COLS
Definition games_model.h:31
QMap< int, QString > rooms
Definition games_model.h:28
GameFilterConfigs filters
Definition games_model.h:125
bool areFilterParametersSetToDefaults() const
Returns true if all filter parameters are set to their defaults.
Definition games_model.cpp:327
void resetFilterParameters()
Resets all filter parameters to default values.
Definition games_model.cpp:322
void loadFilterParameters(const QMap< int, QString > &allGameTypes)
Loads filter parameters from persistent settings.
Definition games_model.cpp:332
const GameFilterConfigs & getFilters() const
Definition games_model.h:139
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override
Definition games_model.cpp:385
const UserListProxy * userListProxy
Definition games_model.h:116
void saveFilterParameters(const QMap< int, QString > &allGameTypes)
Saves filter parameters to persistent settings.
Definition games_model.cpp:355
void setGameFilters(const GameFilterConfigs &_filters)
Sets all game filters at once.
Definition games_model.cpp:292
int getNumFilteredGames() const
Returns the number of games filtered out by the current filter.
Definition games_model.cpp:306
void refresh()
Refreshes the proxy model (re-applies filters).
Definition games_model.cpp:493
GamesProxyModel(QObject *parent=nullptr, const UserListProxy *_userListProxy=nullptr)
Constructs a GamesProxyModel.
Definition games_model.cpp:284
void filtersChanged()
Definition user_list_proxy.h:19
The possible game filter configs.
Definition game_filter_configs.h:10