1 /* 2 SPDX-FileCopyrightText: 2015 Martin Klapetek <mklapetek@kde.org> 3 4 SPDX-License-Identifier: GPL-2.0-or-later 5 */ 6 7 #ifndef EVENTPLUGINSMANAGER_H 8 #define EVENTPLUGINSMANAGER_H 9 10 #include <QMap> 11 #include <QObject> 12 #include <QStringList> 13 14 namespace CalendarEvents 15 { 16 class CalendarEventsPlugin; 17 class EventData; 18 } 19 class EventPluginsModel; 20 class QAbstractListModel; 21 22 class EventPluginsManager : public QObject 23 { 24 Q_OBJECT 25 Q_PROPERTY(QAbstractListModel *model READ pluginsModel NOTIFY pluginsChanged) 26 Q_PROPERTY(QStringList enabledPlugins READ enabledPlugins WRITE setEnabledPlugins NOTIFY pluginsChanged) 27 28 public: 29 explicit EventPluginsManager(QObject *parent = nullptr); 30 ~EventPluginsManager() override; 31 32 QList<CalendarEvents::CalendarEventsPlugin *> plugins() const; 33 QAbstractListModel *pluginsModel() const; 34 35 // This is a helper function to set which plugins 36 // are enabled without needing to go through setEnabledPlugins 37 // which also loads the plugins; from the Applet config 38 // the plugins are not required to be actually loaded 39 Q_INVOKABLE void populateEnabledPluginsList(const QStringList &pluginsList); 40 41 void setEnabledPlugins(QStringList &pluginsList); 42 QStringList enabledPlugins() const; 43 44 Q_SIGNALS: 45 void pluginsChanged(); 46 47 // These three signals below are used for relaying the 48 // plugin signals so that the EventPluginsManager don't 49 // have to worry about connecting to newly loaded plugins 50 void dataReady(const QMultiHash<QDate, CalendarEvents::EventData> &data); 51 void eventModified(const CalendarEvents::EventData &modifiedEvent); 52 void eventRemoved(const QString &uid); 53 54 private: 55 void loadPlugin(const QString &absolutePath); 56 57 friend class EventPluginsModel; 58 EventPluginsModel *m_model = nullptr; 59 QList<CalendarEvents::CalendarEventsPlugin *> m_plugins; 60 struct PluginData { 61 QString name; 62 QString desc; 63 QString icon; 64 QString configUi; 65 }; 66 QMap<QString, PluginData> m_availablePlugins; 67 QStringList m_enabledPlugins; 68 }; 69 70 #endif 71