File indexing completed on 2024-04-28 11:43:37
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"