Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_composite_ops_model.cc
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2009 Cyrille Berger <cberger@cberger.net>
3 * SPDX-FileCopyrightText: 2011 Silvio Heinrich <plassy@web.de>
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 */
7
9
10#include <QApplication>
11#include <QStyle>
12#include <QStyleOptionButton>
13
14#include <KoCompositeOp.h>
16#include <kis_icon.h>
17
18#include "kis_debug.h"
19#include "kis_config.h"
20
22 static KoID category("favorites", ki18n("Favorites"));
23 return category;
24}
25
27{
29#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
30 QMapIterator<KoID, KoID> it(ops);
31#else
32 QMultiMapIterator<KoID, KoID> it(ops);
33#endif
34
35
36 while (it.hasNext()) {
37 KoID op = *it.next();
38 KoID category = it.key();
40 item->setCheckable(true);
41 }
42
44 item->setExpanded(true);
45
47}
48
50{
52#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
53 QMapIterator<KoID, KoID> it(ops);
54#else
55 QMultiMapIterator<KoID, KoID> it(ops);
56#endif
57
58
59 while (it.hasNext()) {
60 KoID op = *it.next();
61 KoID category = it.key();
63 item->setCheckable(false);
64 }
65
67}
68
70{
71 static KisCompositeOpListModel *model = 0;
72
73 if (!model) {
74 model = new KisCompositeOpListModel();
75 model->initialize();
76 }
77
78 return model;
79}
80
82{
83 for (int i = 0, size = categoriesMapper()->rowCount(); i < size; i++) {
85
86 if (!item->isCategory()) {
88 item->setEnabled(value);
89 }
90 }
91}
92
93bool KisCompositeOpListModel::setData(const QModelIndex& idx, const QVariant& value, int role)
94{
95 if (!idx.isValid()) return false;
96
97 bool result = BaseKoIDCategorizedListModel::setData(idx, value, role);
98
99 DataItem *item = categoriesMapper()->itemFromRow(idx.row());
100 Q_ASSERT(item);
101
102
103 if(role == Qt::CheckStateRole) {
104 if (item->isChecked()) {
105 addFavoriteEntry(*item->data());
106 } else {
107 removeFavoriteEntry(*item->data());
108 }
109
111 }
112
113 return result;
114}
115
116QVariant KisCompositeOpListModel::data(const QModelIndex& idx, int role) const
117{
118 if (!idx.isValid()) return QVariant();
119
120 if(role == Qt::DecorationRole) {
121 DataItem *item = categoriesMapper()->itemFromRow(idx.row());
122 Q_ASSERT(item);
123
124 if (!item->isCategory() && !item->isEnabled()) {
125 QStyle *style = QApplication::style();
126 QStyleOptionButton so;
127 QSize size = style->sizeFromContents(QStyle::CT_CheckBox, &so, QSize(), 0);
128 const QPixmap pixmap = KisIconUtils::loadIcon("warning").pixmap(size);
129 return pixmap;
130 }
131 }
132
133 return BaseKoIDCategorizedListModel::data(idx, role);
134}
135
137{
138 DataItem *item = categoriesMapper()->addEntry(favoriteCategory().name(), entry);
139 item->setCheckable(false);
140}
141
146
148{
149 KisConfig config(true);
150 Q_FOREACH (const QString &op, config.favoriteCompositeOps()) {
152
153 DataItem *item = categoriesMapper()->fetchOneEntry(entry);
154 if (item) {
155 item->setChecked(true);
156 }
157
158 addFavoriteEntry(entry);
159 }
160}
161
163{
164 QStringList list;
165 QVector<DataItem*> filteredItems =
167
168 Q_FOREACH (DataItem *item, filteredItems) {
169 list.append(item->data()->id());
170 }
171
172 KisConfig config(false);
173 config.setFavoriteCompositeOps(list);
174}
float value(const T *src, size_t ch)
DataItem * addEntry(const QString &category, const TEntry &entry)
QVector< DataItem * > itemsForCategory(const QString &category) const
DataItem * addCategory(const QString &category)
void removeEntry(const QString &category, const TEntry &entry)
DataItem * fetchOneEntry(const TEntry &entry) const
DataItem * itemFromRow(int row) const
QVariant data(const QModelIndex &idx, int role=Qt::DisplayRole) const override
int rowCount(const QModelIndex &parent) const override
bool setData(const QModelIndex &idx, const QVariant &value, int role=Qt::EditRole) override
SpecificCategoriesMapper * categoriesMapper()
bool setData(const QModelIndex &idx, const QVariant &value, int role=Qt::EditRole) override
void addFavoriteEntry(const KoID &entry)
void removeFavoriteEntry(const KoID &entry)
static KisCompositeOpListModel * sharedInstance()
QVariant data(const QModelIndex &idx, int role=Qt::DisplayRole) const override
void validate(const KoColorSpace *cs)
QStringList favoriteCompositeOps(bool defaultValue=false) const
void setFavoriteCompositeOps(const QStringList &compositeOps) const
static const KoCompositeOpRegistry & instance()
KoIDMap getLayerStylesCompositeOps() const
KoID getKoID(const QString &compositeOpID) const
bool colorSpaceHasCompositeOp(const KoColorSpace *colorSpace, const KoID &compositeOp) const
Definition KoID.h:30
QString name() const
Definition KoID.cpp:68
QIcon loadIcon(const QString &name)