Cockatrice 2026-10-19-Development-3.1.2-beta.2
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
remote_decklist_tree_widget.h
Go to the documentation of this file.
1
7
8#ifndef REMOTEDECKLIST_TREEWIDGET_H
9#define REMOTEDECKLIST_TREEWIDGET_H
10
11#include <QAbstractItemModel>
12#include <QDateTime>
13#include <QIcon>
14#include <QList>
15#include <QModelIndex>
16#include <QString>
17#include <QStringList>
18#include <QTreeView>
19#include <qnamespace.h>
20#include <qtmetamacros.h>
21
22class Response;
23class AbstractClient;
24class QSortFilterProxyModel;
26class QObject;
27class QWidget;
28
29class RemoteDeckList_TreeModel : public QAbstractItemModel
30{
31 Q_OBJECT
32public:
33 class DirectoryNode;
34 class FileNode;
35
36 class Node
37 {
38 protected:
40 QString name;
42
43 public:
44 explicit Node(const QString &_name, DirectoryNode *_parent = nullptr)
45 : parent(_parent), name(_name), publicFlag(false)
46 {
47 }
48 virtual ~Node() = default;
49 [[nodiscard]] DirectoryNode *getParent() const
50 {
51 return parent;
52 }
53 [[nodiscard]] QString getName() const
54 {
55 return name;
56 }
57 [[nodiscard]] bool isPublic() const
58 {
59 return publicFlag;
60 }
61 void setIsPublic(bool _public)
62 {
63 publicFlag = _public;
64 }
65 };
66 class DirectoryNode : public Node, public QList<Node *>
67 {
68 public:
69 explicit DirectoryNode(const QString &_name = QString(), DirectoryNode *_parent = nullptr);
70 ~DirectoryNode() override;
71 void clearTree();
72 [[nodiscard]] QString getPath() const;
73 DirectoryNode *getNodeByPath(QStringList path);
74 [[nodiscard]] FileNode *getNodeById(int id) const;
75 };
76 class FileNode : public Node
77 {
78 private:
79 int id;
80 QDateTime uploadTime;
81
82 public:
83 FileNode(const QString &_name,
84 int _id,
85 const QDateTime &_uploadTime,
86 DirectoryNode *_parent = nullptr,
87 bool _isPublic = false)
88 : Node(_name, _parent), id(_id), uploadTime(_uploadTime)
89 {
90 setIsPublic(_isPublic);
91 }
92 [[nodiscard]] int getId() const
93 {
94 return id;
95 }
96 [[nodiscard]] QDateTime getUploadTime() const
97 {
98 return uploadTime;
99 }
100 };
101
102 template <typename T> [[nodiscard]] T getNode(const QModelIndex &index) const
103 {
104 if (!index.isValid()) {
105 return dynamic_cast<T>(root);
106 }
107 return dynamic_cast<T>(static_cast<Node *>(index.internalPointer()));
108 }
109
110private:
113
115
116 QModelIndex nodeToIndex(Node *node) const;
117signals:
119private slots:
120 void deckListFinished(const Response &r);
121
122public:
123 explicit RemoteDeckList_TreeModel(AbstractClient *_client, QObject *parent = nullptr);
124 ~RemoteDeckList_TreeModel() override;
125 [[nodiscard]] int rowCount(const QModelIndex &parent = QModelIndex()) const override;
126 [[nodiscard]] int columnCount(const QModelIndex & /*parent*/ = QModelIndex()) const override;
127 [[nodiscard]] QVariant data(const QModelIndex &index, int role) const override;
128 [[nodiscard]] QVariant
129 headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
130 [[nodiscard]] QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
131 [[nodiscard]] QModelIndex parent(const QModelIndex &index) const override;
132 [[nodiscard]] Qt::ItemFlags flags(const QModelIndex &index) const override;
133
134 [[nodiscard]] DirectoryNode *getRoot() const
135 {
136 return root;
137 }
138
142 [[nodiscard]] bool isEffectivelyPublic(const Node *node) const;
143 void addFileToTree(const ServerInfo_DeckStorage_TreeItem &file, DirectoryNode *parent);
144 void addFolderToTree(const ServerInfo_DeckStorage_TreeItem &folder, DirectoryNode *parent);
145 DirectoryNode *addNamedFolderToTree(const QString &name, DirectoryNode *parent);
146 void removeNode(Node *node);
147 void refreshTree();
148 void clearTree();
149};
150
151class RemoteDeckList_TreeWidget : public QTreeView
152{
153private:
155 QSortFilterProxyModel *proxyModel;
156
157public:
158 explicit RemoteDeckList_TreeWidget(AbstractClient *_client, QWidget *parent = nullptr);
159 [[nodiscard]] RemoteDeckList_TreeModel::Node *getNode(const QModelIndex &ind) const;
160 [[nodiscard]] RemoteDeckList_TreeModel::Node *getCurrentItem() const;
162 [[nodiscard]] RemoteDeckList_TreeModel::DirectoryNode *getNodeByPath(const QString &path) const;
163 [[nodiscard]] RemoteDeckList_TreeModel::FileNode *getNodeById(int id) const;
167 void addFolderToTree(const QString &name, RemoteDeckList_TreeModel::DirectoryNode *parent);
169 void refreshTree();
170 void clearTree();
171};
172
173#endif
Definition abstract_client.h:73
Definition remote_connection_controller.h:20
Definition remote_decklist_tree_widget.h:67
void clearTree()
Definition remote_decklist_tree_widget.cpp:32
DirectoryNode(const QString &_name=QString(), DirectoryNode *_parent=nullptr)
Definition remote_decklist_tree_widget.cpp:21
QString getPath() const
Definition remote_decklist_tree_widget.cpp:40
FileNode * getNodeById(int id) const
Definition remote_decklist_tree_widget.cpp:79
DirectoryNode * getNodeByPath(QStringList path)
Definition remote_decklist_tree_widget.cpp:54
Definition remote_decklist_tree_widget.h:77
int getId() const
Definition remote_decklist_tree_widget.h:92
int id
Definition remote_decklist_tree_widget.h:79
QDateTime uploadTime
Definition remote_decklist_tree_widget.h:80
FileNode(const QString &_name, int _id, const QDateTime &_uploadTime, DirectoryNode *_parent=nullptr, bool _isPublic=false)
Definition remote_decklist_tree_widget.h:83
QDateTime getUploadTime() const
Definition remote_decklist_tree_widget.h:96
Definition remote_decklist_tree_widget.h:37
QString getName() const
Definition remote_decklist_tree_widget.h:53
DirectoryNode * getParent() const
Definition remote_decklist_tree_widget.h:49
bool publicFlag
Definition remote_decklist_tree_widget.h:41
DirectoryNode * parent
Definition remote_decklist_tree_widget.h:39
void setIsPublic(bool _public)
Definition remote_decklist_tree_widget.h:61
QString name
Definition remote_decklist_tree_widget.h:40
Node(const QString &_name, DirectoryNode *_parent=nullptr)
Definition remote_decklist_tree_widget.h:44
bool isPublic() const
Definition remote_decklist_tree_widget.h:57
Definition remote_decklist_tree_widget.h:30
int columnCount(const QModelIndex &=QModelIndex()) const override
Definition remote_decklist_tree_widget.cpp:123
QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override
Definition remote_decklist_tree_widget.cpp:213
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
Definition remote_decklist_tree_widget.cpp:240
DirectoryNode * addNamedFolderToTree(const QString &name, DirectoryNode *parent)
Definition remote_decklist_tree_widget.cpp:307
QModelIndex nodeToIndex(Node *node) const
Definition remote_decklist_tree_widget.cpp:272
QIcon dirIcon
Definition remote_decklist_tree_widget.h:114
AbstractClient * client
Definition remote_decklist_tree_widget.h:111
void addFileToTree(const ServerInfo_DeckStorage_TreeItem &file, DirectoryNode *parent)
Definition remote_decklist_tree_widget.cpp:280
void clearTree()
Definition remote_decklist_tree_widget.cpp:349
Qt::ItemFlags flags(const QModelIndex &index) const override
Definition remote_decklist_tree_widget.cpp:263
void removeNode(Node *node)
Definition remote_decklist_tree_widget.cpp:317
int rowCount(const QModelIndex &parent=QModelIndex()) const override
Definition remote_decklist_tree_widget.cpp:113
void addFolderToTree(const ServerInfo_DeckStorage_TreeItem &folder, DirectoryNode *parent)
Definition remote_decklist_tree_widget.cpp:291
QModelIndex parent(const QModelIndex &index) const override
Definition remote_decklist_tree_widget.cpp:254
QVariant data(const QModelIndex &index, int role) const override
Definition remote_decklist_tree_widget.cpp:128
void deckListFinished(const Response &r)
Definition remote_decklist_tree_widget.cpp:356
T getNode(const QModelIndex &index) const
Definition remote_decklist_tree_widget.h:102
QIcon fileIcon
Definition remote_decklist_tree_widget.h:114
void refreshTree()
Definition remote_decklist_tree_widget.cpp:326
DirectoryNode * getRoot() const
Definition remote_decklist_tree_widget.h:134
bool isEffectivelyPublic(const Node *node) const
Whether a node is visible to other users (own flag or inherited from any ancestor folder).
Definition remote_decklist_tree_widget.cpp:334
DirectoryNode * root
Definition remote_decklist_tree_widget.h:112
RemoteDeckList_TreeModel(AbstractClient *_client, QObject *parent=nullptr)
Definition remote_decklist_tree_widget.cpp:98
void removeNode(RemoteDeckList_TreeModel::Node *node)
Definition remote_decklist_tree_widget.cpp:434
void addFileToTree(const ServerInfo_DeckStorage_TreeItem &file, RemoteDeckList_TreeModel::DirectoryNode *parent)
Definition remote_decklist_tree_widget.cpp:417
RemoteDeckList_TreeModel::Node * getCurrentItem() const
Definition remote_decklist_tree_widget.cpp:393
RemoteDeckList_TreeModel::Node * getNode(const QModelIndex &ind) const
Definition remote_decklist_tree_widget.cpp:388
RemoteDeckList_TreeModel::FileNode * getNodeById(int id) const
Definition remote_decklist_tree_widget.cpp:412
RemoteDeckList_TreeModel * treeModel
Definition remote_decklist_tree_widget.h:154
QSortFilterProxyModel * proxyModel
Definition remote_decklist_tree_widget.h:155
void addFolderToTree(const ServerInfo_DeckStorage_TreeItem &folder, RemoteDeckList_TreeModel::DirectoryNode *parent)
Definition remote_decklist_tree_widget.cpp:423
void clearTree()
Definition remote_decklist_tree_widget.cpp:444
void refreshTree()
Definition remote_decklist_tree_widget.cpp:439
RemoteDeckList_TreeWidget(AbstractClient *_client, QWidget *parent=nullptr)
Definition remote_decklist_tree_widget.cpp:370
RemoteDeckList_TreeModel::DirectoryNode * getNodeByPath(const QString &path) const
Definition remote_decklist_tree_widget.cpp:407
QList< RemoteDeckList_TreeModel::Node * > getCurrentSelection() const
Definition remote_decklist_tree_widget.cpp:398
Definition response.proto:11
Definition serverinfo_deckstorage.proto:21