1// Copyright (C) 2020 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 QDATETIMEEDIT_H
5#define QDATETIMEEDIT_H
6
7#include <QtWidgets/qtwidgetsglobal.h>
8#include <QtCore/qdatetime.h>
9#include <QtCore/qcalendar.h>
10#include <QtCore/qvariant.h>
11#include <QtWidgets/qabstractspinbox.h>
12
13QT_REQUIRE_CONFIG(datetimeedit);
14
15QT_BEGIN_NAMESPACE
16
17class QDateTimeEditPrivate;
18class QStyleOptionSpinBox;
19class QCalendarWidget;
20
21class Q_WIDGETS_EXPORT QDateTimeEdit : public QAbstractSpinBox
22{
23 Q_OBJECT
24
25 Q_PROPERTY(QDateTime dateTime READ dateTime WRITE setDateTime NOTIFY dateTimeChanged USER true)
26 Q_PROPERTY(QDate date READ date WRITE setDate NOTIFY dateChanged)
27 Q_PROPERTY(QTime time READ time WRITE setTime NOTIFY timeChanged)
28 Q_PROPERTY(QDateTime maximumDateTime READ maximumDateTime WRITE setMaximumDateTime
29 RESET clearMaximumDateTime)
30 Q_PROPERTY(QDateTime minimumDateTime READ minimumDateTime WRITE setMinimumDateTime
31 RESET clearMinimumDateTime)
32 Q_PROPERTY(QDate maximumDate READ maximumDate WRITE setMaximumDate RESET clearMaximumDate)
33 Q_PROPERTY(QDate minimumDate READ minimumDate WRITE setMinimumDate RESET clearMinimumDate)
34 Q_PROPERTY(QTime maximumTime READ maximumTime WRITE setMaximumTime RESET clearMaximumTime)
35 Q_PROPERTY(QTime minimumTime READ minimumTime WRITE setMinimumTime RESET clearMinimumTime)
36 Q_PROPERTY(Section currentSection READ currentSection WRITE setCurrentSection)
37 Q_PROPERTY(Sections displayedSections READ displayedSections)
38 Q_PROPERTY(QString displayFormat READ displayFormat WRITE setDisplayFormat)
39 Q_PROPERTY(bool calendarPopup READ calendarPopup WRITE setCalendarPopup)
40 Q_PROPERTY(int currentSectionIndex READ currentSectionIndex WRITE setCurrentSectionIndex)
41 Q_PROPERTY(int sectionCount READ sectionCount)
42 Q_PROPERTY(Qt::TimeSpec timeSpec READ timeSpec WRITE setTimeSpec)
43public:
44 enum Section { // a sub-type of QDateTimeParser's like-named enum.
45 NoSection = 0x0000,
46 AmPmSection = 0x0001,
47 MSecSection = 0x0002,
48 SecondSection = 0x0004,
49 MinuteSection = 0x0008,
50 HourSection = 0x0010,
51 DaySection = 0x0100,
52 MonthSection = 0x0200,
53 YearSection = 0x0400,
54 TimeSections_Mask = AmPmSection|MSecSection|SecondSection|MinuteSection|HourSection,
55 DateSections_Mask = DaySection|MonthSection|YearSection
56 };
57 Q_ENUM(Section)
58
59 Q_DECLARE_FLAGS(Sections, Section)
60 Q_FLAG(Sections)
61
62 explicit QDateTimeEdit(QWidget *parent = nullptr);
63 explicit QDateTimeEdit(const QDateTime &dt, QWidget *parent = nullptr);
64 explicit QDateTimeEdit(QDate d, QWidget *parent = nullptr);
65 explicit QDateTimeEdit(QTime t, QWidget *parent = nullptr);
66 ~QDateTimeEdit();
67
68 QDateTime dateTime() const;
69 QDate date() const;
70 QTime time() const;
71
72 QCalendar calendar() const;
73 void setCalendar(QCalendar calendar);
74
75 QDateTime minimumDateTime() const;
76 void clearMinimumDateTime();
77 void setMinimumDateTime(const QDateTime &dt);
78
79 QDateTime maximumDateTime() const;
80 void clearMaximumDateTime();
81 void setMaximumDateTime(const QDateTime &dt);
82
83 void setDateTimeRange(const QDateTime &min, const QDateTime &max);
84
85 QDate minimumDate() const;
86 void setMinimumDate(QDate min);
87 void clearMinimumDate();
88
89 QDate maximumDate() const;
90 void setMaximumDate(QDate max);
91 void clearMaximumDate();
92
93 void setDateRange(QDate min, QDate max);
94
95 QTime minimumTime() const;
96 void setMinimumTime(QTime min);
97 void clearMinimumTime();
98
99 QTime maximumTime() const;
100 void setMaximumTime(QTime max);
101 void clearMaximumTime();
102
103 void setTimeRange(QTime min, QTime max);
104
105 Sections displayedSections() const;
106 Section currentSection() const;
107 Section sectionAt(int index) const;
108 void setCurrentSection(Section section);
109
110 int currentSectionIndex() const;
111 void setCurrentSectionIndex(int index);
112
113 QCalendarWidget *calendarWidget() const;
114 void setCalendarWidget(QCalendarWidget *calendarWidget);
115
116 int sectionCount() const;
117
118 void setSelectedSection(Section section);
119
120 QString sectionText(Section section) const;
121
122 QString displayFormat() const;
123 void setDisplayFormat(const QString &format);
124
125 bool calendarPopup() const;
126 void setCalendarPopup(bool enable);
127
128 Qt::TimeSpec timeSpec() const;
129 void setTimeSpec(Qt::TimeSpec spec);
130
131 QSize sizeHint() const override;
132
133 void clear() override;
134 void stepBy(int steps) override;
135
136 bool event(QEvent *event) override;
137Q_SIGNALS:
138 void dateTimeChanged(const QDateTime &dateTime);
139 void timeChanged(QTime time);
140 void dateChanged(QDate date);
141
142public Q_SLOTS:
143 void setDateTime(const QDateTime &dateTime);
144 void setDate(QDate date);
145 void setTime(QTime time);
146
147protected:
148 void keyPressEvent(QKeyEvent *event) override;
149#if QT_CONFIG(wheelevent)
150 void wheelEvent(QWheelEvent *event) override;
151#endif
152 void focusInEvent(QFocusEvent *event) override;
153 bool focusNextPrevChild(bool next) override;
154 QValidator::State validate(QString &input, int &pos) const override;
155 void fixup(QString &input) const override;
156
157 virtual QDateTime dateTimeFromText(const QString &text) const;
158 virtual QString textFromDateTime(const QDateTime &dt) const;
159 StepEnabled stepEnabled() const override;
160 void mousePressEvent(QMouseEvent *event) override;
161 void paintEvent(QPaintEvent *event) override;
162 void initStyleOption(QStyleOptionSpinBox *option) const override;
163
164 QDateTimeEdit(const QVariant &val, QMetaType::Type parserType, QWidget *parent = nullptr);
165private:
166 Q_DECLARE_PRIVATE(QDateTimeEdit)
167 Q_DISABLE_COPY(QDateTimeEdit)
168
169 Q_PRIVATE_SLOT(d_func(), void _q_resetButton())
170};
171
172class Q_WIDGETS_EXPORT QTimeEdit : public QDateTimeEdit
173{
174 Q_OBJECT
175 Q_PROPERTY(QTime time READ time WRITE setTime NOTIFY userTimeChanged USER true)
176public:
177 explicit QTimeEdit(QWidget *parent = nullptr);
178 explicit QTimeEdit(QTime time, QWidget *parent = nullptr);
179 ~QTimeEdit();
180
181Q_SIGNALS:
182 void userTimeChanged(QTime time);
183};
184
185class Q_WIDGETS_EXPORT QDateEdit : public QDateTimeEdit
186{
187 Q_OBJECT
188 Q_PROPERTY(QDate date READ date WRITE setDate NOTIFY userDateChanged USER true)
189public:
190 explicit QDateEdit(QWidget *parent = nullptr);
191 explicit QDateEdit(QDate date, QWidget *parent = nullptr);
192 ~QDateEdit();
193
194Q_SIGNALS:
195 void userDateChanged(QDate date);
196};
197
198Q_DECLARE_OPERATORS_FOR_FLAGS(QDateTimeEdit::Sections)
199
200QT_END_NAMESPACE
201
202#endif // QDATETIMEEDIT_H
203

source code of qtbase/src/widgets/widgets/qdatetimeedit.h