Warning, file /frameworks/knewstuff/src/qtquick/searchpresetmodel.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: 2021 Wolthera van Hövell tot Westerflier <griffinvalley@gmail.com>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #include "searchpresetmodel.h"
0008 #include "engine.h"
0009 
0010 #include "knewstuffquick_debug.h"
0011 
0012 #include <KLocalizedString>
0013 
0014 class SearchPresetModelPrivate
0015 {
0016 public:
0017     SearchPresetModelPrivate()
0018     {
0019     }
0020     KNSCore::Engine *engine;
0021 };
0022 
0023 SearchPresetModel::SearchPresetModel(Engine *parent)
0024     : QAbstractListModel(parent)
0025     , d(new SearchPresetModelPrivate)
0026 {
0027     d->engine = qobject_cast<KNSCore::Engine *>(parent->engine());
0028     connect(d->engine, &KNSCore::Engine::signalSearchPresetsLoaded, this, [this]() {
0029         beginResetModel();
0030         endResetModel();
0031     });
0032 }
0033 
0034 SearchPresetModel::~SearchPresetModel() = default;
0035 
0036 QHash<int, QByteArray> SearchPresetModel::roleNames() const
0037 {
0038     static const QHash<int, QByteArray> roles{{DisplayNameRole, "displayName"}, {IconRole, "iconName"}};
0039     return roles;
0040 }
0041 
0042 QVariant SearchPresetModel::data(const QModelIndex &index, int role) const
0043 {
0044     QVariant result;
0045     if (index.isValid() && checkIndex(index)) {
0046         const QList<KNSCore::Provider::SearchPreset> presets = d->engine->searchPresets();
0047         const KNSCore::Provider::SearchPreset preset = presets[index.row()];
0048 
0049         if (role == DisplayNameRole) {
0050             QString name = preset.displayName;
0051 
0052             if (name.isEmpty()) {
0053                 switch (preset.type) {
0054                 case KNSCore::Provider::SearchPresetTypes::GoBack:
0055                     name = i18nc("Knewstuff5", "Back");
0056                     break;
0057                 case KNSCore::Provider::SearchPresetTypes::Popular:
0058                     name = i18nc("Knewstuff5", "Popular");
0059                     break;
0060                 case KNSCore::Provider::SearchPresetTypes::Featured:
0061                     name = i18nc("Knewstuff5", "Featured");
0062                     break;
0063                 case KNSCore::Provider::SearchPresetTypes::Start:
0064                     name = i18nc("Knewstuff5", "Restart");
0065                     break;
0066                 case KNSCore::Provider::SearchPresetTypes::New:
0067                     name = i18nc("Knewstuff5", "New");
0068                     break;
0069                 case KNSCore::Provider::SearchPresetTypes::Root:
0070                     name = i18nc("Knewstuff5", "Home");
0071                     break;
0072                 case KNSCore::Provider::SearchPresetTypes::Shelf:
0073                     name = i18nc("Knewstuff5", "Shelf");
0074                     break;
0075                 case KNSCore::Provider::SearchPresetTypes::FolderUp:
0076                     name = i18nc("Knewstuff5", "Up");
0077                     break;
0078                 case KNSCore::Provider::SearchPresetTypes::Recommended:
0079                     name = i18nc("Knewstuff5", "Recommended");
0080                     break;
0081                 case KNSCore::Provider::SearchPresetTypes::Subscription:
0082                     name = i18nc("Knewstuff5", "Subscriptions");
0083                     break;
0084                 case KNSCore::Provider::SearchPresetTypes::AllEntries:
0085                     name = i18nc("Knewstuff5", "All Entries");
0086                     break;
0087                 default:
0088                     name = i18nc("Knewstuff5", "Search Preset: %1", preset.request.searchTerm);
0089                 }
0090             }
0091 
0092             result.setValue(name);
0093         } else if (role == IconRole) {
0094             QString name = preset.iconName;
0095 
0096             if (name.isEmpty()) {
0097                 switch (preset.type) {
0098                 case KNSCore::Provider::SearchPresetTypes::GoBack:
0099                     name = QStringLiteral("arrow-left");
0100                     break;
0101                 case KNSCore::Provider::SearchPresetTypes::Popular:
0102                 case KNSCore::Provider::SearchPresetTypes::Featured:
0103                 case KNSCore::Provider::SearchPresetTypes::Recommended:
0104                     name = QStringLiteral("rating");
0105                     break;
0106                 case KNSCore::Provider::SearchPresetTypes::New:
0107                     name = QStringLiteral("change-date-symbolic");
0108                     break;
0109                 case KNSCore::Provider::SearchPresetTypes::Start:
0110                     name = QStringLiteral("start-over");
0111                     break;
0112                 case KNSCore::Provider::SearchPresetTypes::Root:
0113                     name = QStringLiteral("go-home");
0114                     break;
0115                 case KNSCore::Provider::SearchPresetTypes::Shelf:
0116                 case KNSCore::Provider::SearchPresetTypes::Subscription:
0117                     name = QStringLiteral("bookmark");
0118                     break;
0119                 case KNSCore::Provider::SearchPresetTypes::FolderUp:
0120                     name = QStringLiteral("arrow-up");
0121                     break;
0122                 default:
0123                     name = QStringLiteral("search");
0124                 }
0125             }
0126 
0127             result.setValue(name);
0128         }
0129     }
0130     return result;
0131 }
0132 
0133 int SearchPresetModel::rowCount(const QModelIndex &parent) const
0134 {
0135     if (parent.isValid()) {
0136         return 0;
0137     }
0138     return d->engine->searchPresets().count();
0139 }
0140 
0141 void SearchPresetModel::loadSearch(const QModelIndex &index)
0142 {
0143     if (index.row() >= rowCount() || !index.isValid()) {
0144         qCWarning(KNEWSTUFFQUICK) << "index SearchPresetModel::loadSearch invalid" << index;
0145         return;
0146     }
0147     const KNSCore::Provider::SearchPreset preset = d->engine->searchPresets().at(index.row());
0148     d->engine->setSearchTerm(preset.request.searchTerm);
0149 }
0150 
0151 #include "moc_searchpresetmodel.cpp"