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 | |
13 | QT_REQUIRE_CONFIG(datetimeedit); |
14 | |
15 | QT_BEGIN_NAMESPACE |
16 | |
17 | class QDateTimeEditPrivate; |
18 | class QStyleOptionSpinBox; |
19 | class QCalendarWidget; |
20 | |
21 | class 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) |
43 | public: |
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 () const; |
126 | void (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; |
137 | Q_SIGNALS: |
138 | void dateTimeChanged(const QDateTime &dateTime); |
139 | void timeChanged(QTime time); |
140 | void dateChanged(QDate date); |
141 | |
142 | public Q_SLOTS: |
143 | void setDateTime(const QDateTime &dateTime); |
144 | void setDate(QDate date); |
145 | void setTime(QTime time); |
146 | |
147 | protected: |
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); |
165 | private: |
166 | Q_DECLARE_PRIVATE(QDateTimeEdit) |
167 | Q_DISABLE_COPY(QDateTimeEdit) |
168 | |
169 | Q_PRIVATE_SLOT(d_func(), void _q_resetButton()) |
170 | }; |
171 | |
172 | class Q_WIDGETS_EXPORT QTimeEdit : public QDateTimeEdit |
173 | { |
174 | Q_OBJECT |
175 | Q_PROPERTY(QTime time READ time WRITE setTime NOTIFY userTimeChanged USER true) |
176 | public: |
177 | explicit QTimeEdit(QWidget *parent = nullptr); |
178 | explicit QTimeEdit(QTime time, QWidget *parent = nullptr); |
179 | ~QTimeEdit(); |
180 | |
181 | Q_SIGNALS: |
182 | void userTimeChanged(QTime time); |
183 | }; |
184 | |
185 | class Q_WIDGETS_EXPORT QDateEdit : public QDateTimeEdit |
186 | { |
187 | Q_OBJECT |
188 | Q_PROPERTY(QDate date READ date WRITE setDate NOTIFY userDateChanged USER true) |
189 | public: |
190 | explicit QDateEdit(QWidget *parent = nullptr); |
191 | explicit QDateEdit(QDate date, QWidget *parent = nullptr); |
192 | ~QDateEdit(); |
193 | |
194 | Q_SIGNALS: |
195 | void userDateChanged(QDate date); |
196 | }; |
197 | |
198 | Q_DECLARE_OPERATORS_FOR_FLAGS(QDateTimeEdit::Sections) |
199 | |
200 | QT_END_NAMESPACE |
201 | |
202 | #endif // QDATETIMEEDIT_H |
203 | |