Krita Source Code Documentation
Loading...
Searching...
No Matches
KisTagModel.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2018 boud <boud@valdyas.org>
3 * SPDX-FileCopyrightText: 2020 Agata Cacko <cacko.azh@gmail.com>
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 */
7#ifndef KisAllTagsModel_H
8#define KisAllTagsModel_H
9
10#include <QObject>
11#include <QAbstractTableModel>
12#include <QSortFilterProxyModel>
13
14#include <KisTag.h>
15#include <KoResource.h>
16
17#include "kritaresources_export.h"
18
19class KRITARESOURCES_EXPORT KisAbstractTagModel
20{
21public:
22
24
25 virtual QModelIndex indexForTag(KisTagSP tag) const = 0;
26 virtual KisTagSP tagForIndex(QModelIndex index = QModelIndex()) const = 0;
27
29 virtual KisTagSP tagForUrl(const QString& url) const = 0;
30
32 virtual KisTagSP addTag(const QString &tagName, const bool allowOverwrite, QVector<KoResourceSP> taggedResources) = 0;
33
35 virtual bool addTag(const KisTagSP tag, const bool allowOverwrite, QVector<KoResourceSP> taggedResources = QVector<KoResourceSP>()) = 0;
36
37 virtual bool setTagActive(const KisTagSP tag) = 0;
38 virtual bool setTagInactive(const KisTagSP tag) = 0;
39 virtual bool renameTag(const KisTagSP tag, const QString &newName, const bool allowOverwrite) = 0;
40 virtual bool changeTagActive(const KisTagSP tag, bool active) = 0;
41};
42
43
44class KRITARESOURCES_EXPORT KisAllTagsModel
45 : public QAbstractTableModel
46 , public KisAbstractTagModel
47{
48 Q_OBJECT
49
50public:
51
61
62 enum Ids { // to get actual id, you need to add s_fakeRowsCount
63 All = -2, // so it gets on top in the combobox
64 AllUntagged = -1,
65 };
66
67 ~KisAllTagsModel() override;
68
69 int rowCount(const QModelIndex &parent = QModelIndex()) const override;
70 int columnCount(const QModelIndex &parent = QModelIndex()) const override;
71 QVariant data(const QModelIndex &index, int role) const override;
72 bool setData(const QModelIndex &index, const QVariant &value, int role) override;
73 Qt::ItemFlags flags(const QModelIndex &index) const override;
74
75// KisAllTagsModel API
76
77 QModelIndex indexForTag(KisTagSP tag) const override;
78 KisTagSP tagForIndex(QModelIndex index = QModelIndex()) const override;
79
80 KisTagSP tagForUrl(const QString& tagUrl) const override;
81
82 // TODO: replace ALL occurrences of KoResourceSP here with the resource id's.
83 KisTagSP addTag(const QString &tagName, const bool allowOverwrite, QVector<KoResourceSP> taggedResources) override;
84 bool addTag(const KisTagSP tag, const bool allowOverwrite, QVector<KoResourceSP> taggedResources = QVector<KoResourceSP>()) override;
85 bool setTagActive(const KisTagSP tag) override;
86 bool setTagInactive(const KisTagSP tag) override;
87
88 bool renameTag(const KisTagSP tag, const QString &newName, const bool allowOverwrite) override;
89 bool changeTagActive(const KisTagSP tag, bool active) override;
90
91 // TODO: they can be static const variables, too, if it's better than functions
92 static QString urlAll() { return "All"; }
93 static QString urlAllUntagged() { return "All Untagged"; }
94
95private Q_SLOTS:
96
97 void addStorage(const QString &location);
98 void removeStorage(const QString &location);
99
100private:
101
103 friend class TestTagResourceModel;
104 friend class KisTagModel;
105
106 KisAllTagsModel(const QString &resourceType, QObject *parent = 0);
107
108 bool tagResourceByUrl(const QString& tagUrl, const int resourceId);
109 bool tagResourceById(const int tagId, const int resource);
110
111 void untagAllResources(KisTagSP tag);
112
113 bool resetQuery();
114 void closeQuery();
115
116 struct Private;
117 Private* const d;
118
119};
120
121class KRITARESOURCES_EXPORT KisTagModel
122 : public QSortFilterProxyModel
123 , public KisAbstractTagModel
124{
125
126 Q_OBJECT
127
128public:
129 KisTagModel(const QString &type, QObject *parent = 0);
130 ~KisTagModel() override;
131
133 ShowInactiveTags = 0,
135 ShowAllTags
136 };
137
138 void setTagFilter(TagFilter filter);
139
141 ShowInactiveStorages = 0,
143 ShowAllStorages
144 };
145
146 void setStorageFilter(StorageFilter filter);
147
148
149 // KisAllTagsModel API
150
151 QModelIndex indexForTag(KisTagSP tag) const override;
152 KisTagSP tagForIndex(QModelIndex index = QModelIndex()) const override;
153 KisTagSP addTag(const QString &tagName, const bool allowOverwrite, QVector<KoResourceSP> taggedResources) override;
154 KisTagSP tagForUrl(const QString& url) const override;
155 bool addTag(const KisTagSP tag, const bool allowOverwrite, QVector<KoResourceSP> taggedResources = QVector<KoResourceSP>()) override;
156 bool setTagInactive(const KisTagSP tag) override;
157 bool setTagActive(const KisTagSP tag) override;
158 bool renameTag(const KisTagSP tag, const QString &newName, const bool allowOverwrite) override;
159 bool changeTagActive(const KisTagSP tag, bool active) override;
160
161protected:
162
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
166private:
167
168 friend class DlgDbExplorer;
169 friend class TestTagModel;
170
171
172 struct Private;
173 Private *const d;
174
175 Q_DISABLE_COPY(KisTagModel)
176
177};
178
180
181#endif // KisAllTagsModel_H
float value(const T *src, size_t ch)
QSharedPointer< KisAllTagsModel > KisAllTagsModelSP
virtual ~KisAbstractTagModel()
Definition KisTagModel.h:23
virtual bool setTagActive(const KisTagSP tag)=0
virtual bool addTag(const KisTagSP tag, const bool allowOverwrite, QVector< KoResourceSP > taggedResources=QVector< KoResourceSP >())=0
Add a tag, if it doesn't exist yet, with a possibly empty list of resources to tag.
virtual QModelIndex indexForTag(KisTagSP tag) const =0
virtual bool setTagInactive(const KisTagSP tag)=0
virtual KisTagSP tagForUrl(const QString &url) const =0
Retrieve a tag by url.
virtual KisTagSP addTag(const QString &tagName, const bool allowOverwrite, QVector< KoResourceSP > taggedResources)=0
Add a new tag with a possibly empty list of resources to tag.
virtual bool changeTagActive(const KisTagSP tag, bool active)=0
virtual KisTagSP tagForIndex(QModelIndex index=QModelIndex()) const =0
virtual bool renameTag(const KisTagSP tag, const QString &newName, const bool allowOverwrite)=0
static QString urlAll()
Definition KisTagModel.h:92
bool tagResourceByUrl(const QString &tagUrl, const int resourceId)
bool tagResourceById(const int tagId, const int resource)
Private *const d
static QString urlAllUntagged()
Definition KisTagModel.h:93
Private *const d