File indexing completed on 2024-05-12 16:59:38

0001 /*
0002     SPDX-FileCopyrightText: 2022 Fushan Wen <qydwhotmail@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "qtcalendar.h"
0008 
0009 class QtCalendarProviderPrivate
0010 {
0011 public:
0012     explicit QtCalendarProviderPrivate(QCalendar::System system);
0013     ~QtCalendarProviderPrivate();
0014 
0015     QCalendar::YearMonthDay fromGregorian(const QDate &date) const;
0016     CalendarEvents::CalendarEventsPlugin::SubLabel subLabels(const QDate &date) const;
0017 
0018 private:
0019     const QCalendar m_calendar;
0020 };
0021 
0022 QtCalendarProviderPrivate::QtCalendarProviderPrivate(QCalendar::System system)
0023     : m_calendar(QCalendar(system))
0024 {
0025 }
0026 
0027 QtCalendarProviderPrivate::~QtCalendarProviderPrivate()
0028 {
0029 }
0030 
0031 QCalendar::YearMonthDay QtCalendarProviderPrivate::fromGregorian(const QDate &date) const
0032 {
0033     if (!date.isValid()) {
0034         return {};
0035     }
0036 
0037     return m_calendar.partsFromDate(date);
0038 }
0039 
0040 CalendarEvents::CalendarEventsPlugin::SubLabel QtCalendarProviderPrivate::subLabels(const QDate &date) const
0041 {
0042     auto sublabel = CalendarEvents::CalendarEventsPlugin::SubLabel{};
0043 
0044     if (!date.isValid()) {
0045         return sublabel;
0046     }
0047 
0048     const QCalendar::YearMonthDay altDate = fromGregorian(date);
0049     const QString dayString = QString::number(altDate.day);
0050     sublabel.label = i18ndc("plasma_calendar_alternatecalendar",
0051                             "@label %1 day %2 month name %3 year",
0052                             "%1 %2, %3",
0053                             dayString,
0054                             m_calendar.standaloneMonthName(QLocale::system(), altDate.month, altDate.year),
0055                             QString::number(altDate.year));
0056     sublabel.dayLabel = dayString;
0057 
0058     return sublabel;
0059 }
0060 
0061 QtCalendarProvider::QtCalendarProvider(QObject *parent, CalendarSystem::System calendarSystem)
0062     : AbstractCalendarProvider(parent, calendarSystem)
0063     , d(new QtCalendarProviderPrivate(static_cast<QCalendar::System>(calendarSystem)))
0064 {
0065     Q_ASSERT(m_calendarSystem <= static_cast<CalendarSystem::System>(QCalendar::System::Last));
0066 }
0067 
0068 QtCalendarProvider::~QtCalendarProvider()
0069 {
0070 }
0071 
0072 QCalendar::YearMonthDay QtCalendarProvider::fromGregorian(const QDate &date) const
0073 {
0074     return d->fromGregorian(date);
0075 }
0076 
0077 CalendarEvents::CalendarEventsPlugin::SubLabel QtCalendarProvider::subLabels(const QDate &date) const
0078 {
0079     return d->subLabels(date);
0080 }