diff --git a/src/declarativeimports/calendar/daysmodel.h b/src/declarativeimports/calendar/daysmodel.h --- a/src/declarativeimports/calendar/daysmodel.h +++ b/src/declarativeimports/calendar/daysmodel.h @@ -56,6 +56,8 @@ Q_INVOKABLE QList eventsForDate(const QDate &date); + Q_INVOKABLE void showEventDetails(const QString &uid); + QHash roleNames() const override; Q_SIGNALS: @@ -78,7 +80,6 @@ QList *m_data = nullptr; QList m_qmlData; QDate m_lastRequestedAgendaDate; - QList m_eventPlugins; QMultiHash m_eventsData; QDate m_lastRequestedEventsStartDate; // this is always this+42 days bool m_agendaNeedsUpdate; diff --git a/src/declarativeimports/calendar/daysmodel.cpp b/src/declarativeimports/calendar/daysmodel.cpp --- a/src/declarativeimports/calendar/daysmodel.cpp +++ b/src/declarativeimports/calendar/daysmodel.cpp @@ -36,10 +36,7 @@ } -DaysModel::~DaysModel() -{ - qDeleteAll(m_eventPlugins); -} +DaysModel::~DaysModel() = default; void DaysModel::setSourceData(QList *data) { @@ -203,6 +200,18 @@ return m_qmlData; } +void DaysModel::showEventDetails(const QString &uid) +{ + const auto plugins = m_pluginsManager->enabledPluginsInstances(); + for (auto plugin : plugins) { + if (auto eventIface = qobject_cast(plugin)) { + if (eventIface->showEvent(uid)) { + return; + } + } + } +} + QModelIndex DaysModel::indexForDate(const QDate &date) { if (!m_data) { diff --git a/src/declarativeimports/calendar/eventdatadecorator.h b/src/declarativeimports/calendar/eventdatadecorator.h --- a/src/declarativeimports/calendar/eventdatadecorator.h +++ b/src/declarativeimports/calendar/eventdatadecorator.h @@ -37,7 +37,7 @@ Q_PROPERTY(QString description READ description NOTIFY eventDataChanged) Q_PROPERTY(QString eventColor READ eventColor NOTIFY eventDataChanged) Q_PROPERTY(QString eventType READ eventType NOTIFY eventDataChanged) - + Q_PROPERTY(QString uid READ uid NOTIFY eventDataChanged) public: EventDataDecorator(const CalendarEvents::EventData &data, QObject *parent = nullptr); @@ -49,6 +49,7 @@ QString description() const; QString eventType() const; QString eventColor() const; + QString uid() const; Q_SIGNALS: void eventDataChanged(); diff --git a/src/declarativeimports/calendar/eventdatadecorator.cpp b/src/declarativeimports/calendar/eventdatadecorator.cpp --- a/src/declarativeimports/calendar/eventdatadecorator.cpp +++ b/src/declarativeimports/calendar/eventdatadecorator.cpp @@ -74,3 +74,8 @@ { return m_data.eventColor(); } + +QString EventDataDecorator::uid() const +{ + return m_data.uid(); +} diff --git a/src/declarativeimports/calendar/eventpluginsmanager.h b/src/declarativeimports/calendar/eventpluginsmanager.h --- a/src/declarativeimports/calendar/eventpluginsmanager.h +++ b/src/declarativeimports/calendar/eventpluginsmanager.h @@ -52,7 +52,7 @@ void setEnabledPlugins(QStringList &pluginsList); QStringList enabledPlugins() const; - + QList enabledPluginsInstances() const; Q_SIGNALS: void pluginsChanged(); diff --git a/src/declarativeimports/calendar/eventpluginsmanager.cpp b/src/declarativeimports/calendar/eventpluginsmanager.cpp --- a/src/declarativeimports/calendar/eventpluginsmanager.cpp +++ b/src/declarativeimports/calendar/eventpluginsmanager.cpp @@ -230,6 +230,16 @@ return m_enabledPlugins; } +QList EventPluginsManager::enabledPluginsInstances() const +{ + QList rv; + std::copy_if(m_plugins.cbegin(), m_plugins.cend(), std::back_inserter(rv), + [this](const CalendarEvents::CalendarEventsPlugin *plugin) { + return m_enabledPlugins.contains(plugin->property("pluginPath").toString()); + }); + return rv; +} + void EventPluginsManager::loadPlugin(const QString &absolutePath) { QPluginLoader loader(absolutePath);