Cockatrice 2026-06-01-Development-3.1.0-beta.3
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 <QDateTime>
12#include <QTreeView>
13
14class Response;
15class AbstractClient;
16class QSortFilterProxyModel;
17class ServerInfo_DeckStorage_TreeItem;
18
19class RemoteDeckList_TreeModel : public QAbstractItemModel
20{
21 Q_OBJECT
22public:
23 class DirectoryNode;
24 class FileNode;
25 class Node
26 {
27 protected:
29 QString name;
30
31 public:
32 explicit Node(const QString &_name, DirectoryNode *_parent = nullptr) : parent(_parent), name(_name)
33 {
34 }
35 virtual ~Node() = default;
36 [[nodiscard]] DirectoryNode *getParent() const
37 {
38 return parent;
39 }
40 [[nodiscard]] QString getName() const
41 {
42 return name;
43 }
44 };
45 class DirectoryNode : public Node, public QList<Node *>
46 {
47 public:
48 explicit DirectoryNode(const QString &_name = QString(), DirectoryNode *_parent = nullptr);
49 ~DirectoryNode() override;
50 void clearTree();
51 [[nodiscard]] QString getPath() const;
52 DirectoryNode *getNodeByPath(QStringList path);
53 [[nodiscard]] FileNode *getNodeById(int id) const;
54 };
55 class FileNode : public Node
56 {
57 private:
58 int id;
59 QDateTime uploadTime;
60
61 public:
62 FileNode(const QString &_name, int _id, const QDateTime &_uploadTime, DirectoryNode *_parent = nullptr)
63 : Node(_name, _parent), id(_id), uploadTime(_uploadTime)
64 {
65 }
66 [[nodiscard]] int getId() const
67 {
68 return id;
69 }
70 [[nodiscard]] QDateTime getUploadTime() const
71 {
72 return uploadTime;
73 }
74 };
75
76 template <typename T> [[nodiscard]] T getNode(const QModelIndex &index) const
77 {
78 if (!index.isValid()) {
79 return dynamic_cast<T>(root);
80 }
81 return dynamic_cast<T>(static_cast<Node *>(index.internalPointer()));
82 }
83
84private:
87
89
90 QModelIndex nodeToIndex(Node *node) const;
91signals:
93private slots:
94 void deckListFinished(const Response &r);
95
96public:
97 explicit RemoteDeckList_TreeModel(AbstractClient *_client, QObject *parent = nullptr);
99 [[nodiscard]] int rowCount(const QModelIndex &parent = QModelIndex()) const override;
100 [[nodiscard]] int columnCount(const QModelIndex & /*parent*/ = QModelIndex()) const override;
101 [[nodiscard]] QVariant data(const QModelIndex &index, int role) const override;
102 [[nodiscard]] QVariant
103 headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
104 [[nodiscard]] QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
105 [[nodiscard]] QModelIndex parent(const QModelIndex &index) const override;
106 [[nodiscard]] Qt::ItemFlags flags(const QModelIndex &index) const override;
107
108 [[nodiscard]] DirectoryNode *getRoot() const
109 {
110 return root;
111 }
112 void addFileToTree(const ServerInfo_DeckStorage_TreeItem &file, DirectoryNode *parent);
113 void addFolderToTree(const ServerInfo_DeckStorage_TreeItem &folder, DirectoryNode *parent);
114 DirectoryNode *addNamedFolderToTree(const QString &name, DirectoryNode *parent);
115 void removeNode(Node *node);
116 void refreshTree();
117 void clearTree();
118};
119
120class RemoteDeckList_TreeWidget : public QTreeView
121{
122private:
124 QSortFilterProxyModel *proxyModel;
125
126public:
127 explicit RemoteDeckList_TreeWidget(AbstractClient *_client, QWidget *parent = nullptr);
128 [[nodiscard]] RemoteDeckList_TreeModel::Node *getNode(const QModelIndex &ind) const;
129 [[nodiscard]] RemoteDeckList_TreeModel::Node *getCurrentItem() const;
130 [[nodiscard]] QList<RemoteDeckList_TreeModel::Node *> getCurrentSelection() const;
131 [[nodiscard]] RemoteDeckList_TreeModel::DirectoryNode *getNodeByPath(const QString &path) const;
132 [[nodiscard]] RemoteDeckList_TreeModel::FileNode *getNodeById(int id) const;
133 void addFileToTree(const ServerInfo_DeckStorage_TreeItem &file, RemoteDeckList_TreeModel::DirectoryNode *parent);
134 void addFolderToTree(const ServerInfo_DeckStorage_TreeItem &folder,
136 void addFolderToTree(const QString &name, RemoteDeckList_TreeModel::DirectoryNode *parent);
138 void refreshTree();
139 void clearTree();
140};
141
142#endif
Definition abstract_client.h:51
Definition remote_decklist_tree_widget.h:46
void clearTree()
Definition remote_decklist_tree_widget.cpp:23
DirectoryNode(const QString &_name=QString(), DirectoryNode *_parent=nullptr)
Definition remote_decklist_tree_widget.cpp:12
QString getPath() const
Definition remote_decklist_tree_widget.cpp:31
FileNode * getNodeById(int id) const
Definition remote_decklist_tree_widget.cpp:70
~DirectoryNode() override
Definition remote_decklist_tree_widget.cpp:18
DirectoryNode * getNodeByPath(QStringList path)
Definition remote_decklist_tree_widget.cpp:45
Definition remote_decklist_tree_widget.h:56
int getId() const
Definition remote_decklist_tree_widget.h:66
int id
Definition remote_decklist_tree_widget.h:58
FileNode(const QString &_name, int _id, const QDateTime &_uploadTime, DirectoryNode *_parent=nullptr)
Definition remote_decklist_tree_widget.h:62
QDateTime uploadTime
Definition remote_decklist_tree_widget.h:59
QDateTime getUploadTime() const
Definition remote_decklist_tree_widget.h:70
Definition remote_decklist_tree_widget.h:26
QString getName() const
Definition remote_decklist_tree_widget.h:40
DirectoryNode * getParent() const
Definition remote_decklist_tree_widget.h:36
DirectoryNode * parent
Definition remote_decklist_tree_widget.h:28
QString name
Definition remote_decklist_tree_widget.h:29
Node(const QString &_name, DirectoryNode *_parent=nullptr)
Definition remote_decklist_tree_widget.h:32
Definition remote_decklist_tree_widget.h:20
int columnCount(const QModelIndex &=QModelIndex()) const override
Definition remote_decklist_tree_widget.cpp:114
~RemoteDeckList_TreeModel() override
Definition remote_decklist_tree_widget.cpp:99
QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override
Definition remote_decklist_tree_widget.cpp:170
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
Definition remote_decklist_tree_widget.cpp:195
DirectoryNode * addNamedFolderToTree(const QString &name, DirectoryNode *parent)
Definition remote_decklist_tree_widget.cpp:261
QModelIndex nodeToIndex(Node *node) const
Definition remote_decklist_tree_widget.cpp:227
QIcon dirIcon
Definition remote_decklist_tree_widget.h:88
AbstractClient * client
Definition remote_decklist_tree_widget.h:85
void addFileToTree(const ServerInfo_DeckStorage_TreeItem &file, DirectoryNode *parent)
Definition remote_decklist_tree_widget.cpp:235
void clearTree()
Definition remote_decklist_tree_widget.cpp:288
Qt::ItemFlags flags(const QModelIndex &index) const override
Definition remote_decklist_tree_widget.cpp:218
void removeNode(Node *node)
Definition remote_decklist_tree_widget.cpp:271
int rowCount(const QModelIndex &parent=QModelIndex()) const override
Definition remote_decklist_tree_widget.cpp:104
void addFolderToTree(const ServerInfo_DeckStorage_TreeItem &folder, DirectoryNode *parent)
Definition remote_decklist_tree_widget.cpp:246
QModelIndex parent(const QModelIndex &index) const override
Definition remote_decklist_tree_widget.cpp:209
QVariant data(const QModelIndex &index, int role) const override
Definition remote_decklist_tree_widget.cpp:119
void deckListFinished(const Response &r)
Definition remote_decklist_tree_widget.cpp:295
T getNode(const QModelIndex &index) const
Definition remote_decklist_tree_widget.h:76
QIcon fileIcon
Definition remote_decklist_tree_widget.h:88
void refreshTree()
Definition remote_decklist_tree_widget.cpp:280
DirectoryNode * getRoot() const
Definition remote_decklist_tree_widget.h:108
DirectoryNode * root
Definition remote_decklist_tree_widget.h:86
RemoteDeckList_TreeModel(AbstractClient *_client, QObject *parent=nullptr)
Definition remote_decklist_tree_widget.cpp:89
void removeNode(RemoteDeckList_TreeModel::Node *node)
Definition remote_decklist_tree_widget.cpp:373
void addFileToTree(const ServerInfo_DeckStorage_TreeItem &file, RemoteDeckList_TreeModel::DirectoryNode *parent)
Definition remote_decklist_tree_widget.cpp:356
RemoteDeckList_TreeModel::Node * getCurrentItem() const
Definition remote_decklist_tree_widget.cpp:332
RemoteDeckList_TreeModel::Node * getNode(const QModelIndex &ind) const
Definition remote_decklist_tree_widget.cpp:327
RemoteDeckList_TreeModel::FileNode * getNodeById(int id) const
Definition remote_decklist_tree_widget.cpp:351
RemoteDeckList_TreeModel * treeModel
Definition remote_decklist_tree_widget.h:123
QSortFilterProxyModel * proxyModel
Definition remote_decklist_tree_widget.h:124
void addFolderToTree(const ServerInfo_DeckStorage_TreeItem &folder, RemoteDeckList_TreeModel::DirectoryNode *parent)
Definition remote_decklist_tree_widget.cpp:362
void clearTree()
Definition remote_decklist_tree_widget.cpp:383
void refreshTree()
Definition remote_decklist_tree_widget.cpp:378
RemoteDeckList_TreeWidget(AbstractClient *_client, QWidget *parent=nullptr)
Definition remote_decklist_tree_widget.cpp:309
RemoteDeckList_TreeModel::DirectoryNode * getNodeByPath(const QString &path) const
Definition remote_decklist_tree_widget.cpp:346
QList< RemoteDeckList_TreeModel::Node * > getCurrentSelection() const
Definition remote_decklist_tree_widget.cpp:337