Krita Source Code Documentation
Loading...
Searching...
No Matches
KisTagResourceModel.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2020 Boudewijn Rempt <boud@valdyas.org>
3 *
4 * SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6#ifndef KISTAGRESOURCEMODEL_H
7#define KISTAGRESOURCEMODEL_H
8
9#include <QObject>
10#include <QAbstractTableModel>
11#include <QSortFilterProxyModel>
12
13#include <KisTag.h>
14#include <KoResource.h>
15#include <KisResourceModel.h>
16
17#include "kritaresources_export.h"
18
19class KRITARESOURCES_EXPORT KisAbstractTagResourceModel
20{
21public:
23
24 virtual bool tagResources(const KisTagSP tag, const QVector<int> &resourceIds) = 0;
25 virtual bool untagResources(const KisTagSP tag, const QVector<int> &resourceIds) = 0;
26
34 virtual int isResourceTagged(const KisTagSP tag, const int resourceId) = 0;
35};
36
37class KRITARESOURCES_EXPORT KisAllTagResourceModel
38 : public QAbstractTableModel
40{
41 Q_OBJECT
42private:
43
45 friend class TestTagResourceModel;
46 friend class KisTagResourceModel;
47
48 KisAllTagResourceModel(const QString &resourceType, QObject *parent = 0);
49
50public:
51 ~KisAllTagResourceModel() override;
52
53public:
54
66
67 // QAbstractItemModel API
68
69 int rowCount(const QModelIndex &parent = QModelIndex()) const override;
70 int columnCount(const QModelIndex &parent = QModelIndex()) const override;
71
73 QVariant data(const QModelIndex &index, int role) const override;
74
75 // Abstract Tag API
76 bool tagResources(const KisTagSP tag, const QVector<int> &resourceIds) override;
77 bool untagResources(const KisTagSP tag, const QVector<int> &resourceId) override;
78 int isResourceTagged(const KisTagSP tag, const int resourceId) override;
79
80 QHash<int, QByteArray> roleNames() const override;
81 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
82
83private Q_SLOTS:
84 void addStorage(const QString &location);
85 void removeStorage(const QString &location);
86
87 void slotResourceActiveStateChanged(const QString &resourceType, int resourceId);
88
89private:
90
91 QString createQuery(bool onlyAchieve = true, bool returnADbIndexToo = false);
92 bool resetQuery();
93 void closeQuery();
94
95
96 struct Private;
97 Private* const d;
98};
99
105class KRITARESOURCES_EXPORT KisTagResourceModel : public QSortFilterProxyModel
109{
110 Q_OBJECT
111
112public:
113
114 KisTagResourceModel(const QString &resourceType, QObject *parent = 0);
115 ~KisTagResourceModel() override;
116
117public:
118
120 ShowInactiveTags = 0,
122 ShowAllTags
123 };
124
125 void setTagFilter(TagFilter filter);
126
127 void setResourceFilter(ResourceFilter filter) override;
128 void setStorageFilter(StorageFilter filter) override;
129
130 void setTagsFilter(const QVector<int> tagIds);
131 void setResourcesFilter(const QVector<int> resourceIds);
132
133 void setTagsFilter(const QVector<KisTagSP> tags);
134 void setResourcesFilter(const QVector<KoResourceSP> resources);
135
136 // KisAbstractTagResourceModel API
137
138 bool tagResources(const KisTagSP tag, const QVector<int> &resourceIds) override;
139 bool untagResources(const KisTagSP tag, const QVector<int> &resourceIds) override;
140 int isResourceTagged(const KisTagSP tag, const int resourceId) override;
141
142 // KisAbstractResourceModel interface
143
144 KoResourceSP resourceForIndex(QModelIndex index) const override;
145 QModelIndex indexForResource(KoResourceSP resource) const override;
146 QModelIndex indexForResourceId(int resourceId) const override;
147 bool setResourceActive(const QModelIndex &index, bool value) override;
148 KoResourceSP importResourceFile(const QString &filename, const bool allowOverwrite, const QString &storageId = QString()) override;
149 KoResourceSP importResource(const QString &filename, QIODevice *device, const bool allowOverwrite, const QString &storageId = QString()) override;
150 bool importWillOverwriteResource(const QString &fileName, const QString &storageLocation) const override;
151 bool exportResource(KoResourceSP resource, QIODevice *device) override;
152 bool addResource(KoResourceSP resource, const QString &storageId) override;
153 bool addResourceDeduplicateFileName(KoResourceSP resource, const QString &storageId) override;
154 bool updateResource(KoResourceSP resource) override;
155 bool reloadResource(KoResourceSP resource) override;
156 bool renameResource(KoResourceSP resource, const QString &name) override;
157 bool setResourceMetaData(KoResourceSP resource, QMap<QString, QVariant> metadata) override;
158 QHash<int, QByteArray> roleNames() const override;
159
160 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
161
162protected:
163 bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
164 bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override;
165
166protected Q_SLOTS:
167 void storageChanged(const QString &location);
168
169private:
170 struct Private;
171 Private* const d;
172};
173
174#endif // KISTAGRESOURCEMODEL_H
float value(const T *src, size_t ch)
virtual bool tagResources(const KisTagSP tag, const QVector< int > &resourceIds)=0
virtual bool untagResources(const KisTagSP tag, const QVector< int > &resourceIds)=0
virtual int isResourceTagged(const KisTagSP tag, const int resourceId)=0
isResourceTagged
The KisTagResourceModel class makes it possible to retrieve the resources for certain tags or the tag...