File indexing completed on 2024-05-12 05:29:42

0001 /*
0002     SPDX-FileCopyrightText: 2022 Fushan Wen <qydwhotmail@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #ifndef ALTERNATECALENDARPLUGIN_H
0008 #define ALTERNATECALENDARPLUGIN_H
0009 
0010 #include <QDate>
0011 
0012 #include <KConfigGroup>
0013 #include <KConfigWatcher>
0014 
0015 #include <CalendarEvents/CalendarEventsPlugin>
0016 
0017 #include "calendarsystem.h"
0018 
0019 class AbstractCalendarProvider;
0020 
0021 class AlternateCalendarPlugin : public CalendarEvents::CalendarEventsPlugin
0022 {
0023     Q_OBJECT
0024     Q_PLUGIN_METADATA(IID "org.kde.CalendarEventsPlugin" FILE "alternatecalendarplugin.json")
0025     Q_INTERFACES(CalendarEvents::CalendarEventsPlugin)
0026 
0027 public:
0028     AlternateCalendarPlugin(QObject *parent = nullptr);
0029     ~AlternateCalendarPlugin() override;
0030 
0031     void loadEventsForDateRange(const QDate &startDate, const QDate &endDate) override;
0032 
0033 public Q_SLOTS:
0034     void updateSettings(const KConfigGroup &configGroup);
0035 
0036 private:
0037     void init();
0038     void emitDataChangedSignal();
0039 
0040     QDate m_lastStartDate;
0041     QDate m_lastEndDate;
0042     AbstractCalendarProvider *m_provider = nullptr;
0043 
0044     // Cache lookup data
0045     QHash<QDate, QCalendar::YearMonthDay> m_alternateDateCache;
0046     QHash<QDate, SubLabel> m_sublabelCache;
0047 
0048     // For updating config
0049     KConfigGroup m_generalConfigGroup;
0050     KConfigWatcher::Ptr m_configWatcher;
0051 
0052     CalendarSystem::System m_calendarSystem = CalendarSystem::Gregorian;
0053     int m_dateOffset = 0; // For the (tabular) Islamic Civil calendar
0054 };
0055 
0056 #endif