Warning, file /frameworks/knewstuff/src/qtquick/categoriesmodel.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002     SPDX-FileCopyrightText: 2019 Dan Leinir Turthra Jensen <admin@leinir.dk>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #include "categoriesmodel.h"
0008 
0009 #include "engine.h"
0010 
0011 #include <KLocalizedString>
0012 
0013 class CategoriesModelPrivate
0014 {
0015 public:
0016     CategoriesModelPrivate()
0017     {
0018     }
0019     KNSCore::Engine *engine;
0020 };
0021 
0022 CategoriesModel::CategoriesModel(Engine *parent)
0023     : QAbstractListModel(parent)
0024     , d(new CategoriesModelPrivate)
0025 {
0026     d->engine = qobject_cast<KNSCore::Engine *>(parent->engine());
0027     connect(d->engine, &KNSCore::Engine::signalCategoriesMetadataLoded, this, [this]() {
0028         beginResetModel();
0029         endResetModel();
0030     });
0031 }
0032 
0033 CategoriesModel::~CategoriesModel() = default;
0034 
0035 QHash<int, QByteArray> CategoriesModel::roleNames() const
0036 {
0037     static const QHash<int, QByteArray> roles{{NameRole, "name"}, {IdRole, "id"}, {DisplayNameRole, "displayName"}};
0038     return roles;
0039 }
0040 
0041 int CategoriesModel::rowCount(const QModelIndex &parent) const
0042 {
0043     if (parent.isValid()) {
0044         return 0;
0045     }
0046     return d->engine->categoriesMetadata().count() + 1;
0047 }
0048 
0049 QVariant CategoriesModel::data(const QModelIndex &index, int role) const
0050 {
0051     QVariant result;
0052     const QList<KNSCore::Provider::CategoryMetadata> categoriesMetadata = d->engine->categoriesMetadata();
0053     if (index.isValid()) {
0054         if (index.row() == 0) {
0055             switch (role) {
0056             case NameRole:
0057                 result.setValue(QString());
0058                 break;
0059             case IdRole:
0060                 result.setValue(0);
0061                 break;
0062             case DisplayNameRole:
0063                 result.setValue(i18nc("The first entry in the category selection list (also the default value)", "All Categories"));
0064                 break;
0065             default:
0066                 result.setValue(QStringLiteral("Unknown role"));
0067                 break;
0068             }
0069         } else if (index.row() <= categoriesMetadata.count()) {
0070             const KNSCore::Provider::CategoryMetadata category = categoriesMetadata[index.row() - 1];
0071             switch (role) {
0072             case NameRole:
0073                 result.setValue(category.name);
0074                 break;
0075             case IdRole:
0076                 result.setValue(category.id);
0077                 break;
0078             case DisplayNameRole:
0079                 result.setValue(category.displayName);
0080                 break;
0081             default:
0082                 result.setValue(QStringLiteral("Unknown role"));
0083                 break;
0084             }
0085         }
0086     }
0087     return result;
0088 }
0089 
0090 QString CategoriesModel::idToDisplayName(const QString &id) const
0091 {
0092     QString dispName = i18nc("The string passed back in the case the requested category is not known", "Unknown Category");
0093     const auto metaData = d->engine->categoriesMetadata();
0094     for (const KNSCore::Provider::CategoryMetadata &cat : metaData) {
0095         if (cat.id == id) {
0096             dispName = cat.displayName;
0097             break;
0098         }
0099     }
0100     return dispName;
0101 }
0102 
0103 #include "moc_categoriesmodel.cpp"