File indexing completed on 2024-05-12 17:08:53

0001 /*
0002     SPDX-FileCopyrightText: 2015 Martin Klapetek <mklapetek@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include <QObject>
0010 #include <QStringList>
0011 
0012 #include <CalendarEvents/CalendarEventsPlugin>
0013 
0014 namespace CalendarEvents
0015 {
0016 class EventData;
0017 }
0018 class EventPluginsModel;
0019 class QAbstractListModel;
0020 class EventPluginsManagerPrivate;
0021 
0022 class EventPluginsManager : public QObject
0023 {
0024     Q_OBJECT
0025     Q_PROPERTY(QAbstractListModel *model READ pluginsModel NOTIFY pluginsChanged)
0026     Q_PROPERTY(QStringList enabledPlugins READ enabledPlugins WRITE setEnabledPlugins NOTIFY pluginsChanged)
0027 
0028 public:
0029     explicit EventPluginsManager(QObject *parent = nullptr);
0030     ~EventPluginsManager() override;
0031 
0032     QList<CalendarEvents::CalendarEventsPlugin *> plugins() const;
0033     QAbstractListModel *pluginsModel() const;
0034 
0035     // This is a helper function to set which plugins
0036     // are enabled without needing to go through setEnabledPlugins
0037     // which also loads the plugins; from the Applet config
0038     // the plugins are not required to be actually loaded
0039     Q_INVOKABLE void populateEnabledPluginsList(const QStringList &pluginsList);
0040 
0041     void setEnabledPlugins(QStringList &pluginsList);
0042     QStringList enabledPlugins() const;
0043 
0044 Q_SIGNALS:
0045     void pluginsChanged();
0046 
0047     // These 5 signals below are used for relaying the
0048     // plugin signals so that the EventPluginsManager don't
0049     // have to worry about connecting to newly loaded plugins
0050     void dataReady(const QMultiHash<QDate, CalendarEvents::EventData> &data);
0051     void eventModified(const CalendarEvents::EventData &modifiedEvent);
0052     void eventRemoved(const QString &uid);
0053 
0054     /**
0055      * Relays the plugin signal that contains alternate dates
0056      *
0057      * @param data a hash from CalendarEventsPlugin
0058      */
0059     void alternateDateReady(const QHash<QDate, QDate> &data);
0060 
0061     /**
0062      * Relays the plugin signal that contains sub-labels
0063      *
0064      * @param data a hash from CalendarEventsPlugin
0065      */
0066     void subLabelReady(const QHash<QDate, CalendarEvents::CalendarEventsPlugin::SubLabel> &data);
0067 
0068 private:
0069     void loadPlugin(const QString &absolutePath);
0070 
0071     EventPluginsManagerPrivate *const d;
0072 };