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

#include <kis_filters_model.h>

+ Inheritance diagram for KisFiltersModel:

Classes

struct  Private
 

Public Member Functions

int columnCount (const QModelIndex &parent=QModelIndex()) const override
 
QVariant data (const QModelIndex &index, int role=Qt::DisplayRole) const override
 
Qt::ItemFlags flags (const QModelIndex &index) const override
 
QModelIndex index (int row, int column, const QModelIndex &parent=QModelIndex()) const override
 
QModelIndex indexForFilter (const QString &id)
 
const KisFilterindexToFilter (const QModelIndex &idx)
 
 KisFiltersModel (bool showAll, KisPaintDeviceSP thumb)
 KisFiltersModel create a new filters model.
 
QModelIndex parent (const QModelIndex &child) const override
 
int rowCount (const QModelIndex &parent=QModelIndex()) const override
 
 ~KisFiltersModel () override
 

Private Attributes

Private *const d
 

Detailed Description

Definition at line 22 of file kis_filters_model.h.

Constructor & Destructor Documentation

◆ KisFiltersModel()

KisFiltersModel::KisFiltersModel ( bool showAll,
KisPaintDeviceSP thumb )

KisFiltersModel create a new filters model.

Parameters
showAllif true, show all filters, if false, do not show filters that don't work in adjustment layers
thumbthe thumbnail image that is filtered

Definition at line 58 of file kis_filters_model.cc.

59 : d(new Private)
60{
61 d->thumb = thumb;
63 keys.sort();
64
65 Q_FOREACH (const QString &filterName, keys) {
66 KisFilterSP filter = KisFilterRegistry::instance()->get(filterName);
67 if (!showAll && !filter->supportsAdjustmentLayers()) {
68 continue;
69 }
70 Q_ASSERT(filter);
71 if (!d->categories.contains(filter->menuCategory().id())) {
72 Private::Category cat;
73 cat.id = filter->menuCategory().id();
74 cat.name = filter->menuCategory().name();
75 d->categories[ cat.id ] = cat;
76 d->categoriesKeys.append(cat.id);
77 }
78 Private::Filter filt;
79 filt.id = filter->id();
80 filt.name = filter->name();
81 filt.filter = filter;
82 d->categories[filter->menuCategory().id()].filters.append(filt);
83 }
84 std::sort(d->categoriesKeys.begin(), d->categoriesKeys.end());
85
86}
static KisFilterRegistry * instance()
Private *const d
T get(const QString &id) const
QList< QString > keys() const
QString name() const
Definition KoID.cpp:68
QString id() const
Definition KoID.cpp:63
QHash< QString, Category > categories
QList< QString > categoriesKeys

References KisFiltersModel::Private::categories, KisFiltersModel::Private::categoriesKeys, d, KisFiltersModel::Private::Filter::filter, KoGenericRegistry< T >::get(), KoID::id(), KisBaseProcessor::id, KisFiltersModel::Private::Filter::id, KisFiltersModel::Private::Category::id, KisFilterRegistry::instance(), KoGenericRegistry< T >::keys(), KisBaseProcessor::menuCategory(), KoID::name(), KisBaseProcessor::name(), KisFiltersModel::Private::Node::name, KisBaseProcessor::supportsAdjustmentLayers, and KisFiltersModel::Private::thumb.

◆ ~KisFiltersModel()

KisFiltersModel::~KisFiltersModel ( )
override

Definition at line 88 of file kis_filters_model.cc.

89{
90 delete d;
91}

References d.

Member Function Documentation

◆ columnCount()

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

Definition at line 103 of file kis_filters_model.cc.

104{
105 Q_UNUSED(parent);
106 return 1;
107}
QModelIndex parent(const QModelIndex &child) const override

References parent().

◆ data()

QVariant KisFiltersModel::data ( const QModelIndex & index,
int role = Qt::DisplayRole ) const
override

Definition at line 157 of file kis_filters_model.cc.

158{
159 if (index.isValid()) {
160 if (role == Qt::DisplayRole) {
161 Private::Node* node = static_cast<Private::Node*>(index.internalPointer());
162 return QVariant(node->displayRole());
163 }
164 }
165 return QVariant();
166}
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override

References KisFiltersModel::Private::Node::displayRole(), and index().

◆ flags()

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

Definition at line 168 of file kis_filters_model.cc.

169{
170 if (!index.isValid()) return QFlags<Qt::ItemFlag>();
171
172 Private::Node* node = static_cast<Private::Node*>(index.internalPointer());
173 Private::Filter* filter = dynamic_cast<Private::Filter*>(node);
174 if (filter) {
175 return Qt::ItemIsSelectable | Qt::ItemIsEnabled;
176 } else {
177 return Qt::ItemIsEnabled;
178 }
179}

References index().

◆ index()

QModelIndex KisFiltersModel::index ( int row,
int column,
const QModelIndex & parent = QModelIndex() ) const
override

Definition at line 133 of file kis_filters_model.cc.

134{
135// dbgKrita << parent.isValid() << row << Qt::endl;
136 if (parent.isValid()) {
137 Private::Category* category = static_cast<Private::Category*>(parent.internalPointer());
138 return createIndex(row, column, &category->filters[row]);
139 } else {
140 return createIndex(row, column, &d->categories[ d->categoriesKeys[row] ]);
141 }
142}

References KisFiltersModel::Private::categories, KisFiltersModel::Private::categoriesKeys, d, KisFiltersModel::Private::Category::filters, and parent().

◆ indexForFilter()

QModelIndex KisFiltersModel::indexForFilter ( const QString & id)

Definition at line 109 of file kis_filters_model.cc.

110{
111 for (int i = 0; i < d->categoriesKeys.size(); i++) {
113 for (int j = 0; j < category.filters.size(); j++) {
114 KisFiltersModel::Private::Filter& filter = category.filters[j];
115 if (filter.id == id) {
116 return index(j, i, index(i , 0, QModelIndex()));
117 }
118 }
119 }
120 return QModelIndex();
121}

References KisFiltersModel::Private::categories, KisFiltersModel::Private::categoriesKeys, d, KisFiltersModel::Private::Category::filters, KisFiltersModel::Private::Filter::id, and index().

◆ indexToFilter()

const KisFilter * KisFiltersModel::indexToFilter ( const QModelIndex & idx)

Definition at line 123 of file kis_filters_model.cc.

124{
125 Private::Node* node = static_cast<Private::Node*>(idx.internalPointer());
126 Private::Filter* filter = dynamic_cast<Private::Filter*>(node);
127 if (filter) {
128 return filter->filter;
129 }
130 return 0;
131}

References KisFiltersModel::Private::Filter::filter.

◆ parent()

QModelIndex KisFiltersModel::parent ( const QModelIndex & child) const
override

Definition at line 144 of file kis_filters_model.cc.

145{
146 if (!child.isValid())
147 return QModelIndex();
148 Private::Node* node = static_cast<Private::Node*>(child.internalPointer());
149 Private::Filter* filter = dynamic_cast<Private::Filter*>(node);
150 if (filter) {
151 QString catId = filter->filter->menuCategory().id();
152 return createIndex(d->categoriesKeys.indexOf(catId) , 0, &d->categories[ catId ]);
153 }
154 return QModelIndex(); // categories don't have parents
155}

References KisFiltersModel::Private::categories, KisFiltersModel::Private::categoriesKeys, d, KisFiltersModel::Private::Filter::filter, KoID::id(), and KisBaseProcessor::menuCategory().

◆ rowCount()

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

Definition at line 93 of file kis_filters_model.cc.

94{
95 if (parent.isValid()) {
96 Private::Node* node = static_cast<Private::Node*>(parent.internalPointer());
97 return node->childrenCount();
98 } else {
99 return d->categoriesKeys.count();
100 }
101}

References KisFiltersModel::Private::categoriesKeys, KisFiltersModel::Private::Node::childrenCount(), d, and parent().

Member Data Documentation

◆ d

Private* const KisFiltersModel::d
private

Definition at line 43 of file kis_filters_model.h.


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