File indexing completed on 2024-05-12 15:59:15

0001 /*
0002  *  SPDX-FileCopyrightText: 2008 Cyrille Berger <cberger@cberger.net>
0003  *
0004  *  SPDX-License-Identifier: LGPL-2.1-or-later
0005  */
0006 
0007 #include "kis_meta_data_filter_registry_model.h"
0008 #include "kis_debug.h"
0009 #include <QStringList>
0010 
0011 using namespace KisMetaData;
0012 
0013 struct Q_DECL_HIDDEN FilterRegistryModel::Private {
0014     QList<bool> enabled;
0015 };
0016 
0017 FilterRegistryModel::FilterRegistryModel()
0018         : KoGenericRegistryModel<const Filter*>(FilterRegistry::instance()), d(new Private)
0019 {
0020     QList<QString> keys = FilterRegistry::instance()->keys();
0021     for (int i = 0; i < keys.size(); i++) {
0022         d->enabled.append(FilterRegistry::instance()->get(keys[i])->defaultEnabled());
0023     }
0024 }
0025 
0026 FilterRegistryModel::~FilterRegistryModel()
0027 {
0028     delete d;
0029 }
0030 
0031 QVariant FilterRegistryModel::data(const QModelIndex &index, int role) const
0032 {
0033     if (index.isValid()) {
0034         if (role == Qt::CheckStateRole) {
0035             if (d->enabled[index.row()]) return Qt::Checked;
0036             else return Qt::Unchecked;
0037         } else if (role == Qt::ToolTipRole) {
0038             return get(index)->description();
0039         }
0040     }
0041     return KoGenericRegistryModel<const Filter*>::data(index, role);
0042 }
0043 
0044 bool FilterRegistryModel::setData(const QModelIndex & index, const QVariant & value, int role)
0045 {
0046     if (index.isValid()) {
0047         if (role == Qt::CheckStateRole) {
0048             d->enabled[index.row()] = value.toBool();
0049         }
0050     }
0051     return KoGenericRegistryModel<const Filter*>::setData(index, value, role);
0052 }
0053 
0054 Qt::ItemFlags FilterRegistryModel::flags(const QModelIndex &) const
0055 {
0056     return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsUserCheckable;
0057 }
0058 
0059 QList<const Filter*> FilterRegistryModel::enabledFilters() const
0060 {
0061     QList<const Filter*> enabledFilters;
0062     QList<QString> keys = FilterRegistry::instance()->keys();
0063     for (int i = 0; i < keys.size(); i++) {
0064         if (d->enabled[i]) {
0065             enabledFilters.append(FilterRegistry::instance()->get(keys[i]));
0066         }
0067     }
0068     return enabledFilters;
0069 }
0070 
0071 void FilterRegistryModel::setEnabledFilters(const QStringList &enabledFilters)
0072 {
0073     d->enabled.clear();
0074     QList<QString> keys = FilterRegistry::instance()->keys();
0075     Q_FOREACH (const QString &key, keys) {
0076         d->enabled.append(enabledFilters.contains(key));
0077     }
0078 
0079 }