1/*
2 SPDX-FileCopyrightText: 2014 Aleix Pol Gonzalez <aleixpol@blue-systems.com>
3
4 SPDX-License-Identifier: LGPL-2.1-or-later
5*/
6
7#ifndef PURPOSEALTERNATIVESMODEL_H
8#define PURPOSEALTERNATIVESMODEL_H
9
10#include <QAbstractListModel>
11#include <QJsonObject>
12
13#include <purpose/purpose_export.h>
14
15namespace Purpose
16{
17class Configuration;
18class AlternativesModelPrivate;
19
20/*!
21 * \class Purpose::AlternativesModel
22 * \inheaderfile Purpose/AlternativesModel
23 * \inmodule Purpose
24 *
25 * \brief Interface for client applications to share data.
26 *
27 * Lists all the alternatives to share a specified type of data then provides
28 * a method to trigger a job.
29 */
30class PURPOSE_EXPORT AlternativesModel : public QAbstractListModel
31{
32 Q_OBJECT
33 /*!
34 * \property Purpose::AlternativesModel::pluginType
35 *
36 * \brief Specifies the type of the plugin we want to list.
37 *
38 * \sa inputData
39 */
40 Q_PROPERTY(QString pluginType READ pluginType WRITE setPluginType NOTIFY pluginTypeChanged)
41
42 /*!
43 * \property Purpose::AlternativesModel::inputData
44 *
45 * \brief Specifies the information that will be given to the plugin once it's started.
46 *
47 * \note some plugins might be filtered out based on this setting
48 */
49 Q_PROPERTY(QJsonObject inputData READ inputData WRITE setInputData NOTIFY inputDataChanged)
50
51 /*!
52 * \property Purpose::AlternativesModel::disabledPlugins
53 *
54 * \brief Provides a list of plugin names to have filtered out.
55 */
56 Q_PROPERTY(QStringList disabledPlugins READ disabledPlugins WRITE setDisabledPlugins NOTIFY disabledPluginsChanged)
57public:
58 /*!
59 * \value PluginIdRole
60 * \value IconNameRole
61 * \value ActionDisplayRole
62 */
63 enum Roles {
64 PluginIdRole = Qt::UserRole + 1,
65 IconNameRole,
66 ActionDisplayRole,
67 };
68
69 /*!
70 * Constructs an alternatives model with the given \a parent.
71 */
72 explicit AlternativesModel(QObject *parent = nullptr);
73
74 ~AlternativesModel() override;
75
76 QJsonObject inputData() const;
77 void setInputData(const QJsonObject &input);
78
79 QString pluginType() const;
80 void setPluginType(const QString &pluginType);
81
82 QStringList disabledPlugins() const;
83 void setDisabledPlugins(const QStringList &pluginIds);
84
85 /*!
86 * This shouldn't require to have the job actually running on the same process as the app.
87 *
88 * \a row specifies the alternative to be used.
89 *
90 * Returns the configuration instance that will offer the job.
91 */
92 Q_SCRIPTABLE Purpose::Configuration *configureJob(int row);
93
94 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
95 int rowCount(const QModelIndex &parent = QModelIndex()) const override;
96 QHash<int, QByteArray> roleNames() const override;
97
98Q_SIGNALS:
99 void inputDataChanged();
100 void pluginTypeChanged();
101 void disabledPluginsChanged();
102
103private:
104 PURPOSE_NO_EXPORT void initializeModel();
105
106 AlternativesModelPrivate *const d_ptr;
107 Q_DECLARE_PRIVATE(AlternativesModel)
108};
109
110}
111
112#endif
113

source code of purpose/src/alternativesmodel.h