1 /* 2 SPDX-FileCopyrightText: 2012 Aurélien Gâteau <agateau@kde.org> 3 SPDX-FileCopyrightText: 2014 Eike Hein <hein@kde.org> 4 5 SPDX-License-Identifier: GPL-2.0-or-later 6 */ 7 8 #pragma once 9 10 #include "abstractmodel.h" 11 12 #include <QAbstractListModel> 13 #include <QTimer> 14 15 #include <KRunner/QueryMatch> 16 17 namespace Plasma 18 { 19 class RunnerManager; 20 } 21 22 class AbstractModel; 23 class RunnerMatchesModel; 24 25 class RunnerModel : public QAbstractListModel 26 { 27 Q_OBJECT 28 29 Q_PROPERTY(int count READ count NOTIFY countChanged) 30 Q_PROPERTY(AbstractModel *favoritesModel READ favoritesModel WRITE setFavoritesModel NOTIFY favoritesModelChanged) 31 Q_PROPERTY(QObject *appletInterface READ appletInterface WRITE setAppletInterface NOTIFY appletInterfaceChanged) 32 Q_PROPERTY(QStringList runners READ runners WRITE setRunners NOTIFY runnersChanged) 33 Q_PROPERTY(QString query READ query WRITE setQuery NOTIFY queryChanged) 34 Q_PROPERTY(bool mergeResults READ mergeResults WRITE setMergeResults NOTIFY mergeResultsChanged) 35 Q_PROPERTY(bool deleteWhenEmpty READ deleteWhenEmpty WRITE setDeleteWhenEmpty NOTIFY deleteWhenEmptyChanged) 36 37 public: 38 explicit RunnerModel(QObject *parent = nullptr); 39 ~RunnerModel() override; 40 41 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; 42 43 QHash<int, QByteArray> roleNames() const override; 44 int rowCount(const QModelIndex &parent = QModelIndex()) const override; 45 int count() const; 46 47 Q_INVOKABLE QObject *modelForRow(int row); 48 49 QStringList runners() const; 50 void setRunners(const QStringList &runners); 51 52 QString query() const; 53 void setQuery(const QString &query); 54 55 AbstractModel *favoritesModel() const; 56 void setFavoritesModel(AbstractModel *model); 57 58 QObject *appletInterface() const; 59 void setAppletInterface(QObject *appletInterface); 60 61 bool mergeResults() const; 62 void setMergeResults(bool merge); 63 64 bool deleteWhenEmpty() const; 65 void setDeleteWhenEmpty(bool deleteWhenEmpty); 66 67 Q_SIGNALS: 68 void countChanged() const; 69 void favoritesModelChanged() const; 70 void appletInterfaceChanged() const; 71 void runnersChanged() const; 72 void queryChanged() const; 73 void mergeResultsChanged() const; 74 void deleteWhenEmptyChanged(); 75 76 private Q_SLOTS: 77 void startQuery(); 78 void matchesChanged(const QList<Plasma::QueryMatch> &matches); 79 80 private: 81 void createManager(); 82 void clear(); 83 84 AbstractModel *m_favoritesModel; 85 QObject *m_appletInterface; 86 Plasma::RunnerManager *m_runnerManager; 87 QStringList m_runners; 88 QList<RunnerMatchesModel *> m_models; 89 QString m_query; 90 QTimer m_queryTimer; 91 bool m_mergeResults; 92 bool m_deleteWhenEmpty; 93 }; 94