1 | /* |
2 | * This file is part of the KDE Milou Project |
3 | * SPDX-FileCopyrightText: 2019 Kai Uwe Broulik <kde@broulik.de> |
4 | * |
5 | * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL |
6 | * |
7 | */ |
8 | |
9 | #pragma once |
10 | |
11 | #include <KConfigGroup> |
12 | #include <QAbstractItemModel> |
13 | #include <QHash> |
14 | #include <QString> |
15 | |
16 | #include <KRunner/QueryMatch> |
17 | |
18 | namespace KRunner |
19 | { |
20 | class RunnerManager; |
21 | } |
22 | |
23 | namespace KRunner |
24 | { |
25 | class RunnerResultsModel : public QAbstractItemModel |
26 | { |
27 | Q_OBJECT |
28 | |
29 | public: |
30 | explicit RunnerResultsModel(const KConfigGroup &configGroup, const KConfigGroup &stateConfigGroup, QObject *parent = nullptr); |
31 | |
32 | QString queryString() const; |
33 | void setQueryString(const QString &queryString, const QString &runner); |
34 | Q_SIGNAL void queryStringChanged(const QString &queryString); |
35 | |
36 | void setRunnerManager(KRunner::RunnerManager *manager); |
37 | Q_SIGNAL void runnerManagerChanged(); |
38 | |
39 | /* |
40 | * Clears the model content and resets the runner context, i.e. no new items will appear. |
41 | */ |
42 | void clear(); |
43 | |
44 | bool run(const QModelIndex &idx); |
45 | bool runAction(const QModelIndex &idx, int actionNumber); |
46 | |
47 | int columnCount(const QModelIndex &parent) const override; |
48 | int rowCount(const QModelIndex &parent) const override; |
49 | |
50 | QVariant data(const QModelIndex &index, int role) const override; |
51 | |
52 | QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; |
53 | QModelIndex parent(const QModelIndex &child) const override; |
54 | |
55 | KRunner::RunnerManager *runnerManager() const; |
56 | KRunner::QueryMatch fetchMatch(const QModelIndex &idx) const; |
57 | |
58 | QStringList m_favoriteIds; |
59 | Q_SIGNALS: |
60 | void queryStringChangeRequested(const QString &queryString, int pos); |
61 | |
62 | void matchesChanged(); |
63 | |
64 | private: |
65 | void onMatchesChanged(const QList<KRunner::QueryMatch> &matches); |
66 | |
67 | KRunner::RunnerManager *m_manager = nullptr; |
68 | QString m_queryString; |
69 | QString m_prevRunner; |
70 | bool m_hasMatches = false; |
71 | QStringList m_categories; |
72 | QHash<QString /*category*/, QList<KRunner::QueryMatch>> m_matches; |
73 | }; |
74 | |
75 | } // namespace Milou |
76 | |