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