Cockatrice 2025-11-30-Development-2.11.0-beta.38
A cross-platform 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 return dynamic_cast<T>(static_cast<Node *>(index.internalPointer()));
81 }
82
83private:
86
88
89 QModelIndex nodeToIndex(Node *node) const;
90signals:
92private slots:
93 void deckListFinished(const Response &r);
94
95public:
96 explicit RemoteDeckList_TreeModel(AbstractClient *_client, QObject *parent = nullptr);
98 [[nodiscard]] int rowCount(const QModelIndex &parent = QModelIndex()) const override;
99 [[nodiscard]] int columnCount(const QModelIndex & /*parent*/ = QModelIndex()) const override;
100 [[nodiscard]] QVariant data(const QModelIndex &index, int role) const override;
101 [[nodiscard]] QVariant
102 headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
103 [[nodiscard]] QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
104 [[nodiscard]] QModelIndex parent(const QModelIndex &index) const override;
105 [[nodiscard]] Qt::ItemFlags flags(const QModelIndex &index) const override;
106
107 [[nodiscard]] DirectoryNode *getRoot() const
108 {
109 return root;
110 }
111 void addFileToTree(const ServerInfo_DeckStorage_TreeItem &file, DirectoryNode *parent);
112 void addFolderToTree(const ServerInfo_DeckStorage_TreeItem &folder, DirectoryNode *parent);
113 DirectoryNode *addNamedFolderToTree(const QString &name, DirectoryNode *parent);
114 void removeNode(Node *node);
115 void refreshTree();
116 void clearTree();
117};
118
119class RemoteDeckList_TreeWidget : public QTreeView
120{
121private:
123 QSortFilterProxyModel *proxyModel;
124
125public:
126 explicit RemoteDeckList_TreeWidget(AbstractClient *_client, QWidget *parent = nullptr);
127 [[nodiscard]] RemoteDeckList_TreeModel::Node *getNode(const QModelIndex &ind) const;
128 [[nodiscard]] RemoteDeckList_TreeModel::Node *getCurrentItem() const;
129 [[nodiscard]] QList<RemoteDeckList_TreeModel::Node *> getCurrentSelection() const;
130 [[nodiscard]] RemoteDeckList_TreeModel::DirectoryNode *getNodeByPath(const QString &path) const;
131 [[nodiscard]] RemoteDeckList_TreeModel::FileNode *getNodeById(int id) const;
132 void addFileToTree(const ServerInfo_DeckStorage_TreeItem &file, RemoteDeckList_TreeModel::DirectoryNode *parent);
133 void addFolderToTree(const ServerInfo_DeckStorage_TreeItem &folder,
135 void addFolderToTree(const QString &name, RemoteDeckList_TreeModel::DirectoryNode *parent);
137 void refreshTree();
138 void clearTree();
139};
140
141#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:30
FileNode * getNodeById(int id) const
Definition remote_decklist_tree_widget.cpp:63
~DirectoryNode() override
Definition remote_decklist_tree_widget.cpp:18
DirectoryNode * getNodeByPath(QStringList path)
Definition remote_decklist_tree_widget.cpp:42
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:104
~RemoteDeckList_TreeModel() override
Definition remote_decklist_tree_widget.cpp:90
QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override
Definition remote_decklist_tree_widget.cpp:158
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
Definition remote_decklist_tree_widget.cpp:182
DirectoryNode * addNamedFolderToTree(const QString &name, DirectoryNode *parent)
Definition remote_decklist_tree_widget.cpp:243
QModelIndex nodeToIndex(Node *node) const
Definition remote_decklist_tree_widget.cpp:211
QIcon dirIcon
Definition remote_decklist_tree_widget.h:87
AbstractClient * client
Definition remote_decklist_tree_widget.h:84
void addFileToTree(const ServerInfo_DeckStorage_TreeItem &file, DirectoryNode *parent)
Definition remote_decklist_tree_widget.cpp:218
void clearTree()
Definition remote_decklist_tree_widget.cpp:270
Qt::ItemFlags flags(const QModelIndex &index) const override
Definition remote_decklist_tree_widget.cpp:202
void removeNode(Node *node)
Definition remote_decklist_tree_widget.cpp:253
int rowCount(const QModelIndex &parent=QModelIndex()) const override
Definition remote_decklist_tree_widget.cpp:95
void addFolderToTree(const ServerInfo_DeckStorage_TreeItem &folder, DirectoryNode *parent)
Definition remote_decklist_tree_widget.cpp:229
QModelIndex parent(const QModelIndex &index) const override
Definition remote_decklist_tree_widget.cpp:194
QVariant data(const QModelIndex &index, int role) const override
Definition remote_decklist_tree_widget.cpp:109
void deckListFinished(const Response &r)
Definition remote_decklist_tree_widget.cpp:277
T getNode(const QModelIndex &index) const
Definition remote_decklist_tree_widget.h:76
QIcon fileIcon
Definition remote_decklist_tree_widget.h:87
void refreshTree()
Definition remote_decklist_tree_widget.cpp:262
DirectoryNode * getRoot() const
Definition remote_decklist_tree_widget.h:107
DirectoryNode * root
Definition remote_decklist_tree_widget.h:85
RemoteDeckList_TreeModel(AbstractClient *_client, QObject *parent=nullptr)
Definition remote_decklist_tree_widget.cpp:80
void removeNode(RemoteDeckList_TreeModel::Node *node)
Definition remote_decklist_tree_widget.cpp:355
void addFileToTree(const ServerInfo_DeckStorage_TreeItem &file, RemoteDeckList_TreeModel::DirectoryNode *parent)
Definition remote_decklist_tree_widget.cpp:338
RemoteDeckList_TreeModel::Node * getCurrentItem() const
Definition remote_decklist_tree_widget.cpp:314
RemoteDeckList_TreeModel::Node * getNode(const QModelIndex &ind) const
Definition remote_decklist_tree_widget.cpp:309
RemoteDeckList_TreeModel::FileNode * getNodeById(int id) const
Definition remote_decklist_tree_widget.cpp:333
RemoteDeckList_TreeModel * treeModel
Definition remote_decklist_tree_widget.h:122
QSortFilterProxyModel * proxyModel
Definition remote_decklist_tree_widget.h:123
void addFolderToTree(const ServerInfo_DeckStorage_TreeItem &folder, RemoteDeckList_TreeModel::DirectoryNode *parent)
Definition remote_decklist_tree_widget.cpp:344
void clearTree()
Definition remote_decklist_tree_widget.cpp:365
void refreshTree()
Definition remote_decklist_tree_widget.cpp:360
RemoteDeckList_TreeWidget(AbstractClient *_client, QWidget *parent=nullptr)
Definition remote_decklist_tree_widget.cpp:291
RemoteDeckList_TreeModel::DirectoryNode * getNodeByPath(const QString &path) const
Definition remote_decklist_tree_widget.cpp:328
QList< RemoteDeckList_TreeModel::Node * > getCurrentSelection() const
Definition remote_decklist_tree_widget.cpp:319