File indexing completed on 2024-04-14 03:54:09

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 <KLocalizedString>
0010 
0011 CategoriesModel::CategoriesModel(KNSCore::EngineBase *parent)
0012     : QAbstractListModel(parent)
0013     , m_engine(parent)
0014 {
0015     connect(m_engine, &KNSCore::EngineBase::signalCategoriesMetadataLoded, this, [this]() {
0016         beginResetModel();
0017         endResetModel();
0018     });
0019 }
0020 
0021 CategoriesModel::~CategoriesModel() = default;
0022 
0023 QHash<int, QByteArray> CategoriesModel::roleNames() const
0024 {
0025     static const QHash<int, QByteArray> roles{{NameRole, "name"}, {IdRole, "id"}, {DisplayNameRole, "displayName"}};
0026     return roles;
0027 }
0028 
0029 int CategoriesModel::rowCount(const QModelIndex &parent) const
0030 {
0031     if (parent.isValid()) {
0032         return 0;
0033     }
0034     return m_engine->categoriesMetadata().count() + 1;
0035 }
0036 
0037 QVariant CategoriesModel::data(const QModelIndex &index, int role) const
0038 {
0039     if (!index.isValid()) {
0040         return QVariant();
0041     }
0042     const QList<KNSCore::Provider::CategoryMetadata> categoriesMetadata = m_engine->categoriesMetadata();
0043     if (index.row() == 0) {
0044         switch (role) {
0045         case NameRole:
0046             return QString();
0047         case IdRole:
0048             return 0;
0049         case DisplayNameRole:
0050             return i18nc("The first entry in the category selection list (also the default value)", "All Categories");
0051         default:
0052             return QStringLiteral("Unknown role");
0053         }
0054     } else if (index.row() <= categoriesMetadata.count()) {
0055         const KNSCore::Provider::CategoryMetadata category = categoriesMetadata[index.row() - 1];
0056         switch (role) {
0057         case NameRole:
0058             return category.name;
0059         case IdRole:
0060             return category.id;
0061         case DisplayNameRole:
0062             return category.displayName;
0063         default:
0064             return QStringLiteral("Unknown role");
0065         }
0066     }
0067     return QVariant();
0068 }
0069 
0070 QString CategoriesModel::idToDisplayName(const QString &id) const // TODO KF6 unused?
0071 {
0072     QString dispName = i18nc("The string passed back in the case the requested category is not known", "Unknown Category");
0073     const auto metaData = m_engine->categoriesMetadata();
0074     for (const KNSCore::Provider::CategoryMetadata &cat : metaData) {
0075         if (cat.id == id) {
0076             dispName = cat.displayName;
0077             break;
0078         }
0079     }
0080     return dispName;
0081 }
0082 
0083 #include "moc_categoriesmodel.cpp"