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 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
81
82private Q_SLOTS:
83 void addStorage(const QString &location);
84 void removeStorage(const QString &location);
85
86 void slotResourceActiveStateChanged(const QString &resourceType, int resourceId);
87
88private:
89
90 QString createQuery(bool onlyAchieve = true, bool returnADbIndexToo = false);
91 bool resetQuery();
92 void closeQuery();
93
94
95 struct Private;
96 Private* const d;
97};
98
104class KRITARESOURCES_EXPORT KisTagResourceModel : public QSortFilterProxyModel
108{
109 Q_OBJECT
110
111public:
112
113 KisTagResourceModel(const QString &resourceType, QObject *parent = 0);
114 ~KisTagResourceModel() override;
115
116public:
117
119 ShowInactiveTags = 0,
121 ShowAllTags
122 };
123
124 void setTagFilter(TagFilter filter);
125
126 void setResourceFilter(ResourceFilter filter) override;
127 void setStorageFilter(StorageFilter filter) override;
128
129 void setTagsFilter(const QVector<int> tagIds);
130 void setResourcesFilter(const QVector<int> resourceIds);
131
132 void setTagsFilter(const QVector<KisTagSP> tags);
133 void setResourcesFilter(const QVector<KoResourceSP> resources);
134
135 // KisAbstractTagResourceModel API
136
137 bool tagResources(const KisTagSP tag, const QVector<int> &resourceIds) override;
138 bool untagResources(const KisTagSP tag, const QVector<int> &resourceIds) override;
139 int isResourceTagged(const KisTagSP tag, const int resourceId) override;
140
141 // KisAbstractResourceModel interface
142
143 KoResourceSP resourceForIndex(QModelIndex index) const override;
144 QModelIndex indexForResource(KoResourceSP resource) const override;
145 QModelIndex indexForResourceId(int resourceId) const override;
146 bool setResourceActive(const QModelIndex &index, bool value) override;
147 KoResourceSP importResourceFile(const QString &filename, const bool allowOverwrite, const QString &storageId = QString()) override;
148 KoResourceSP importResource(const QString &filename, QIODevice *device, const bool allowOverwrite, const QString &storageId = QString()) override;
149 bool importWillOverwriteResource(const QString &fileName, const QString &storageLocation) const override;
150 bool exportResource(KoResourceSP resource, QIODevice *device) override;
151 bool addResource(KoResourceSP resource, const QString &storageId) override;
152 bool updateResource(KoResourceSP resource) override;
153 bool reloadResource(KoResourceSP resource) override;
154 bool renameResource(KoResourceSP resource, const QString &name) override;
155 bool setResourceMetaData(KoResourceSP resource, QMap<QString, QVariant> metadata) override;
156
157 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
158
159protected:
160 bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override;
161 bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override;
162
163protected Q_SLOTS:
164 void storageChanged(const QString &location);
165
166private:
167 struct Private;
168 Private* const d;
169};
170
171#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...