1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the QtWidgets module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or (at your option) the GNU General
28** Public license version 3 or any later version approved by the KDE Free
29** Qt Foundation. The licenses are as published by the Free Software
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31** included in the packaging of this file. Please review the following
32** information to ensure the GNU General Public License requirements will
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34** https://www.gnu.org/licenses/gpl-3.0.html.
35**
36** $QT_END_LICENSE$
37**
38****************************************************************************/
39
40#ifndef QDATETIMEEDIT_H
41#define QDATETIMEEDIT_H
42
43#include <QtWidgets/qtwidgetsglobal.h>
44#include <QtCore/qdatetime.h>
45#include <QtCore/qcalendar.h>
46#include <QtCore/qvariant.h>
47#include <QtWidgets/qabstractspinbox.h>
48
49QT_REQUIRE_CONFIG(datetimeedit);
50
51QT_BEGIN_NAMESPACE
52
53class QDateTimeEditPrivate;
54class QStyleOptionSpinBox;
55class QCalendarWidget;
56
57class Q_WIDGETS_EXPORT QDateTimeEdit : public QAbstractSpinBox
58{
59 Q_OBJECT
60
61 Q_PROPERTY(QDateTime dateTime READ dateTime WRITE setDateTime NOTIFY dateTimeChanged USER true)
62 Q_PROPERTY(QDate date READ date WRITE setDate NOTIFY dateChanged)
63 Q_PROPERTY(QTime time READ time WRITE setTime NOTIFY timeChanged)
64 Q_PROPERTY(QDateTime maximumDateTime READ maximumDateTime WRITE setMaximumDateTime RESET clearMaximumDateTime)
65 Q_PROPERTY(QDateTime minimumDateTime READ minimumDateTime WRITE setMinimumDateTime RESET clearMinimumDateTime)
66 Q_PROPERTY(QDate maximumDate READ maximumDate WRITE setMaximumDate RESET clearMaximumDate)
67 Q_PROPERTY(QDate minimumDate READ minimumDate WRITE setMinimumDate RESET clearMinimumDate)
68 Q_PROPERTY(QTime maximumTime READ maximumTime WRITE setMaximumTime RESET clearMaximumTime)
69 Q_PROPERTY(QTime minimumTime READ minimumTime WRITE setMinimumTime RESET clearMinimumTime)
70 Q_PROPERTY(Section currentSection READ currentSection WRITE setCurrentSection)
71 Q_PROPERTY(Sections displayedSections READ displayedSections)
72 Q_PROPERTY(QString displayFormat READ displayFormat WRITE setDisplayFormat)
73 Q_PROPERTY(bool calendarPopup READ calendarPopup WRITE setCalendarPopup)
74 Q_PROPERTY(int currentSectionIndex READ currentSectionIndex WRITE setCurrentSectionIndex)
75 Q_PROPERTY(int sectionCount READ sectionCount)
76 Q_PROPERTY(Qt::TimeSpec timeSpec READ timeSpec WRITE setTimeSpec)
77public:
78 enum Section { // a sub-type of QDateTimeParser's like-named enum.
79 NoSection = 0x0000,
80 AmPmSection = 0x0001,
81 MSecSection = 0x0002,
82 SecondSection = 0x0004,
83 MinuteSection = 0x0008,
84 HourSection = 0x0010,
85 DaySection = 0x0100,
86 MonthSection = 0x0200,
87 YearSection = 0x0400,
88 TimeSections_Mask = AmPmSection|MSecSection|SecondSection|MinuteSection|HourSection,
89 DateSections_Mask = DaySection|MonthSection|YearSection
90 };
91 Q_ENUM(Section)
92
93 Q_DECLARE_FLAGS(Sections, Section)
94 Q_FLAG(Sections)
95
96 explicit QDateTimeEdit(QWidget *parent = nullptr);
97 explicit QDateTimeEdit(const QDateTime &dt, QWidget *parent = nullptr);
98 explicit QDateTimeEdit(const QDate &d, QWidget *parent = nullptr);
99 explicit QDateTimeEdit(const QTime &t, QWidget *parent = nullptr);
100 ~QDateTimeEdit();
101
102 QDateTime dateTime() const;
103 QDate date() const;
104 QTime time() const;
105
106 QCalendar calendar() const;
107 void setCalendar(QCalendar calendar);
108
109 QDateTime minimumDateTime() const;
110 void clearMinimumDateTime();
111 void setMinimumDateTime(const QDateTime &dt);
112
113 QDateTime maximumDateTime() const;
114 void clearMaximumDateTime();
115 void setMaximumDateTime(const QDateTime &dt);
116
117 void setDateTimeRange(const QDateTime &min, const QDateTime &max);
118
119 QDate minimumDate() const;
120 void setMinimumDate(const QDate &min);
121 void clearMinimumDate();
122
123 QDate maximumDate() const;
124 void setMaximumDate(const QDate &max);
125 void clearMaximumDate();
126
127 void setDateRange(const QDate &min, const QDate &max);
128
129 QTime minimumTime() const;
130 void setMinimumTime(const QTime &min);
131 void clearMinimumTime();
132
133 QTime maximumTime() const;
134 void setMaximumTime(const QTime &max);
135 void clearMaximumTime();
136
137 void setTimeRange(const QTime &min, const QTime &max);
138
139 Sections displayedSections() const;
140 Section currentSection() const;
141 Section sectionAt(int index) const;
142 void setCurrentSection(Section section);
143
144 int currentSectionIndex() const;
145 void setCurrentSectionIndex(int index);
146
147 QCalendarWidget *calendarWidget() const;
148 void setCalendarWidget(QCalendarWidget *calendarWidget);
149
150 int sectionCount() const;
151
152 void setSelectedSection(Section section);
153
154 QString sectionText(Section section) const;
155
156 QString displayFormat() const;
157 void setDisplayFormat(const QString &format);
158
159 bool calendarPopup() const;
160 void setCalendarPopup(bool enable);
161
162 Qt::TimeSpec timeSpec() const;
163 void setTimeSpec(Qt::TimeSpec spec);
164
165 QSize sizeHint() const override;
166
167 void clear() override;
168 void stepBy(int steps) override;
169
170 bool event(QEvent *event) override;
171Q_SIGNALS:
172 void dateTimeChanged(const QDateTime &dateTime);
173 void timeChanged(const QTime &time);
174 void dateChanged(const QDate &date);
175
176public Q_SLOTS:
177 void setDateTime(const QDateTime &dateTime);
178 void setDate(const QDate &date);
179 void setTime(const QTime &time);
180
181protected:
182 void keyPressEvent(QKeyEvent *event) override;
183#if QT_CONFIG(wheelevent)
184 void wheelEvent(QWheelEvent *event) override;
185#endif
186 void focusInEvent(QFocusEvent *event) override;
187 bool focusNextPrevChild(bool next) override;
188 QValidator::State validate(QString &input, int &pos) const override;
189 void fixup(QString &input) const override;
190
191 virtual QDateTime dateTimeFromText(const QString &text) const;
192 virtual QString textFromDateTime(const QDateTime &dt) const;
193 StepEnabled stepEnabled() const override;
194 void mousePressEvent(QMouseEvent *event) override;
195 void paintEvent(QPaintEvent *event) override;
196 void initStyleOption(QStyleOptionSpinBox *option) const;
197
198#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
199 QDateTimeEdit(const QVariant &val, QVariant::Type parserType, QWidget *parent = nullptr);
200#endif
201 QDateTimeEdit(const QVariant &val, QMetaType::Type parserType, QWidget *parent = nullptr);
202private:
203 Q_DECLARE_PRIVATE(QDateTimeEdit)
204 Q_DISABLE_COPY(QDateTimeEdit)
205
206 Q_PRIVATE_SLOT(d_func(), void _q_resetButton())
207};
208
209class Q_WIDGETS_EXPORT QTimeEdit : public QDateTimeEdit
210{
211 Q_OBJECT
212 Q_PROPERTY(QTime time READ time WRITE setTime NOTIFY userTimeChanged USER true)
213public:
214 explicit QTimeEdit(QWidget *parent = nullptr);
215 explicit QTimeEdit(const QTime &time, QWidget *parent = nullptr);
216 ~QTimeEdit();
217
218Q_SIGNALS:
219 void userTimeChanged(const QTime &time);
220};
221
222class Q_WIDGETS_EXPORT QDateEdit : public QDateTimeEdit
223{
224 Q_OBJECT
225 Q_PROPERTY(QDate date READ date WRITE setDate NOTIFY userDateChanged USER true)
226public:
227 explicit QDateEdit(QWidget *parent = nullptr);
228 explicit QDateEdit(const QDate &date, QWidget *parent = nullptr);
229 ~QDateEdit();
230
231Q_SIGNALS:
232 void userDateChanged(const QDate &date);
233};
234
235Q_DECLARE_OPERATORS_FOR_FLAGS(QDateTimeEdit::Sections)
236
237QT_END_NAMESPACE
238
239#endif // QDATETIMEEDIT_H
240

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