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

#include <KisTagModel.h>

+ Inheritance diagram for KisTagModel:

Classes

struct  Private
 

Public Types

enum  StorageFilter { ShowInactiveStorages = 0 , ShowActiveStorages , ShowAllStorages }
 
enum  TagFilter { ShowInactiveTags = 0 , ShowActiveTags , ShowAllTags }
 

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
 
QModelIndex indexForTag (KisTagSP tag) const override
 
 KisTagModel (const QString &type, QObject *parent=0)
 
bool renameTag (const KisTagSP tag, const QString &newName, const bool allowOverwrite) override
 
void setStorageFilter (StorageFilter filter)
 
bool setTagActive (const KisTagSP tag) override
 
void setTagFilter (TagFilter filter)
 
bool setTagInactive (const KisTagSP tag) override
 
KisTagSP tagForIndex (QModelIndex index=QModelIndex()) const override
 
KisTagSP tagForUrl (const QString &url) const override
 Retrieve a tag by url.
 
 ~KisTagModel () override
 
- Public Member Functions inherited from KisAbstractTagModel
virtual ~KisAbstractTagModel ()
 

Protected Member Functions

bool filterAcceptsRow (int source_row, const QModelIndex &source_parent) const override
 
bool lessThan (const QModelIndex &source_left, const QModelIndex &source_right) const override
 

Private Attributes

Private *const d
 

Friends

class DlgDbExplorer
 
class TestTagModel
 

Detailed Description

Definition at line 121 of file KisTagModel.h.

Member Enumeration Documentation

◆ StorageFilter

Enumerator
ShowInactiveStorages 
ShowActiveStorages 
ShowAllStorages 

Definition at line 140 of file KisTagModel.h.

◆ TagFilter

Enumerator
ShowInactiveTags 
ShowActiveTags 
ShowAllTags 

Definition at line 132 of file KisTagModel.h.

132 {
136 };

Constructor & Destructor Documentation

◆ KisTagModel()

KisTagModel::KisTagModel ( const QString & type,
QObject * parent = 0 )

Definition at line 544 of file KisTagModel.cpp.

545 : QSortFilterProxyModel(parent)
546 , d(new Private())
547{
548 setSourceModel(KisResourceModelProvider::tagModel(type));
550}
static KisAllTagsModel * tagModel(const QString &resourceType)
Private *const d

References KisAllTagsModel::Name, and KisResourceModelProvider::tagModel().

◆ ~KisTagModel()

KisTagModel::~KisTagModel ( )
override

Definition at line 552 of file KisTagModel.cpp.

553{
554 delete d;
555}

References d.

Member Function Documentation

◆ addTag() [1/2]

bool KisTagModel::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 612 of file KisTagModel.cpp.

613{
614 KisAbstractTagModel *source = dynamic_cast<KisAbstractTagModel*>(sourceModel());
615 if (source) {
616 return source->addTag(tag, allowOverwrite, taggedResources) ;
617 }
618 return false;
619}
KisMagneticGraph::vertex_descriptor source(typename KisMagneticGraph::edge_descriptor e, KisMagneticGraph g)

References source().

◆ addTag() [2/2]

KisTagSP KisTagModel::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 593 of file KisTagModel.cpp.

594{
595 KisAbstractTagModel *source = dynamic_cast<KisAbstractTagModel*>(sourceModel());
596 if (source) {
597 return source->addTag(tagName, allowOverwrite, taggedResources);
598 }
599 return 0;
600}

References source().

◆ changeTagActive()

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

Implements KisAbstractTagModel.

Definition at line 649 of file KisTagModel.cpp.

650{
651 KisAbstractTagModel *source = dynamic_cast<KisAbstractTagModel*>(sourceModel());
652 if (source) {
653 return source->changeTagActive(tag, active);
654 }
655 return false;
656}

References source().

◆ filterAcceptsRow()

bool KisTagModel::filterAcceptsRow ( int source_row,
const QModelIndex & source_parent ) const
overrideprotected

Definition at line 659 of file KisTagModel.cpp.

660{
662 return true;
663 }
664
665 QModelIndex idx = sourceModel()->index(source_row, 0, source_parent);
666 if (!idx.isValid()) {
667 return false;
668 }
669 int tagId = sourceModel()->data(idx, Qt::UserRole + KisAllTagsModel::Id).toInt();
670
671 if (tagId < 0) {
672 return true;
673 }
674
675 TagFilter tagActive = (TagFilter)sourceModel()->data(idx, Qt::UserRole + KisAllTagsModel::Active).toInt();
676
677 StorageFilter storageActive = ShowAllStorages;
678
680 return (tagActive == d->tagFilter);
681 }
682
683 {
684 if (tagId > 0) {
685 QSqlQuery q;
686 const bool r = q.prepare("SELECT count(*)\n"
687 "FROM tags_storages\n"
688 ", storages\n"
689 "WHERE tags_storages.tag_id = :tag_id\n"
690 "AND tags_storages.storage_id = storages.id\n"
691 "AND storages.active = 1\n");
692 if (!r) {
693 qWarning() << "Could not execute tags in storages query" << q.lastError();
694 return true;
695 }
696
697 q.bindValue(":tag_id", tagId);
698
699 if (!q.exec()) {
700 qWarning() << "Could not execute tags in storages query" << q.lastError() << q.boundValues();
701 return true;
702 }
703 else {
704 q.first();
705
706 if (q.value(0).toInt() > 0) {
707 storageActive = ShowActiveStorages;
708 }
709 }
710 }
711 }
712
713 if (d->tagFilter == ShowAllTags) {
714 return (storageActive == d->storageFilter);
715 }
716
717 return ((storageActive == d->storageFilter) && (tagActive == d->tagFilter));
718}
StorageFilter storageFilter

References KisAllTagsModel::Active, d, KisAllTagsModel::Id, ShowActiveStorages, ShowAllStorages, ShowAllTags, KisTagModel::Private::storageFilter, and KisTagModel::Private::tagFilter.

◆ indexForTag()

QModelIndex KisTagModel::indexForTag ( KisTagSP tag) const
overridevirtual

Implements KisAbstractTagModel.

Definition at line 573 of file KisTagModel.cpp.

574{
575 KisAbstractTagModel *source = dynamic_cast<KisAbstractTagModel*>(sourceModel());
576 if (source) {
577 return mapFromSource(source->indexForTag(tag));
578 }
579 return QModelIndex();
580
581}

References source().

◆ lessThan()

bool KisTagModel::lessThan ( const QModelIndex & source_left,
const QModelIndex & source_right ) const
overrideprotected

Definition at line 720 of file KisTagModel.cpp.

721{
722 const bool leftIsFakeRow = source_left.row() < s_fakeRowsCount;
723 const bool rightIsFakeRow = source_right.row() < s_fakeRowsCount;
724 // Always sort fake rows ("All" and "All Untagged") above the rest.
725 if (leftIsFakeRow && rightIsFakeRow) {
726 return source_left.row() < source_right.row();
727 } else if (leftIsFakeRow) {
728 return true;
729 } else if (rightIsFakeRow) {
730 return false;
731 } else {
732 QString nameLeft = sourceModel()->data(source_left, Qt::UserRole + KisAllTagsModel::Name).toString().toLower();
733 QString nameRight = sourceModel()->data(source_right, Qt::UserRole + KisAllTagsModel::Name).toString().toLower();
734 return (nameLeft < nameRight);
735 }
736}
static int s_fakeRowsCount

References KisAllTagsModel::Name, and s_fakeRowsCount.

◆ renameTag()

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

Implements KisAbstractTagModel.

Definition at line 640 of file KisTagModel.cpp.

641{
642 KisAbstractTagModel *source = dynamic_cast<KisAbstractTagModel*>(sourceModel());
643 if (source) {
644 return source->renameTag(tag, newName, allowOverwrite);
645 }
646 return false;
647}

References source().

◆ setStorageFilter()

void KisTagModel::setStorageFilter ( KisTagModel::StorageFilter filter)

Definition at line 565 of file KisTagModel.cpp.

566{
567 if (d->storageFilter != filter) {
568 d->storageFilter = filter;
569 invalidateFilter();
570 }
571}

References d, and KisTagModel::Private::storageFilter.

◆ setTagActive()

bool KisTagModel::setTagActive ( const KisTagSP tag)
overridevirtual

Implements KisAbstractTagModel.

Definition at line 630 of file KisTagModel.cpp.

631{
632 KisAbstractTagModel *source = dynamic_cast<KisAbstractTagModel*>(sourceModel());
633 if (source) {
634 return source->setTagActive(tag) ;
635 }
636 return false;
637
638}

References source().

◆ setTagFilter()

void KisTagModel::setTagFilter ( KisTagModel::TagFilter filter)

Definition at line 557 of file KisTagModel.cpp.

558{
559 if (d->tagFilter != filter) {
560 d->tagFilter = filter;
561 invalidateFilter();
562 }
563}

References d, and KisTagModel::Private::tagFilter.

◆ setTagInactive()

bool KisTagModel::setTagInactive ( const KisTagSP tag)
overridevirtual

Implements KisAbstractTagModel.

Definition at line 621 of file KisTagModel.cpp.

622{
623 KisAbstractTagModel *source = dynamic_cast<KisAbstractTagModel*>(sourceModel());
624 if (source) {
625 return source->setTagInactive(tag) ;
626 }
627 return false;
628}

References source().

◆ tagForIndex()

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

Implements KisAbstractTagModel.

Definition at line 583 of file KisTagModel.cpp.

584{
585 KisAbstractTagModel *source = dynamic_cast<KisAbstractTagModel*>(sourceModel());
586 if (source) {
587 return source->tagForIndex(mapToSource(index));
588 }
589 return 0;
590}

References source().

◆ tagForUrl()

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

Retrieve a tag by url.

Implements KisAbstractTagModel.

Definition at line 602 of file KisTagModel.cpp.

603{
604 KisAbstractTagModel *source = dynamic_cast<KisAbstractTagModel*>(sourceModel());
605 if (source) {
606 return source->tagForUrl(url);
607 }
608 return 0;
609}

References source().

Friends And Related Symbol Documentation

◆ DlgDbExplorer

friend class DlgDbExplorer
friend

Definition at line 168 of file KisTagModel.h.

◆ TestTagModel

friend class TestTagModel
friend

Definition at line 169 of file KisTagModel.h.

Member Data Documentation

◆ d

Private* const KisTagModel::d
private

Definition at line 173 of file KisTagModel.h.


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