Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qcalendarbackend_p.h
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QCALENDAR_BACKEND_P_H
5#define QCALENDAR_BACKEND_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists for the convenience
12// of calendar implementations. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QtCore/qobjectdefs.h>
19#include <QtCore/qcalendar.h>
20#include <QtCore/qstringlist.h>
21#include <QtCore/qstring.h>
22#include <QtCore/qmap.h>
23#include <QtCore/qanystringview.h>
24#include <QtCore/private/qlocale_p.h>
25
27
28namespace QtPrivate {
30}
31
32// Locale-related parts, mostly handled in ../text/qlocale.cpp
33
36
37#define CASE(E, member) case QLocale::FormatType::E:
38 return { m_ ## member ## _idx, m_ ## member ## _size }
39 QLocaleData::DataRange monthName(QLocale::FormatType type) const
40 {
41 switch (type) {
42 CASE(LongFormat, longMonth);
43 CASE(ShortFormat, shortMonth);
44 CASE(NarrowFormat, narrowMonth);
45 }
46 Q_UNREACHABLE_RETURN({});
47 }
48 QLocaleData::DataRange standaloneMonthName(QLocale::FormatType type) const
49 {
50 switch (type) {
51 CASE(LongFormat, longMonthStandalone);
52 CASE(ShortFormat, shortMonthStandalone);
53 CASE(NarrowFormat, narrowMonthStandalone);
54 }
55 Q_UNREACHABLE_RETURN({});
56 }
57#undef CASE
58
59 // Month name indexes:
63
64 // Twelve long month names (separated by commas) can add up to more than 256
65 // QChars - e.g. kde_TZ gets to 264.
69};
70
71// Partial implementation, of methods with common forms, in qcalendar.cpp
72class Q_CORE_EXPORT QCalendarBackend
73{
74 friend class QCalendar;
75 friend class QtPrivate::QCalendarRegistry;
76 Q_DISABLE_COPY_MOVE(QCalendarBackend)
77
78public:
79 QCalendarBackend() = default;
80 virtual ~QCalendarBackend();
81 virtual QString name() const = 0;
82
83 QStringList names() const;
84
85 QCalendar::System calendarSystem() const;
86 QCalendar::SystemId calendarId() const { return m_id; }
87 // Date queries:
88 virtual int daysInMonth(int month, int year = QCalendar::Unspecified) const = 0;
89 virtual int daysInYear(int year) const;
90 virtual int monthsInYear(int year) const;
91 virtual bool isDateValid(int year, int month, int day) const;
92 // Properties of the calendar:
93 virtual bool isLeapYear(int year) const = 0;
94 virtual bool isLunar() const = 0;
95 virtual bool isLuniSolar() const = 0;
96 virtual bool isSolar() const = 0;
97 virtual bool isProleptic() const;
98 virtual bool hasYearZero() const;
99 virtual int maximumDaysInMonth() const;
100 virtual int minimumDaysInMonth() const;
101 virtual int maximumMonthsInYear() const;
102 // Julian Day conversions:
103 virtual bool dateToJulianDay(int year, int month, int day, qint64 *jd) const = 0;
104 virtual QCalendar::YearMonthDay julianDayToDate(qint64 jd) const = 0;
105 // Day of week:
106 virtual int dayOfWeek(qint64 jd) const;
107 virtual qint64 matchCenturyToWeekday(const QCalendar::YearMonthDay &parts, int dow) const;
108
109 // Names of months and week-days (implemented in qlocale.cpp):
110 virtual QString monthName(const QLocale &locale, int month, int year,
111 QLocale::FormatType format) const;
112 virtual QString standaloneMonthName(const QLocale &locale, int month, int year,
113 QLocale::FormatType format) const;
114 virtual QString weekDayName(const QLocale &locale, int day,
115 QLocale::FormatType format) const;
116 virtual QString standaloneWeekDayName(const QLocale &locale, int day,
117 QLocale::FormatType format) const;
118
119 // Formatting of date-times (implemented in qlocale.cpp):
120 virtual QString dateTimeToString(QStringView format, const QDateTime &datetime,
121 QDate dateOnly, QTime timeOnly,
122 const QLocale &locale) const;
123
124 bool isGregorian() const;
125
126 QCalendar::SystemId registerCustomBackend(const QStringList &names);
127
128 // Calendar enumeration by name:
129 static QStringList availableCalendars();
130
131protected:
132 // Locale support:
133 virtual const QCalendarLocale *localeMonthIndexData() const = 0;
134 virtual const char16_t *localeMonthData() const = 0;
135
136private:
137 QCalendar::SystemId m_id;
138
139 void setIndex(size_t index);
140
141 // QCalendar's access to its registry:
142 static const QCalendarBackend *fromName(QAnyStringView name);
143 static const QCalendarBackend *fromId(QCalendar::SystemId id);
144 // QCalendar's access to singletons:
145 static const QCalendarBackend *fromEnum(QCalendar::System system);
146 static const QCalendarBackend *gregorian();
147};
148
149QT_END_NAMESPACE
150
151#endif // QCALENDAR_BACKEND_P_H
\inmodule QtCore
Definition qatomic.h:113
\macro Q_ATOMIC_INTnn_IS_SUPPORTED
Definition qatomic.h:124
The QCalendarBackend class provides basic calendaring functions.
const QCalendarBackend * fromEnum(QCalendar::System system)
const QCalendarBackend * fromName(QAnyStringView name)
void registerCustomBackend(QCalendarBackend *backend, const QStringList &names)
bool isGregorian(const QCalendarBackend *backend) const
const QCalendarBackend * fromIndex(size_t index)
QStringList backendNames(const QCalendarBackend *backend)
const QCalendarBackend * gregorian()
#define SAFE_D()
Q_GLOBAL_STATIC(QtPrivate::QCalendarRegistry, calendarRegistry)
#define CASE(E, member)
quint16 m_longMonthStandalone_size
QLocaleData::DataRange monthName(QLocale::FormatType type) const
quint16 m_shortMonthStandalone_idx
quint8 m_narrowMonthStandalone_size
quint8 m_shortMonthStandalone_size
quint16 m_longMonthStandalone_idx
quint16 m_narrowMonthStandalone_idx
QLocaleData::DataRange standaloneMonthName(QLocale::FormatType type) const
bool operator()(QAnyStringView lhs, QAnyStringView rhs) const
Definition qcalendar.cpp:31