Krita Source Code Documentation
Loading...
Searching...
No Matches
KisAllTagsModel Class Reference

#include <KisTagModel.h>

+ Inheritance diagram for KisAllTagsModel:

Classes

struct  Private
 

Public Types

enum  Columns {
  Id = 0 , Url , Name , Comment ,
  ResourceType , Active , KisTagRole
}
 
enum  Ids { All = -2 , AllUntagged = -1 }
 

Public Member Functions

bool addTag (const KisTagSP tag, const bool allowOverwrite, QVector< KoResourceSP > taggedResources=QVector< KoResourceSP >()) override
 Add a tag, if it doesn't exist yet, with a possibly empty list of resources to tag.
 
KisTagSP addTag (const QString &tagName, const bool allowOverwrite, QVector< KoResourceSP > taggedResources) override
 Add a new tag with a possibly empty list of resources to tag.
 
bool changeTagActive (const KisTagSP tag, bool active) override
 
int columnCount (const QModelIndex &parent=QModelIndex()) const override
 
QVariant data (const QModelIndex &index, int role) const override
 
Qt::ItemFlags flags (const QModelIndex &index) const override
 
QModelIndex indexForTag (KisTagSP tag) const override
 
bool renameTag (const KisTagSP tag, const QString &newName, const bool allowOverwrite) override
 
int rowCount (const QModelIndex &parent=QModelIndex()) const override
 
bool setData (const QModelIndex &index, const QVariant &value, int role) override
 
bool setTagActive (const KisTagSP tag) override
 
bool setTagInactive (const KisTagSP tag) override
 
KisTagSP tagForIndex (QModelIndex index=QModelIndex()) const override
 
KisTagSP tagForUrl (const QString &tagUrl) const override
 Retrieve a tag by url.
 
 ~KisAllTagsModel () override
 
- Public Member Functions inherited from KisAbstractTagModel
virtual ~KisAbstractTagModel ()
 

Static Public Member Functions

static QString urlAll ()
 
static QString urlAllUntagged ()
 

Private Slots

void addStorage (const QString &location)
 
void removeStorage (const QString &location)
 

Private Member Functions

void closeQuery ()
 
 KisAllTagsModel (const QString &resourceType, QObject *parent=0)
 
bool resetQuery ()
 
bool tagResourceById (const int tagId, const int resource)
 
bool tagResourceByUrl (const QString &tagUrl, const int resourceId)
 
void untagAllResources (KisTagSP tag)
 

Private Attributes

Private *const d
 

Friends

class KisResourceModelProvider
 
class KisTagModel
 
class TestTagResourceModel
 

Detailed Description

Definition at line 44 of file KisTagModel.h.

Member Enumeration Documentation

◆ Columns

Enumerator
Id 
Url 
Name 
Comment 
ResourceType 
Active 
KisTagRole 

Definition at line 52 of file KisTagModel.h.

◆ Ids

Enumerator
All 
AllUntagged 

Definition at line 62 of file KisTagModel.h.

62 { // 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 };

Constructor & Destructor Documentation

◆ ~KisAllTagsModel()

KisAllTagsModel::~KisAllTagsModel ( )
override

Definition at line 64 of file KisTagModel.cpp.

65{
66 delete d;
67}
Private *const d

References d.

◆ KisAllTagsModel()

KisAllTagsModel::KisAllTagsModel ( const QString & resourceType,
QObject * parent = 0 )
private

Definition at line 35 of file KisTagModel.cpp.

36 : QAbstractTableModel(parent)
37 , d(new Private())
38{
39 d->resourceType = resourceType;
40 if (!d->resourceType.isEmpty()) {
41 resetQuery();
42 }
43
44 connect(KisResourceLocator::instance(), SIGNAL(storageAdded(const QString&)), this, SLOT(addStorage(const QString&)));
45 connect(KisResourceLocator::instance(), SIGNAL(storageRemoved(const QString&)), this, SLOT(removeStorage(const QString&)));
46 connect(KisStorageModel::instance(), SIGNAL(storageEnabled(const QString&)), this, SLOT(addStorage(const QString&)));
47 connect(KisStorageModel::instance(), SIGNAL(storageDisabled(const QString&)), this, SLOT(removeStorage(const QString&)));
48}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void removeStorage(const QString &location)
void addStorage(const QString &location)
static KisResourceLocator * instance()
static KisStorageModel * instance()

References addStorage(), connect(), d, KisResourceLocator::instance(), KisStorageModel::instance(), removeStorage(), resetQuery(), and KisAllTagsModel::Private::resourceType.

Member Function Documentation

◆ addStorage

void KisAllTagsModel::addStorage ( const QString & location)
privateslot

Definition at line 523 of file KisTagModel.cpp.

524{
525 Q_UNUSED(location)
526 beginResetModel();
527 resetQuery();
528 endResetModel();
529}

References resetQuery().

◆ addTag() [1/2]

bool KisAllTagsModel::addTag ( const KisTagSP tag,
const bool allowOverwrite,
QVector< KoResourceSP > taggedResources = QVectorKoResourceSP >() )
overridevirtual

Add a tag, if it doesn't exist yet, with a possibly empty list of resources to tag.

Implements KisAbstractTagModel.

Definition at line 348 of file KisTagModel.cpp.

349{
350 if (!tag) return false;
351 if (!tag->valid()) return false;
352
353 bool r = true;
354
355 if (!KisResourceCacheDb::hasTag(tag->url(), d->resourceType)) {
356 beginInsertRows(QModelIndex(), rowCount(), rowCount());
357 if (!KisResourceCacheDb::addTag(d->resourceType, "", tag)) {
358 qWarning() << "Could not add tag" << tag;
359 return false;
360 }
361 resetQuery();
362 endInsertRows();
363
364 }
365 else if (allowOverwrite) {
366 KisTagSP trueTag = tagForUrl(tag->url());
367 r = setData(indexForTag(trueTag), QVariant::fromValue(true), Qt::UserRole + KisAllTagsModel::Active);
368 untagAllResources(trueTag);
369 tag->setComment(trueTag->comment()); // id will be set later, comment and filename are the only thing left
370 tag->setFilename(trueTag->filename());
371 }
372 else {
373 return false;
374 }
375
376 tag->setId(data(indexForTag(tag), Qt::UserRole + KisAllTagsModel::Id).toInt());
377 tag->setValid(true);
378 tag->setActive(data(indexForTag(tag), Qt::UserRole + KisAllTagsModel::Active).toInt());
379
380 if (!taggedResources.isEmpty()) {
381 QVector<int> resourceIds;
382 Q_FOREACH(const KoResourceSP resource, taggedResources) {
383
384 if (!resource) continue;
385 if (!resource->valid()) continue;
386 if (resource->resourceId() < 0) continue;
387
388 resourceIds << resource->resourceId();
389 }
391 }
392
393 return r;
394}
QModelIndex indexForTag(KisTagSP tag) const override
void untagAllResources(KisTagSP tag)
QVariant data(const QModelIndex &index, int role) const override
KisTagSP tagForUrl(const QString &tagUrl) const override
Retrieve a tag by url.
bool setData(const QModelIndex &index, const QVariant &value, int role) override
int rowCount(const QModelIndex &parent=QModelIndex()) const override
static bool addTag(const QString &resourceType, const QString storageLocation, KisTagSP tag)
static bool hasTag(const QString &url, const QString &resourceType)
The KisTagResourceModel class makes it possible to retrieve the resources for certain tags or the tag...
bool tagResources(const KisTagSP tag, const QVector< int > &resourceIds) override
int toInt(const QString &str, bool *ok=nullptr)

References Active, KisResourceCacheDb::addTag(), d, data(), KisResourceCacheDb::hasTag(), Id, indexForTag(), resetQuery(), KisAllTagsModel::Private::resourceType, rowCount(), setData(), tagForUrl(), KisTagResourceModel::tagResources(), and untagAllResources().

◆ addTag() [2/2]

KisTagSP KisAllTagsModel::addTag ( const QString & tagName,
const bool allowOverwrite,
QVector< KoResourceSP > taggedResources )
overridevirtual

Add a new tag with a possibly empty list of resources to tag.

Implements KisAbstractTagModel.

Definition at line 330 of file KisTagModel.cpp.

331{
332 KisTagSP tag = KisTagSP(new KisTag());
333 tag->setName(tagName);
334 tag->setUrl(tagName);
335 tag->setValid(true);
336 tag->setActive(true);
337 tag->setResourceType(d->resourceType);
338
339 if (addTag(tag, allowOverwrite, taggedResources)) {
340 return tag;
341 }
342 else {
343 return 0;
344 }
345}
QSharedPointer< KisTag > KisTagSP
Definition KisTag.h:20
KisTagSP addTag(const QString &tagName, const bool allowOverwrite, QVector< KoResourceSP > taggedResources) override
Add a new tag with a possibly empty list of resources to tag.
The KisTag loads a tag from a .tag file. A .tag file is a .desktop file. The following fields are imp...
Definition KisTag.h:34

References addTag(), d, and KisAllTagsModel::Private::resourceType.

◆ changeTagActive()

bool KisAllTagsModel::changeTagActive ( const KisTagSP tag,
bool active )
overridevirtual

Implements KisAbstractTagModel.

Definition at line 457 of file KisTagModel.cpp.

458{
459 if (!tag) return false;
460 if (!tag->valid()) return false;
461
462 QModelIndex idx = indexForTag(tag);
463 tag->setActive(active);
464 return setData(idx, QVariant::fromValue(active), Qt::UserRole + KisAllTagsModel::Active);
465
466}

References Active, indexForTag(), and setData().

◆ closeQuery()

void KisAllTagsModel::closeQuery ( )
private

Definition at line 518 of file KisTagModel.cpp.

519{
520 d->query.clear();
521}

References d, and KisAllTagsModel::Private::query.

◆ columnCount()

int KisAllTagsModel::columnCount ( const QModelIndex & parent = QModelIndex()) const
override

Definition at line 100 of file KisTagModel.cpp.

101{
102 if (parent.isValid()) {
103 return 0;
104 }
105
106 return d->columnCount;
107}
ChildIterator< value_type, is_const > parent(const ChildIterator< value_type, is_const > &it)
Definition KisForest.h:327

References KisAllTagsModel::Private::columnCount, and d.

◆ data()

QVariant KisAllTagsModel::data ( const QModelIndex & index,
int role ) const
override

Definition at line 109 of file KisTagModel.cpp.

110{
111 QVariant v;
112
113 if (!index.isValid()) return v;
114 if (index.row() > rowCount()) return v;
115 if (index.column() > d->columnCount) return v;
116
117 if (index.row() < s_fakeRowsCount) {
118 if (index.row() == KisAllTagsModel::All + s_fakeRowsCount) {
119 switch(role) {
120 case Qt::DisplayRole: // fallthrough
121 case Qt::ToolTipRole: // fallthrough
122 case Qt::StatusTipRole: // fallthrough
123 case Qt::WhatsThisRole:
124 case Qt::UserRole + Name:
125 return i18n("All");
126 case Qt::UserRole + Id:
127 return QString::number(KisAllTagsModel::All);
128 case Qt::UserRole + Url: {
129 return urlAll();
130 }
131 case Qt::UserRole + ResourceType:
132 return d->resourceType;
133 case Qt::UserRole + Active:
134 return true;
135 case Qt::UserRole + KisTagRole:
136 {
137 KisTagSP tag = tagForIndex(index);
138 QVariant response;
139 response.setValue(tag);
140 return response;
141 }
142 default:
143 ;
144 }
145 } else if (index.row() == KisAllTagsModel::AllUntagged + s_fakeRowsCount) {
146 switch(role) {
147 case Qt::DisplayRole: // fallthrough
148 case Qt::ToolTipRole: // fallthrough
149 case Qt::StatusTipRole: // fallthrough
150 case Qt::WhatsThisRole:
151 case Qt::UserRole + Name:
152 return i18n("All untagged");
153 case Qt::UserRole + Id:
154 return QString::number(KisAllTagsModel::AllUntagged);
155 case Qt::UserRole + Url: {
156 return urlAllUntagged();
157 }
158 case Qt::UserRole + ResourceType:
159 return d->resourceType;
160 case Qt::UserRole + Active:
161 return true;
162 case Qt::UserRole + KisTagRole:
163 {
164 KisTagSP tag = tagForIndex(index);
165 QVariant response;
166 response.setValue(tag);
167 return response;
168 }
169 default:
170 ;
171 }
172 }
173 }
174 else {
175 bool pos = const_cast<KisAllTagsModel*>(this)->d->query.seek(index.row() - s_fakeRowsCount);
176 if (pos) {
177 switch(role) {
178 case Qt::DisplayRole:
179 case Qt::UserRole + Name:
180 {
181 QVariant name = d->query.value("translated_name");
182 if (name.isNull()) {
183 name = d->query.value("name");
184 }
185 return name;
186 }
187 case Qt::ToolTipRole: // fallthrough
188 case Qt::StatusTipRole: // fallthrough
189 case Qt::WhatsThisRole:
190 {
191 QVariant comment = d->query.value("translated_comment");
192 if (comment.isNull()) {
193 comment = d->query.value("comment");
194 }
195 return comment;
196 }
197 case Qt::UserRole + Id:
198 return d->query.value("id");
199 case Qt::UserRole + Url:
200 return d->query.value("url");
201 case Qt::UserRole + ResourceType:
202 return d->query.value("resource_type");
203 case Qt::UserRole + Active:
204 return d->query.value("active");
205 case Qt::UserRole + KisTagRole:
206 {
207 KisTagSP tag = tagForIndex(index);
208 QVariant response;
209 response.setValue(tag);
210 return response;
211 }
212 default:
213 ;
214 }
215 }
216 }
217 return v;
218}
qreal v
static int s_fakeRowsCount
static QString urlAll()
Definition KisTagModel.h:92
static QString urlAllUntagged()
Definition KisTagModel.h:93
KisTagSP tagForIndex(QModelIndex index=QModelIndex()) const override
const char * name(StandardAction id)

References Active, All, AllUntagged, KisAllTagsModel::Private::columnCount, d, Id, KisTagRole, Name, KisAllTagsModel::Private::query, KisAllTagsModel::Private::resourceType, ResourceType, rowCount(), s_fakeRowsCount, tagForIndex(), Url, urlAll(), urlAllUntagged(), and v.

◆ flags()

Qt::ItemFlags KisAllTagsModel::flags ( const QModelIndex & index) const
override

Definition at line 248 of file KisTagModel.cpp.

249{
250 if (!index.isValid()) {
251 return Qt::NoItemFlags;
252 }
253 return QAbstractTableModel::flags(index) | Qt::ItemIsEditable | Qt::ItemNeverHasChildren;
254}

◆ indexForTag()

QModelIndex KisAllTagsModel::indexForTag ( KisTagSP tag) const
overridevirtual

Implements KisAbstractTagModel.

Definition at line 256 of file KisTagModel.cpp.

257{
258 if (!tag) return QModelIndex();
259 // For now a linear seek to find the first tag
260 if (tag->id() < 0 && (tag->url() == urlAll() || tag->url() == urlAllUntagged())) {
261 // this must be either a fake tag id, or a "naked" tag
262 // TODO: do we even use "naked tags"? won't it be better to just use QStrings?
263 return index(tag->id() + s_fakeRowsCount, 0);
264 }
265
266 d->query.first();
267 bool r = d->query.first();
268 if (!r) {
269 return QModelIndex();
270 }
271 do {
272 if (tag->id() >= 0) {
273 if (d->query.value("id").toInt() == tag->id()) {
274 return index(d->query.at() + s_fakeRowsCount, 0);
275 }
276 }
277 else {
278 // This is a naked tag, one that didn't come from the
279 // database.
280 // But not a "fake" tag (All or AllUntagged)!
281 if (d->query.value("url").toString() == tag->url()
282 && d->query.value("resource_type") == d->resourceType) {
283 return index(d->query.at() + s_fakeRowsCount, 0);
284 }
285 }
286 } while (d->query.next());
287
288 return QModelIndex();
289}

References d, KisAllTagsModel::Private::query, KisAllTagsModel::Private::resourceType, s_fakeRowsCount, urlAll(), and urlAllUntagged().

◆ removeStorage

void KisAllTagsModel::removeStorage ( const QString & location)
privateslot

Definition at line 531 of file KisTagModel.cpp.

532{
533 Q_UNUSED(location)
534 beginResetModel();
535 resetQuery();
536 endResetModel();
537}

References resetQuery().

◆ renameTag()

bool KisAllTagsModel::renameTag ( const KisTagSP tag,
const QString & newName,
const bool allowOverwrite )
overridevirtual

Implements KisAbstractTagModel.

Definition at line 417 of file KisTagModel.cpp.

418{
419 if (!tag) return false;
420 if (!tag->valid()) return false;
421 if (tag->id() < 0) return false;
422
423 if (newName.isEmpty()) return false;
424
425 KisTagSP dstTag = tagForUrl(newName);
426
427 if (dstTag && dstTag->active() && !allowOverwrite) {
428 return false;
429 }
430
431 if (!dstTag) {
432 dstTag = addTag(newName, false, {});
433 } else {
434 if (!dstTag->active()) {
435 setTagActive(dstTag);
436 }
437 untagAllResources(dstTag);
438 }
439
440 QVector<int> resourceIds;
441
443 model.setTagsFilter(QVector<int>() << tag->id());
444
445 for (int i = 0; i < model.rowCount(); i++) {
446 QModelIndex idx = model.index(i, 0);
447 resourceIds.append(model.data(idx, Qt::UserRole + KisTagResourceModel::Id).toInt());
448 }
449
450 model.tagResources(dstTag, resourceIds);
451 model.untagResources(tag, resourceIds);
452 setTagInactive(tag);
453
454 return true;
455}
bool setTagInactive(const KisTagSP tag) override
bool setTagActive(const KisTagSP tag) override

References addTag(), d, KisAbstractResourceModel::Id, KisAllTagsModel::Private::resourceType, setTagActive(), setTagInactive(), KisTagResourceModel::setTagsFilter(), tagForUrl(), KisTagResourceModel::tagResources(), untagAllResources(), and KisTagResourceModel::untagResources().

◆ resetQuery()

bool KisAllTagsModel::resetQuery ( )
private

Definition at line 483 of file KisTagModel.cpp.

484{
485 bool r = d->query.prepare("SELECT tags.id\n"
486 ", tags.url\n"
487 ", tags.name\n"
488 ", tags.comment\n"
489 ", tags.active\n"
490 ", tags.filename\n"
491 ", resource_types.name as resource_type\n"
492 ", tag_translations.name as translated_name\n"
493 ", tag_translations.comment as translated_comment\n"
494 "FROM tags\n"
495 ", resource_types\n"
496 "LEFT JOIN tag_translations ON tag_translations.tag_id = tags.id AND tag_translations.language = :language\n"
497 "WHERE tags.resource_type_id = resource_types.id\n"
498 "AND resource_types.name = :resource_type\n"
499 "ORDER BY tags.id\n");
500
501 if (!r) {
502 qWarning() << "Could not prepare KisAllTagsModel query" << d->query.lastError();
503 }
504
505 d->query.bindValue(":resource_type", d->resourceType);
506 d->query.bindValue(":language", KisTag::currentLocale());
507
508 r = d->query.exec();
509
510 if (!r) {
511 qWarning() << "Could not select tags" << d->query.lastError();
512 }
513
514 d->cachedRowCount = -1;
515 return r;
516}
static QString currentLocale()
Definition KisTag.cpp:84

References KisAllTagsModel::Private::cachedRowCount, KisTag::currentLocale(), d, KisAllTagsModel::Private::query, and KisAllTagsModel::Private::resourceType.

◆ rowCount()

int KisAllTagsModel::rowCount ( const QModelIndex & parent = QModelIndex()) const
override

Definition at line 69 of file KisTagModel.cpp.

70{
71 if (parent.isValid()) {
72 return 0;
73 }
74
75 if (d->cachedRowCount < 0) {
76 QSqlQuery q;
77 const bool r = q.prepare("SELECT count(*)\n"
78 "FROM tags\n"
79 ", resource_types\n"
80 "LEFT JOIN tag_translations ON tag_translations.tag_id = tags.id AND tag_translations.language = :language\n"
81 "WHERE tags.resource_type_id = resource_types.id\n"
82 "AND resource_types.name = :resource_type\n");
83 if (!r) {
84 qWarning() << "Could not execute tags rowcount query" << q.lastError();
85 return 0;
86 }
87 q.bindValue(":resource_type", d->resourceType);
88 q.bindValue(":language", KisTag::currentLocale());
89 if (!q.exec()) {
90 qWarning() << "Could not execute tags rowcount query" << q.lastError();
91 return 0;
92 }
93 q.first();
94
95 const_cast<KisAllTagsModel*>(this)->d->cachedRowCount = q.value(0).toInt() + s_fakeRowsCount;
96 }
97 return d->cachedRowCount;
98}

References KisAllTagsModel::Private::cachedRowCount, KisTag::currentLocale(), d, KisAllTagsModel::Private::resourceType, and s_fakeRowsCount.

◆ setData()

bool KisAllTagsModel::setData ( const QModelIndex & index,
const QVariant & value,
int role )
override

Definition at line 220 of file KisTagModel.cpp.

221{
222 int id = data(index, Qt::UserRole + Id).toInt();
223
224 if (index.isValid() &&
225 (role == Qt::UserRole + Active)) {
226
227 QSqlQuery q;
228 if (!q.prepare("UPDATE tags\n"
229 "SET active = :active\n"
230 "WHERE id = :id\n")) {
231 qWarning() << "Could not prepare make existing tag active query" << q.lastError();
232 return false;
233 }
234 q.bindValue(":active", value.toBool());
235 q.bindValue(":id", id);
236
237 if (!q.exec()) {
238 qWarning() << "Could not execute make existing tag active query" << q.boundValues(), q.lastError();
239 return false;
240 }
241 KisResourceLocator::instance()->purgeTag(data(index, Qt::UserRole + Url).toString(), d->resourceType);
242 }
243 resetQuery();
244 Q_EMIT dataChanged(index, index, {role});
245 return true;
246}
float value(const T *src, size_t ch)
void purgeTag(const QString tagUrl, const QString resourceType)
QString toString(const QString &value)

References Active, d, data(), Id, KisResourceLocator::instance(), KisResourceLocator::purgeTag(), resetQuery(), KisAllTagsModel::Private::resourceType, Url, and value().

◆ setTagActive()

bool KisAllTagsModel::setTagActive ( const KisTagSP tag)
overridevirtual

Implements KisAbstractTagModel.

Definition at line 396 of file KisTagModel.cpp.

397{
398 if (!tag) return false;
399 if (!tag->valid()) return false;
400
401 tag->setActive(true);
402
403 return setData(indexForTag(tag), QVariant::fromValue(true), Qt::UserRole + KisAllTagsModel::Active);
404
405}

References Active, indexForTag(), and setData().

◆ setTagInactive()

bool KisAllTagsModel::setTagInactive ( const KisTagSP tag)
overridevirtual

Implements KisAbstractTagModel.

Definition at line 407 of file KisTagModel.cpp.

408{
409 if (!tag) return false;
410 if (!tag->valid()) return false;
411
412 tag->setActive(false);
413
414 return setData(indexForTag(tag), QVariant::fromValue(false), Qt::UserRole + KisAllTagsModel::Active);
415}

References Active, indexForTag(), and setData().

◆ tagForIndex()

KisTagSP KisAllTagsModel::tagForIndex ( QModelIndex index = QModelIndex()) const
overridevirtual

Implements KisAbstractTagModel.

Definition at line 291 of file KisTagModel.cpp.

292{
293 KisTagSP tag = 0;
294 if (!index.isValid()) return tag;
295 if (index.row() > rowCount()) return tag;
296 if (index.column() > columnCount()) return tag;
297
298 if (index.row() < s_fakeRowsCount) {
299 if (index.row() == KisAllTagsModel::All + s_fakeRowsCount) {
300 tag.reset(new KisTag());
301 tag->setName(i18n("All"));
302 tag->setResourceType(d->resourceType);
303 tag->setUrl(urlAll());
304 tag->setComment(i18n("All resources"));
305 tag->setId(KisAllTagsModel::All);
306 tag->setActive(true);
307 tag->setValid(true);
308 }
309 else if (index.row() == KisAllTagsModel::AllUntagged + s_fakeRowsCount) {
310 tag.reset(new KisTag());
311 tag->setName(i18n("All untagged"));
312 tag->setResourceType(d->resourceType);
313 tag->setUrl(urlAllUntagged());
314 tag->setComment(i18n("All untagged resources"));
316 tag->setActive(true);
317 tag->setValid(true);
318 }
319 }
320 else {
321 bool pos = const_cast<KisAllTagsModel*>(this)->d->query.seek(index.row() - s_fakeRowsCount);
322 if (pos) {
323 tag = KisResourceLocator::instance()->tagForUrl(d->query.value("url").toString(), d->resourceType);
324 }
325 }
326
327 return tag;
328}
int columnCount(const QModelIndex &parent=QModelIndex()) const override
KisTagSP tagForUrl(const QString &tagUrl, const QString resourceType)
tagForUrl create a tag from the database

References All, AllUntagged, columnCount(), d, KisResourceLocator::instance(), KisAllTagsModel::Private::query, KisAllTagsModel::Private::resourceType, rowCount(), s_fakeRowsCount, KisResourceLocator::tagForUrl(), urlAll(), and urlAllUntagged().

◆ tagForUrl()

KisTagSP KisAllTagsModel::tagForUrl ( const QString & url) const
overridevirtual

Retrieve a tag by url.

Implements KisAbstractTagModel.

Definition at line 468 of file KisTagModel.cpp.

469{
470 if (tagUrl.isEmpty()) {
471 return KisTagSP();
472 }
473
474 if (tagUrl == urlAll()) {
475 return tagForIndex(index(Ids::All + s_fakeRowsCount, 0));
476 } else if (tagUrl == urlAllUntagged()) {
477 return tagForIndex(index(Ids::AllUntagged + s_fakeRowsCount, 0));
478 }
479
481}

References All, AllUntagged, d, KisResourceLocator::instance(), KisAllTagsModel::Private::resourceType, s_fakeRowsCount, tagForIndex(), KisResourceLocator::tagForUrl(), urlAll(), and urlAllUntagged().

◆ tagResourceById()

bool KisAllTagsModel::tagResourceById ( const int tagId,
const int resource )
private

◆ tagResourceByUrl()

bool KisAllTagsModel::tagResourceByUrl ( const QString & tagUrl,
const int resourceId )
private

◆ untagAllResources()

void KisAllTagsModel::untagAllResources ( KisTagSP tag)
private

Definition at line 50 of file KisTagModel.cpp.

51{
53 model.setTagsFilter(QVector<int>() << tag->id());
54 QVector<int> taggedResources;
55 for (int i = 0; i < model.rowCount(); i++) {
56 QModelIndex idx = model.index(i, 0);
57 taggedResources.append(model.data(idx, Qt::UserRole + KisTagResourceModel::Id).toInt());
58 }
59
60 model.untagResources(tag, taggedResources);
61
62}

References d, KisAbstractResourceModel::Id, KisAllTagsModel::Private::resourceType, KisTagResourceModel::setTagsFilter(), and KisTagResourceModel::untagResources().

◆ urlAll()

static QString KisAllTagsModel::urlAll ( )
inlinestatic

Definition at line 92 of file KisTagModel.h.

92{ return "All"; }

◆ urlAllUntagged()

static QString KisAllTagsModel::urlAllUntagged ( )
inlinestatic

Definition at line 93 of file KisTagModel.h.

93{ return "All Untagged"; }

Friends And Related Symbol Documentation

◆ KisResourceModelProvider

friend class KisResourceModelProvider
friend

Definition at line 102 of file KisTagModel.h.

◆ KisTagModel

friend class KisTagModel
friend

Definition at line 104 of file KisTagModel.h.

◆ TestTagResourceModel

friend class TestTagResourceModel
friend

Definition at line 103 of file KisTagModel.h.

Member Data Documentation

◆ d

Private* const KisAllTagsModel::d
private

Definition at line 117 of file KisTagModel.h.


The documentation for this class was generated from the following files: