Cockatrice 2026-10-19-Development-3.1.2-beta.2
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 <QAbstractTableModel>
8#include <QList>
9#include <QMap>
10#include <QModelIndex>
11#include <QSortFilterProxyModel>
12#include <QString>
13#include <libcockatrice/protocol/pb/serverinfo_game.pb.h>
14#include <qnamespace.h>
15#include <qtmetamacros.h>
16
17class UserListProxy;
18class QObject;
19
28class GamesModel : public QAbstractTableModel
29{
30 Q_OBJECT
31private:
35
36 static const int NUM_COLS = 8;
37
38public:
39 static const int SORT_ROLE = Qt::UserRole + 1;
40
47 GamesModel(const QMap<int, QString> &_rooms, const QMap<int, GameTypeMap> &_gameTypes, QObject *parent = nullptr);
48
49 [[nodiscard]] int rowCount(const QModelIndex &parent = QModelIndex()) const override
50 {
51 return parent.isValid() ? 0 : gameList.size();
52 }
53
54 [[nodiscard]] int columnCount(const QModelIndex & /*parent*/ = QModelIndex()) const override
55 {
56 return NUM_COLS;
57 }
58
59 [[nodiscard]] QVariant data(const QModelIndex &index, int role) const override;
60
61 [[nodiscard]] QVariant
62 headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
63
69 static const QString getGameCreatedString(const int secs);
70
76 const ServerInfo_Game &getGame(int row);
77
82 void updateGameList(const ServerInfo_Game &game);
83
88 {
89 return 0;
90 }
91
96 {
97 return 1;
98 }
99
104 {
105 return gameTypes;
106 }
107};
108
117class GamesProxyModel : public QSortFilterProxyModel
118{
119 Q_OBJECT
120private:
122
123 // If adding any additional filters, make sure to update:
124 // - GamesProxyModel()
125 // - resetFilterParameters()
126 // - areFilterParametersSetToDefaults()
127 // - loadFilterParameters()
128 // - saveFilterParameters()
129 // - filterAcceptsRow()
131
132signals:
134
135public:
141 explicit GamesProxyModel(QObject *parent = nullptr, const UserListProxy *_userListProxy = nullptr);
142
143 // Getters for filter parameters
144 [[nodiscard]] const GameFilterConfigs &getFilters() const
145 {
146 return filters;
147 }
148
152 void setGameFilters(const GameFilterConfigs &_filters);
153
157 [[nodiscard]] int getNumFilteredGames() const;
158
163
167 [[nodiscard]] bool areFilterParametersSetToDefaults() const;
168
173 void loadFilterParameters(const QMap<int, QString> &allGameTypes);
174
179 void saveFilterParameters(const QMap<int, QString> &allGameTypes);
180
184 void refresh();
185
186protected:
187 [[nodiscard]] bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
188 [[nodiscard]] bool filterAcceptsRow(int sourceRow) const;
189};
190
191#endif
QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override
Definition games_model.cpp:243
QMap< int, GameTypeMap > gameTypes
Definition games_model.h:34
const QMap< int, GameTypeMap > & getGameTypes()
Returns the map of game types per room.
Definition games_model.h:103
const ServerInfo_Game & getGame(int row)
Returns a reference to a specific game by row index.
Definition games_model.cpp:286
int columnCount(const QModelIndex &=QModelIndex()) const override
Definition games_model.h:54
void updateGameList(const ServerInfo_Game &game)
Updates the game list with a new or updated game.
Definition games_model.cpp:292
int rowCount(const QModelIndex &parent=QModelIndex()) const override
Definition games_model.h:49
int startTimeColIndex()
Returns the index of the start time column.
Definition games_model.h:95
QVariant data(const QModelIndex &index, int role) const override
Definition games_model.cpp:92
GamesModel(const QMap< int, QString > &_rooms, const QMap< int, GameTypeMap > &_gameTypes, QObject *parent=nullptr)
Constructs a GamesModel.
Definition games_model.cpp:87
int roomColIndex()
Returns the index of the room column.
Definition games_model.h:87
QList< ServerInfo_Game > gameList
Definition games_model.h:32
static const QString getGameCreatedString(const int secs)
Formats the game creation time into a human-readable string.
Definition games_model.cpp:54
static const int SORT_ROLE
Definition games_model.h:39
static const int NUM_COLS
Definition games_model.h:36
QMap< int, QString > rooms
Definition games_model.h:33
GameFilterConfigs filters
Definition games_model.h:130
bool areFilterParametersSetToDefaults() const
Returns true if all filter parameters are set to their defaults.
Definition games_model.cpp:358
void resetFilterParameters()
Resets all filter parameters to default values.
Definition games_model.cpp:353
void loadFilterParameters(const QMap< int, QString > &allGameTypes)
Loads filter parameters from persistent settings.
Definition games_model.cpp:363
const GameFilterConfigs & getFilters() const
Definition games_model.h:144
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override
Definition games_model.cpp:416
const UserListProxy * userListProxy
Definition games_model.h:121
void saveFilterParameters(const QMap< int, QString > &allGameTypes)
Saves filter parameters to persistent settings.
Definition games_model.cpp:386
void setGameFilters(const GameFilterConfigs &_filters)
Sets all game filters at once.
Definition games_model.cpp:323
int getNumFilteredGames() const
Returns the number of games filtered out by the current filter.
Definition games_model.cpp:337
void refresh()
Refreshes the proxy model (re-applies filters).
Definition games_model.cpp:524
GamesProxyModel(QObject *parent=nullptr, const UserListProxy *_userListProxy=nullptr)
Constructs a GamesProxyModel.
Definition games_model.cpp:315
void filtersChanged()
Definition remote_connection_controller.h:20
Definition game.h:18
Definition user_list_proxy.h:19
The possible game filter configs.
Definition game_filter_configs.h:15
Definition serverinfo_game.proto:5