File indexing completed on 2024-05-12 05:37:12
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 alternateCalendarDateReady(const QHash<QDate, QCalendar::YearMonthDay> &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 };