File indexing completed on 2024-04-28 07:45:15
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"