File indexing completed on 2024-05-12 09:31:46

0001 /*
0002     SPDX-FileCopyrightText: 2022 Fushan Wen <qydwhotmail@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include <map>
0010 
0011 #include <QCalendar>
0012 #include <QMetaType>
0013 
0014 #include <KLocalizedString>
0015 
0016 class CalendarSystem
0017 {
0018     Q_GADGET
0019 
0020 public:
0021     /**
0022      * @note When adding a new calendar system, \s_calendarMap should also be updated.
0023      */
0024     enum System : int {
0025         Gregorian = static_cast<int>(QCalendar::System::Gregorian),
0026 #ifndef QT_BOOTSTRAPPED
0027         Julian = static_cast<int>(QCalendar::System::Julian),
0028         Milankovic = static_cast<int>(QCalendar::System::Milankovic),
0029 #endif
0030         Chinese = static_cast<int>(QCalendar::System::Last) + 1, // QTBUG-89824: QCalendar doesn't support Chinese calendar system
0031         Indian, // QCalendar doesn't support India calendar system
0032         Hebrew,
0033         Jalali, // Persian
0034         Islamic, // Astronomical
0035         IslamicCivil,
0036         IslamicUmalqura,
0037     };
0038     Q_ENUM(System)
0039 };
0040 Q_DECLARE_METATYPE(CalendarSystem)
0041 
0042 struct CalendarSystemItem {
0043     const CalendarSystem::System system;
0044     const QString id;
0045     const QString text;
0046 };
0047 
0048 // clang-format off
0049 static const std::map<QString /* id */, CalendarSystemItem> s_calendarMap{
0050     {
0051         QStringLiteral("Julian"),
0052         {CalendarSystem::Julian, QStringLiteral("Julian"), i18ndc("plasma_calendar_alternatecalendar", "@item:inlist", "Julian")}
0053     },
0054     {
0055         QStringLiteral("Milankovic"),
0056         {CalendarSystem::Milankovic, QStringLiteral("Milankovic"), i18ndc("plasma_calendar_alternatecalendar", "@item:inlist", "Milankovic")}
0057     },
0058     {
0059         QStringLiteral("Jalali"),
0060         {CalendarSystem::Jalali, QStringLiteral("Jalali"), i18ndc("plasma_calendar_alternatecalendar", "@item:inlist", "The Solar Hijri Calendar (Persian)")}
0061     },
0062     {
0063         QStringLiteral("Islamic"),
0064         {CalendarSystem::Islamic, QStringLiteral("Islamic"), i18ndc("plasma_calendar_alternatecalendar", "@item:inlist See https://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types for more details", "Islamic Calendar (Astronomical)")}
0065     },
0066     {
0067         QStringLiteral("IslamicCivil"),
0068         {CalendarSystem::IslamicCivil, QStringLiteral("IslamicCivil"), i18ndc("plasma_calendar_alternatecalendar", "@item:inlist See https://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types for more details", "The Islamic Civil Calendar (Tabular)")}
0069     },
0070     {
0071         QStringLiteral("IslamicUmalqura"),
0072         {CalendarSystem::IslamicUmalqura, QStringLiteral("IslamicUmalqura"), i18ndc("plasma_calendar_alternatecalendar", "@item:inlist See https://cldr.unicode.org/development/development-process/design-proposals/islamic-calendar-types for more details", "Islamic Calendar (Umm al-Qura)")}
0073     },
0074     {
0075         QStringLiteral("Chinese"),
0076         {CalendarSystem::Chinese, QStringLiteral("Chinese"), i18ndc("plasma_calendar_alternatecalendar", "@item:inlist", "Chinese Lunar Calendar")}
0077     },
0078     {
0079         QStringLiteral("Indian"),
0080         {CalendarSystem::Indian, QStringLiteral("Indian"), i18ndc("plasma_calendar_alternatecalendar", "@item:inlist", "Indian National Calendar")}
0081     },
0082     {
0083         QStringLiteral("Hebrew"),
0084         {CalendarSystem::Hebrew, QStringLiteral("Hebrew"), i18ndc("plasma_calendar_alternatecalendar", "@item:inlist", "Hebrew Calendar")}
0085     },
0086 };
0087 // clang-format on