qdatetimeedit.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/widgets/widgets/qdatetimeedit.cpp
Source codeSwitch to Preprocessed file
LineSourceCount
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#include <private/qdatetimeedit_p.h>-
41#include <qabstractspinbox.h>-
42#include <qapplication.h>-
43#include <qdatetimeedit.h>-
44#include <qdesktopwidget.h>-
45#include <qdebug.h>-
46#include <qevent.h>-
47#include <qlineedit.h>-
48#include <private/qlineedit_p.h>-
49#include <qlocale.h>-
50#include <qpainter.h>-
51#include <qlayout.h>-
52#include <qset.h>-
53#include <qstyle.h>-
54-
55#include <algorithm>-
56-
57#ifndef QT_NO_DATETIMEEDIT-
58-
59//#define QDATETIMEEDIT_QDTEDEBUG-
60#ifdef QDATETIMEEDIT_QDTEDEBUG-
61# define QDTEDEBUG qDebug() << QString::fromLatin1("%1:%2").arg(__FILE__).arg(__LINE__)-
62# define QDTEDEBUGN qDebug-
63#else-
64# define QDTEDEBUG if (false) qDebug()-
65# define QDTEDEBUGN if (false) qDebug-
66#endif-
67-
68QT_BEGIN_NAMESPACE-
69-
70// --- QDateTimeEdit ----
71-
72/*!-
73 \class QDateTimeEdit-
74 \brief The QDateTimeEdit class provides a widget for editing dates and times.-
75-
76 \ingroup basicwidgets-
77 \inmodule QtWidgets-
78-
79 QDateTimeEdit allows the user to edit dates by using the keyboard or-
80 the arrow keys to increase and decrease date and time values. The-
81 arrow keys can be used to move from section to section within the-
82 QDateTimeEdit box. Dates and times appear in accordance with the-
83 format set; see setDisplayFormat().-
84-
85 \snippet code/src_gui_widgets_qdatetimeedit.cpp 0-
86-
87 Here we've created a new QDateTimeEdit object initialized with-
88 today's date, and restricted the valid date range to today plus or-
89 minus 365 days. We've set the order to month, day, year.-
90-
91 The minimum value for QDateTimeEdit is 14 September 1752. You can-
92 change this by calling setMinimumDate(), taking into account that-
93 the minimum value for QDate is 2 January 4713BC.-
94-
95 Other useful functions are setMaximumDate(), setMinimumTime()-
96 and setMaximumTime().-
97-
98 \section1 Using a Pop-up Calendar Widget-
99-
100 QDateTimeEdit can be configured to allow a QCalendarWidget to be used-
101 to select dates. This is enabled by setting the calendarPopup property.-
102 Additionally, you can supply a custom calendar widget for use as the-
103 calendar pop-up by calling the setCalendarWidget() function. The existing-
104 calendar widget can be retrieved with calendarWidget().-
105-
106 \table 100%-
107 \row \li \inlineimage windowsvista-datetimeedit.png Screenshot of a Windows Vista style date time editing widget-
108 \li A date time editing widget shown in the \l{Windows Vista Style Widget Gallery}{Windows Vista widget style}.-
109 \row \li \inlineimage macintosh-datetimeedit.png Screenshot of a Macintosh style date time editing widget-
110 \li A date time editing widget shown in the \l{Macintosh Style Widget Gallery}{Macintosh widget style}.-
111 \row \li \inlineimage fusion-datetimeedit.png Screenshot of a Fusion style date time editing widget-
112 \li A date time editing widget shown in the \l{Fusion Style Widget Gallery}{Fusion widget style}.-
113 \endtable-
114-
115 \sa QDateEdit, QTimeEdit, QDate, QTime-
116*/-
117-
118/*!-
119 \enum QDateTimeEdit::Section-
120-
121 \value NoSection-
122 \value AmPmSection-
123 \value MSecSection-
124 \value SecondSection-
125 \value MinuteSection-
126 \value HourSection-
127 \value DaySection-
128 \value MonthSection-
129 \value YearSection-
130 \omitvalue DateSections_Mask-
131 \omitvalue TimeSections_Mask-
132*/-
133-
134/*!-
135 \fn void QDateTimeEdit::dateTimeChanged(const QDateTime &datetime)-
136-
137 This signal is emitted whenever the date or time is changed. The-
138 new date and time is passed in \a datetime.-
139*/-
140-
141/*!-
142 \fn void QDateTimeEdit::timeChanged(const QTime &time)-
143-
144 This signal is emitted whenever the time is changed. The new time-
145 is passed in \a time.-
146*/-
147-
148/*!-
149 \fn void QDateTimeEdit::dateChanged(const QDate &date)-
150-
151 This signal is emitted whenever the date is changed. The new date-
152 is passed in \a date.-
153*/-
154-
155-
156/*!-
157 Constructs an empty date time editor with a \a parent.-
158*/-
159-
160QDateTimeEdit::QDateTimeEdit(QWidget *parent)-
161 : QAbstractSpinBox(*new QDateTimeEditPrivate, parent)-
162{-
163 Q_D(QDateTimeEdit);-
164 d->init(QDateTime(QDATETIMEEDIT_DATE_INITIAL, QDATETIMEEDIT_TIME_MIN));-
165}
never executed: end of block
0
166-
167/*!-
168 Constructs an empty date time editor with a \a parent. The value-
169 is set to \a datetime.-
170*/-
171-
172QDateTimeEdit::QDateTimeEdit(const QDateTime &datetime, QWidget *parent)-
173 : QAbstractSpinBox(*new QDateTimeEditPrivate, parent)-
174{-
175 Q_D(QDateTimeEdit);-
176 d->init(datetime.isValid() ? datetime : QDateTime(QDATETIMEEDIT_DATE_INITIAL,-
177 QDATETIMEEDIT_TIME_MIN));-
178}
never executed: end of block
0
179-
180/*!-
181 \fn QDateTimeEdit::QDateTimeEdit(const QDate &date, QWidget *parent)-
182-
183 Constructs an empty date time editor with a \a parent.-
184 The value is set to \a date.-
185*/-
186-
187QDateTimeEdit::QDateTimeEdit(const QDate &date, QWidget *parent)-
188 : QAbstractSpinBox(*new QDateTimeEditPrivate, parent)-
189{-
190 Q_D(QDateTimeEdit);-
191 d->init(date.isValid() ? date : QDATETIMEEDIT_DATE_INITIAL);-
192}
never executed: end of block
0
193-
194/*!-
195 \fn QDateTimeEdit::QDateTimeEdit(const QTime &time, QWidget *parent)-
196-
197 Constructs an empty date time editor with a \a parent.-
198 The value is set to \a time.-
199*/-
200-
201QDateTimeEdit::QDateTimeEdit(const QTime &time, QWidget *parent)-
202 : QAbstractSpinBox(*new QDateTimeEditPrivate, parent)-
203{-
204 Q_D(QDateTimeEdit);-
205 d->init(time.isValid() ? time : QDATETIMEEDIT_TIME_MIN);-
206}
never executed: end of block
0
207-
208/*!-
209 \internal-
210*/-
211-
212QDateTimeEdit::QDateTimeEdit(const QVariant &var, QVariant::Type parserType, QWidget *parent)-
213 : QAbstractSpinBox(*new QDateTimeEditPrivate, parent)-
214{-
215 Q_D(QDateTimeEdit);-
216 d->parserType = parserType;-
217 d->init(var);-
218}
never executed: end of block
0
219-
220/*!-
221 Destructor.-
222*/-
223QDateTimeEdit::~QDateTimeEdit()-
224{-
225}-
226-
227/*!-
228 \property QDateTimeEdit::dateTime-
229 \brief the QDateTime that is set in the QDateTimeEdit-
230-
231 When setting this property the timespec of the QDateTimeEdit remains the same-
232 and the timespec of the new QDateTime is ignored.-
233-
234 By default, this property contains a date that refers to January 1,-
235 2000 and a time of 00:00:00 and 0 milliseconds.-
236-
237 \sa date, time-
238*/-
239-
240QDateTime QDateTimeEdit::dateTime() const-
241{-
242 Q_D(const QDateTimeEdit);-
243 return d->value.toDateTime();
never executed: return d->value.toDateTime();
0
244}-
245-
246void QDateTimeEdit::setDateTime(const QDateTime &datetime)-
247{-
248 Q_D(QDateTimeEdit);-
249 if (datetime.isValid()) {
datetime.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
0
250 d->clearCache();-
251 const QDate date = datetime.date();-
252 if (!(d->sections & DateSections_Mask))
!(d->sections ...Sections_Mask)Description
TRUEnever evaluated
FALSEnever evaluated
0
253 setDateRange(date, date);
never executed: setDateRange(date, date);
0
254 d->setValue(QDateTime(date, datetime.time(), d->spec), EmitIfChanged);-
255 }
never executed: end of block
0
256}
never executed: end of block
0
257-
258/*!-
259 \property QDateTimeEdit::date-
260 \brief the QDate that is set in the widget-
261-
262 By default, this property contains a date that refers to January 1, 2000.-
263-
264 \sa time, dateTime-
265*/-
266-
267/*!-
268 Returns the date of the date time edit.-
269*/-
270QDate QDateTimeEdit::date() const-
271{-
272 Q_D(const QDateTimeEdit);-
273 return d->value.toDate();
never executed: return d->value.toDate();
0
274}-
275-
276void QDateTimeEdit::setDate(const QDate &date)-
277{-
278 Q_D(QDateTimeEdit);-
279 if (date.isValid()) {
date.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
0
280 if (!(d->sections & DateSections_Mask))
!(d->sections ...Sections_Mask)Description
TRUEnever evaluated
FALSEnever evaluated
0
281 setDateRange(date, date);
never executed: setDateRange(date, date);
0
282-
283 d->clearCache();-
284 d->setValue(QDateTime(date, d->value.toTime(), d->spec), EmitIfChanged);-
285 d->updateTimeSpec();-
286 }
never executed: end of block
0
287}
never executed: end of block
0
288-
289/*!-
290 \property QDateTimeEdit::time-
291 \brief the QTime that is set in the widget-
292-
293 By default, this property contains a time of 00:00:00 and 0 milliseconds.-
294-
295 \sa date, dateTime-
296*/-
297-
298/*!-
299 Returns the time of the date time edit.-
300*/-
301QTime QDateTimeEdit::time() const-
302{-
303 Q_D(const QDateTimeEdit);-
304 return d->value.toTime();
never executed: return d->value.toTime();
0
305}-
306-
307void QDateTimeEdit::setTime(const QTime &time)-
308{-
309 Q_D(QDateTimeEdit);-
310 if (time.isValid()) {
time.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
0
311 d->clearCache();-
312 d->setValue(QDateTime(d->value.toDate(), time, d->spec), EmitIfChanged);-
313 }
never executed: end of block
0
314}
never executed: end of block
0
315-
316-
317/*!-
318 \property QDateTimeEdit::minimumDateTime-
319 \since 4.4-
320-
321 \brief the minimum datetime of the date time edit-
322-
323 When setting this property the \l maximumDateTime() is adjusted if-
324 necessary to ensure that the range remains valid. If the datetime is-
325 not a valid QDateTime object, this function does nothing.-
326-
327 The default minimumDateTime can be restored with-
328 clearMinimumDateTime()-
329-
330 By default, this property contains a date that refers to September 14,-
331 1752 and a time of 00:00:00 and 0 milliseconds.-
332-
333 \sa maximumDateTime(), minimumTime(), maximumTime(), minimumDate(),-
334 maximumDate(), setDateTimeRange(), setDateRange(), setTimeRange(),-
335 clearMaximumDateTime(), clearMinimumDate(),-
336 clearMaximumDate(), clearMinimumTime(), clearMaximumTime()-
337*/-
338-
339QDateTime QDateTimeEdit::minimumDateTime() const-
340{-
341 Q_D(const QDateTimeEdit);-
342 return d->minimum.toDateTime();
never executed: return d->minimum.toDateTime();
0
343}-
344-
345void QDateTimeEdit::clearMinimumDateTime()-
346{-
347 setMinimumDateTime(QDateTime(QDATETIMEEDIT_COMPAT_DATE_MIN, QDATETIMEEDIT_TIME_MIN));-
348}
never executed: end of block
0
349-
350void QDateTimeEdit::setMinimumDateTime(const QDateTime &dt)-
351{-
352 Q_D(QDateTimeEdit);-
353 if (dt.isValid() && dt.date() >= QDATETIMEEDIT_DATE_MIN) {
dt.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
dt.date() >= QDate(100, 1, 1)Description
TRUEnever evaluated
FALSEnever evaluated
0
354 const QDateTime m = dt.toTimeSpec(d->spec);-
355 const QDateTime max = d->maximum.toDateTime();-
356 d->setRange(m, (max > m ? max : m));-
357 }
never executed: end of block
0
358}
never executed: end of block
0
359-
360/*!-
361 \property QDateTimeEdit::maximumDateTime-
362 \since 4.4-
363-
364 \brief the maximum datetime of the date time edit-
365-
366 When setting this property the \l minimumDateTime() is adjusted if-
367 necessary to ensure that the range remains valid. If the datetime is-
368 not a valid QDateTime object, this function does nothing.-
369-
370 The default maximumDateTime can be restored with-
371 clearMaximumDateTime().-
372-
373 By default, this property contains a date that refers to 31 December,-
374 7999 and a time of 23:59:59 and 999 milliseconds.-
375-
376 \sa minimumDateTime(), minimumTime(), maximumTime(), minimumDate(),-
377 maximumDate(), setDateTimeRange(), setDateRange(), setTimeRange(),-
378 clearMinimumDateTime(), clearMinimumDate(),-
379 clearMaximumDate(), clearMinimumTime(), clearMaximumTime()-
380*/-
381-
382QDateTime QDateTimeEdit::maximumDateTime() const-
383{-
384 Q_D(const QDateTimeEdit);-
385 return d->maximum.toDateTime();
never executed: return d->maximum.toDateTime();
0
386}-
387-
388void QDateTimeEdit::clearMaximumDateTime()-
389{-
390 setMaximumDateTime(QDATETIMEEDIT_DATETIME_MAX);-
391}
never executed: end of block
0
392-
393void QDateTimeEdit::setMaximumDateTime(const QDateTime &dt)-
394{-
395 Q_D(QDateTimeEdit);-
396 if (dt.isValid() && dt.date() <= QDATETIMEEDIT_DATE_MAX) {
dt.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
dt.date() <= Q...(7999, 12, 31)Description
TRUEnever evaluated
FALSEnever evaluated
0
397 const QDateTime m = dt.toTimeSpec(d->spec);-
398 const QDateTime min = d->minimum.toDateTime();-
399 d->setRange((min < m ? min : m), m);-
400 }
never executed: end of block
0
401}
never executed: end of block
0
402-
403-
404/*!-
405 Convenience function to set minimum and maximum date time with one-
406 function call.-
407 \since 4.4-
408-
409 \snippet code/src_gui_widgets_qdatetimeedit.cpp 1-
410-
411 is analogous to:-
412-
413 \snippet code/src_gui_widgets_qdatetimeedit.cpp 2-
414-
415 If either \a min or \a max are not valid, this function does-
416 nothing.-
417-
418 \sa setMinimumDate(), maximumDate(), setMaximumDate(),-
419 clearMinimumDate(), setMinimumTime(), maximumTime(),-
420 setMaximumTime(), clearMinimumTime(), QDateTime::isValid()-
421*/-
422-
423void QDateTimeEdit::setDateTimeRange(const QDateTime &min, const QDateTime &max)-
424{-
425 Q_D(QDateTimeEdit);-
426 const QDateTime minimum = min.toTimeSpec(d->spec);-
427 QDateTime maximum = max.toTimeSpec(d->spec);-
428 if (min > max)
min > maxDescription
TRUEnever evaluated
FALSEnever evaluated
0
429 maximum = minimum;
never executed: maximum = minimum;
0
430 d->setRange(minimum, maximum);-
431}
never executed: end of block
0
432-
433/*!-
434 \property QDateTimeEdit::minimumDate-
435-
436 \brief the minimum date of the date time edit-
437-
438 When setting this property the \l maximumDate is adjusted if-
439 necessary, to ensure that the range remains valid. If the date is-
440 not a valid QDate object, this function does nothing.-
441-
442 By default, this property contains a date that refers to September 14, 1752.-
443 The minimum date must be at least the first day in year 100, otherwise-
444 setMinimumDate() has no effect.-
445-
446 \sa minimumTime(), maximumTime(), setDateRange()-
447*/-
448-
449QDate QDateTimeEdit::minimumDate() const-
450{-
451 Q_D(const QDateTimeEdit);-
452 return d->minimum.toDate();
never executed: return d->minimum.toDate();
0
453}-
454-
455void QDateTimeEdit::setMinimumDate(const QDate &min)-
456{-
457 Q_D(QDateTimeEdit);-
458 if (min.isValid() && min >= QDATETIMEEDIT_DATE_MIN) {
min.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
min >= QDate(100, 1, 1)Description
TRUEnever evaluated
FALSEnever evaluated
0
459 setMinimumDateTime(QDateTime(min, d->minimum.toTime(), d->spec));-
460 }
never executed: end of block
0
461}
never executed: end of block
0
462-
463void QDateTimeEdit::clearMinimumDate()-
464{-
465 setMinimumDate(QDATETIMEEDIT_COMPAT_DATE_MIN);-
466}
never executed: end of block
0
467-
468/*!-
469 \property QDateTimeEdit::maximumDate-
470-
471 \brief the maximum date of the date time edit-
472-
473 When setting this property the \l minimumDate is adjusted if-
474 necessary to ensure that the range remains valid. If the date is-
475 not a valid QDate object, this function does nothing.-
476-
477 By default, this property contains a date that refers to December 31, 7999.-
478-
479 \sa minimumDate, minimumTime, maximumTime, setDateRange()-
480*/-
481-
482QDate QDateTimeEdit::maximumDate() const-
483{-
484 Q_D(const QDateTimeEdit);-
485 return d->maximum.toDate();
never executed: return d->maximum.toDate();
0
486}-
487-
488void QDateTimeEdit::setMaximumDate(const QDate &max)-
489{-
490 Q_D(QDateTimeEdit);-
491 if (max.isValid()) {
max.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
0
492 setMaximumDateTime(QDateTime(max, d->maximum.toTime(), d->spec));-
493 }
never executed: end of block
0
494}
never executed: end of block
0
495-
496void QDateTimeEdit::clearMaximumDate()-
497{-
498 setMaximumDate(QDATETIMEEDIT_DATE_MAX);-
499}
never executed: end of block
0
500-
501/*!-
502 \property QDateTimeEdit::minimumTime-
503-
504 \brief the minimum time of the date time edit-
505-
506 When setting this property the \l maximumTime is adjusted if-
507 necessary, to ensure that the range remains valid. If the time is-
508 not a valid QTime object, this function does nothing.-
509-
510 By default, this property contains a time of 00:00:00 and 0 milliseconds.-
511-
512 \sa maximumTime, minimumDate, maximumDate, setTimeRange()-
513*/-
514-
515QTime QDateTimeEdit::minimumTime() const-
516{-
517 Q_D(const QDateTimeEdit);-
518 return d->minimum.toTime();
never executed: return d->minimum.toTime();
0
519}-
520-
521void QDateTimeEdit::setMinimumTime(const QTime &min)-
522{-
523 Q_D(QDateTimeEdit);-
524 if (min.isValid()) {
min.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
0
525 const QDateTime m(d->minimum.toDate(), min, d->spec);-
526 setMinimumDateTime(m);-
527 }
never executed: end of block
0
528}
never executed: end of block
0
529-
530void QDateTimeEdit::clearMinimumTime()-
531{-
532 setMinimumTime(QDATETIMEEDIT_TIME_MIN);-
533}
never executed: end of block
0
534-
535/*!-
536 \property QDateTimeEdit::maximumTime-
537-
538 \brief the maximum time of the date time edit-
539-
540 When setting this property, the \l minimumTime is adjusted if-
541 necessary to ensure that the range remains valid. If the time is-
542 not a valid QTime object, this function does nothing.-
543-
544 By default, this property contains a time of 23:59:59 and 999 milliseconds.-
545-
546 \sa minimumTime, minimumDate, maximumDate, setTimeRange()-
547*/-
548QTime QDateTimeEdit::maximumTime() const-
549{-
550 Q_D(const QDateTimeEdit);-
551 return d->maximum.toTime();
never executed: return d->maximum.toTime();
0
552}-
553-
554void QDateTimeEdit::setMaximumTime(const QTime &max)-
555{-
556 Q_D(QDateTimeEdit);-
557 if (max.isValid()) {
max.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
0
558 const QDateTime m(d->maximum.toDate(), max);-
559 setMaximumDateTime(m);-
560 }
never executed: end of block
0
561}
never executed: end of block
0
562-
563void QDateTimeEdit::clearMaximumTime()-
564{-
565 setMaximumTime(QDATETIMEEDIT_TIME_MAX);-
566}
never executed: end of block
0
567-
568/*!-
569 Convenience function to set minimum and maximum date with one-
570 function call.-
571-
572 \snippet code/src_gui_widgets_qdatetimeedit.cpp 3-
573-
574 is analogous to:-
575-
576 \snippet code/src_gui_widgets_qdatetimeedit.cpp 4-
577-
578 If either \a min or \a max are not valid, this function does-
579 nothing.-
580-
581 \sa setMinimumDate(), maximumDate(), setMaximumDate(),-
582 clearMinimumDate(), setMinimumTime(), maximumTime(),-
583 setMaximumTime(), clearMinimumTime(), QDate::isValid()-
584*/-
585-
586void QDateTimeEdit::setDateRange(const QDate &min, const QDate &max)-
587{-
588 Q_D(QDateTimeEdit);-
589 if (min.isValid() && max.isValid()) {
min.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
max.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
0
590 setDateTimeRange(QDateTime(min, d->minimum.toTime(), d->spec),-
591 QDateTime(max, d->maximum.toTime(), d->spec));-
592 }
never executed: end of block
0
593}
never executed: end of block
0
594-
595/*!-
596 Convenience function to set minimum and maximum time with one-
597 function call.-
598-
599 \snippet code/src_gui_widgets_qdatetimeedit.cpp 5-
600-
601 is analogous to:-
602-
603 \snippet code/src_gui_widgets_qdatetimeedit.cpp 6-
604-
605 If either \a min or \a max are not valid, this function does-
606 nothing.-
607-
608 \sa setMinimumDate(), maximumDate(), setMaximumDate(),-
609 clearMinimumDate(), setMinimumTime(), maximumTime(),-
610 setMaximumTime(), clearMinimumTime(), QTime::isValid()-
611*/-
612-
613void QDateTimeEdit::setTimeRange(const QTime &min, const QTime &max)-
614{-
615 Q_D(QDateTimeEdit);-
616 if (min.isValid() && max.isValid()) {
min.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
max.isValid()Description
TRUEnever evaluated
FALSEnever evaluated
0
617 setDateTimeRange(QDateTime(d->minimum.toDate(), min, d->spec),-
618 QDateTime(d->maximum.toDate(), max, d->spec));-
619 }
never executed: end of block
0
620}
never executed: end of block
0
621-
622/*!-
623 \property QDateTimeEdit::displayedSections-
624-
625 \brief the currently displayed fields of the date time edit-
626-
627 Returns a bit set of the displayed sections for this format.-
628 \a setDisplayFormat(), displayFormat()-
629*/-
630-
631QDateTimeEdit::Sections QDateTimeEdit::displayedSections() const-
632{-
633 Q_D(const QDateTimeEdit);-
634 return d->sections;
never executed: return d->sections;
0
635}-
636-
637/*!-
638 \property QDateTimeEdit::currentSection-
639-
640 \brief the current section of the spinbox-
641 \a setCurrentSection()-
642*/-
643-
644QDateTimeEdit::Section QDateTimeEdit::currentSection() const-
645{-
646 Q_D(const QDateTimeEdit);-
647#ifdef QT_KEYPAD_NAVIGATION-
648 if (QApplication::keypadNavigationEnabled() && d->focusOnButton)-
649 return NoSection;-
650#endif-
651 return d->convertToPublic(d->sectionType(d->currentSectionIndex));
never executed: return d->convertToPublic(d->sectionType(d->currentSectionIndex));
0
652}-
653-
654void QDateTimeEdit::setCurrentSection(Section section)-
655{-
656 Q_D(QDateTimeEdit);-
657 if (section == NoSection || !(section & d->sections))
section == NoSectionDescription
TRUEnever evaluated
FALSEnever evaluated
!(section & d->sections)Description
TRUEnever evaluated
FALSEnever evaluated
0
658 return;
never executed: return;
0
659-
660 d->updateCache(d->value, d->displayText());-
661 const int size = d->sectionNodes.size();-
662 int index = d->currentSectionIndex + 1;-
663 for (int i=0; i<2; ++i) {
i<2Description
TRUEnever evaluated
FALSEnever evaluated
0
664 while (index < size) {
index < sizeDescription
TRUEnever evaluated
FALSEnever evaluated
0
665 if (d->convertToPublic(d->sectionType(index)) == section) {
d->convertToPu...x)) == sectionDescription
TRUEnever evaluated
FALSEnever evaluated
0
666 d->edit->setCursorPosition(d->sectionPos(index));-
667 QDTEDEBUG << d->sectionPos(index);
dead code: QMessageLogger(__FILE__, 667, __PRETTY_FUNCTION__).debug() << d->sectionPos(index);
-
668 return;
never executed: return;
0
669 }-
670 ++index;-
671 }
never executed: end of block
0
672 index = 0;-
673 }
never executed: end of block
0
674}
never executed: end of block
0
675-
676/*!-
677 \since 4.3-
678-
679 Returns the Section at \a index.-
680-
681 If the format is 'yyyy/MM/dd', sectionAt(0) returns YearSection,-
682 sectionAt(1) returns MonthSection, and sectionAt(2) returns-
683 YearSection,-
684*/-
685-
686QDateTimeEdit::Section QDateTimeEdit::sectionAt(int index) const-
687{-
688 Q_D(const QDateTimeEdit);-
689 if (index < 0 || index >= d->sectionNodes.size())
index < 0Description
TRUEnever evaluated
FALSEnever evaluated
index >= d->se...onNodes.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
690 return NoSection;
never executed: return NoSection;
0
691 return d->convertToPublic(d->sectionType(index));
never executed: return d->convertToPublic(d->sectionType(index));
0
692}-
693-
694/*!-
695 \since 4.3-
696-
697 \property QDateTimeEdit::sectionCount-
698-
699 \brief the number of sections displayed.-
700 If the format is 'yyyy/yy/yyyy', sectionCount returns 3-
701*/-
702-
703int QDateTimeEdit::sectionCount() const-
704{-
705 Q_D(const QDateTimeEdit);-
706 return d->sectionNodes.size();
never executed: return d->sectionNodes.size();
0
707}-
708-
709-
710/*!-
711 \since 4.3-
712-
713 \property QDateTimeEdit::currentSectionIndex-
714-
715 \brief the current section index of the spinbox-
716-
717 If the format is 'yyyy/MM/dd', the displayText is '2001/05/21', and-
718 the cursorPosition is 5, currentSectionIndex returns 1. If the-
719 cursorPosition is 3, currentSectionIndex is 0, and so on.-
720-
721 \a setCurrentSection()-
722 \sa currentSection()-
723*/-
724-
725int QDateTimeEdit::currentSectionIndex() const-
726{-
727 Q_D(const QDateTimeEdit);-
728 return d->currentSectionIndex;
never executed: return d->currentSectionIndex;
0
729}-
730-
731void QDateTimeEdit::setCurrentSectionIndex(int index)-
732{-
733 Q_D(QDateTimeEdit);-
734 if (index < 0 || index >= d->sectionNodes.size())
index < 0Description
TRUEnever evaluated
FALSEnever evaluated
index >= d->se...onNodes.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
735 return;
never executed: return;
0
736 d->edit->setCursorPosition(d->sectionPos(index));-
737}
never executed: end of block
0
738-
739/*!-
740 \since 4.4-
741-
742 \brief Returns the calendar widget for the editor if calendarPopup is-
743 set to true and (sections() & DateSections_Mask) != 0.-
744-
745 This function creates and returns a calendar widget if none has been set.-
746*/-
747-
748-
749QCalendarWidget *QDateTimeEdit::calendarWidget() const-
750{-
751 Q_D(const QDateTimeEdit);-
752 if (!d->calendarPopup || !(d->sections & QDateTimeParser::DateSectionMask))
!d->calendarPopupDescription
TRUEnever evaluated
FALSEnever evaluated
!(d->sections ...teSectionMask)Description
TRUEnever evaluated
FALSEnever evaluated
0
753 return 0;
never executed: return 0;
0
754 if (!d->monthCalendar) {
!d->monthCalendarDescription
TRUEnever evaluated
FALSEnever evaluated
0
755 const_cast<QDateTimeEditPrivate*>(d)->initCalendarPopup();-
756 }
never executed: end of block
0
757 return d->monthCalendar->calendarWidget();
never executed: return d->monthCalendar->calendarWidget();
0
758}-
759-
760/*!-
761 \since 4.4-
762-
763 Sets the given \a calendarWidget as the widget to be used for the calendar-
764 pop-up. The editor does not automatically take ownership of the calendar widget.-
765-
766 \note calendarPopup must be set to true before setting the calendar widget.-
767 \sa calendarPopup-
768*/-
769void QDateTimeEdit::setCalendarWidget(QCalendarWidget *calendarWidget)-
770{-
771 Q_D(QDateTimeEdit);-
772 if (Q_UNLIKELY(!calendarWidget)) {
__builtin_expe...idget), false)Description
TRUEnever evaluated
FALSEnever evaluated
0
773 qWarning("QDateTimeEdit::setCalendarWidget: Cannot set a null calendar widget");-
774 return;
never executed: return;
0
775 }-
776-
777 if (Q_UNLIKELY(!d->calendarPopup)) {
__builtin_expe...Popup), false)Description
TRUEnever evaluated
FALSEnever evaluated
0
778 qWarning("QDateTimeEdit::setCalendarWidget: calendarPopup is set to false");-
779 return;
never executed: return;
0
780 }-
781-
782 if (Q_UNLIKELY(!(d->display & QDateTimeParser::DateSectionMask))) {
__builtin_expe...Mask)), false)Description
TRUEnever evaluated
FALSEnever evaluated
0
783 qWarning("QDateTimeEdit::setCalendarWidget: no date sections specified");-
784 return;
never executed: return;
0
785 }-
786 d->initCalendarPopup(calendarWidget);-
787}
never executed: end of block
0
788-
789-
790/*!-
791 \since 4.2-
792-
793 Selects \a section. If \a section doesn't exist in the currently-
794 displayed sections, this function does nothing. If \a section is-
795 NoSection, this function will unselect all text in the editor.-
796 Otherwise, this function will move the cursor and the current section-
797 to the selected section.-
798-
799 \sa currentSection()-
800*/-
801-
802void QDateTimeEdit::setSelectedSection(Section section)-
803{-
804 Q_D(QDateTimeEdit);-
805 if (section == NoSection) {
section == NoSectionDescription
TRUEnever evaluated
FALSEnever evaluated
0
806 d->edit->setSelection(d->edit->cursorPosition(), 0);-
807 } else if (section & d->sections) {
never executed: end of block
section & d->sectionsDescription
TRUEnever evaluated
FALSEnever evaluated
0
808 if (currentSection() != section)
currentSection() != sectionDescription
TRUEnever evaluated
FALSEnever evaluated
0
809 setCurrentSection(section);
never executed: setCurrentSection(section);
0
810 d->setSelected(d->currentSectionIndex);-
811 }
never executed: end of block
0
812}
never executed: end of block
0
813-
814-
815-
816/*!-
817 \fn QString QDateTimeEdit::sectionText(Section section) const-
818-
819 Returns the text from the given \a section.-
820-
821 \sa currentSection()-
822*/-
823-
824QString QDateTimeEdit::sectionText(Section section) const-
825{-
826 Q_D(const QDateTimeEdit);-
827 if (section == QDateTimeEdit::NoSection || !(section & d->sections)) {
section == QDa...dit::NoSectionDescription
TRUEnever evaluated
FALSEnever evaluated
!(section & d->sections)Description
TRUEnever evaluated
FALSEnever evaluated
0
828 return QString();
never executed: return QString();
0
829 }-
830-
831 d->updateCache(d->value, d->displayText());-
832 const int sectionIndex = d->absoluteIndex(section, 0);-
833 return d->sectionText(sectionIndex);
never executed: return d->sectionText(sectionIndex);
0
834}-
835-
836/*!-
837 \property QDateTimeEdit::displayFormat-
838-
839 \brief the format used to display the time/date of the date time edit-
840-
841 This format is described in QDateTime::toString() and QDateTime::fromString()-
842-
843 Example format strings (assuming that the date is 2nd of July 1969):-
844-
845 \table-
846 \header \li Format \li Result-
847 \row \li dd.MM.yyyy \li 02.07.1969-
848 \row \li MMM d yy \li Jul 2 69-
849 \row \li MMMM d yy \li July 2 69-
850 \endtable-
851-
852 Note that if you specify a two digit year, it will be interpreted-
853 to be in the century in which the date time edit was initialized.-
854 The default century is the 21 (2000-2099).-
855-
856 If you specify an invalid format the format will not be set.-
857-
858 \sa QDateTime::toString(), displayedSections()-
859*/-
860-
861QString QDateTimeEdit::displayFormat() const-
862{-
863 Q_D(const QDateTimeEdit);-
864 return isRightToLeft() ? d->unreversedFormat : d->displayFormat;
never executed: return isRightToLeft() ? d->unreversedFormat : d->displayFormat;
0
865}-
866-
867void QDateTimeEdit::setDisplayFormat(const QString &format)-
868{-
869 Q_D(QDateTimeEdit);-
870 if (d->parseFormat(format)) {
d->parseFormat(format)Description
TRUEnever evaluated
FALSEnever evaluated
0
871 d->unreversedFormat.clear();-
872 if (isRightToLeft()) {
isRightToLeft()Description
TRUEnever evaluated
FALSEnever evaluated
0
873 d->unreversedFormat = format;-
874 d->displayFormat.clear();-
875 for (int i=d->sectionNodes.size() - 1; i>=0; --i) {
i>=0Description
TRUEnever evaluated
FALSEnever evaluated
0
876 d->displayFormat += d->separators.at(i + 1);-
877 d->displayFormat += d->sectionNode(i).format();-
878 }
never executed: end of block
0
879 d->displayFormat += d->separators.at(0);-
880 std::reverse(d->separators.begin(), d->separators.end());-
881 std::reverse(d->sectionNodes.begin(), d->sectionNodes.end());-
882 }
never executed: end of block
0
883-
884 d->formatExplicitlySet = true;-
885 d->sections = d->convertSections(d->display);-
886 d->clearCache();-
887-
888 d->currentSectionIndex = qMin(d->currentSectionIndex, d->sectionNodes.size() - 1);-
889 const bool timeShown = (d->sections & TimeSections_Mask);-
890 const bool dateShown = (d->sections & DateSections_Mask);-
891 Q_ASSERT(dateShown || timeShown);-
892 if (timeShown && !dateShown) {
timeShownDescription
TRUEnever evaluated
FALSEnever evaluated
!dateShownDescription
TRUEnever evaluated
FALSEnever evaluated
0
893 QTime time = d->value.toTime();-
894 setDateRange(d->value.toDate(), d->value.toDate());-
895 if (d->minimum.toTime() >= d->maximum.toTime()) {
d->minimum.toT...ximum.toTime()Description
TRUEnever evaluated
FALSEnever evaluated
0
896 setTimeRange(QDATETIMEEDIT_TIME_MIN, QDATETIMEEDIT_TIME_MAX);-
897 // if the time range became invalid during the adjustment, the time would have been reset-
898 setTime(time);-
899 }
never executed: end of block
0
900 } else if (dateShown && !timeShown) {
never executed: end of block
dateShownDescription
TRUEnever evaluated
FALSEnever evaluated
!timeShownDescription
TRUEnever evaluated
FALSEnever evaluated
0
901 setTimeRange(QDATETIMEEDIT_TIME_MIN, QDATETIMEEDIT_TIME_MAX);-
902 d->value = QDateTime(d->value.toDate(), QTime(), d->spec);-
903 }
never executed: end of block
0
904 d->updateEdit();-
905 d->_q_editorCursorPositionChanged(-1, 0);-
906 }
never executed: end of block
0
907}
never executed: end of block
0
908-
909/*!-
910 \property QDateTimeEdit::calendarPopup-
911 \brief the current calendar pop-up show mode.-
912 \since 4.2-
913-
914 The calendar pop-up will be shown upon clicking the arrow button.-
915 This property is valid only if there is a valid date display format.-
916-
917 \sa setDisplayFormat()-
918*/-
919-
920bool QDateTimeEdit::calendarPopup() const-
921{-
922 Q_D(const QDateTimeEdit);-
923 return d->calendarPopup;
never executed: return d->calendarPopup;
0
924}-
925-
926void QDateTimeEdit::setCalendarPopup(bool enable)-
927{-
928 Q_D(QDateTimeEdit);-
929 if (enable == d->calendarPopup)
enable == d->calendarPopupDescription
TRUEnever evaluated
FALSEnever evaluated
0
930 return;
never executed: return;
0
931 setAttribute(Qt::WA_MacShowFocusRect, !enable);-
932 d->calendarPopup = enable;-
933#ifdef QT_KEYPAD_NAVIGATION-
934 if (!enable)-
935 d->focusOnButton = false;-
936#endif-
937 d->updateEditFieldGeometry();-
938 update();-
939}
never executed: end of block
0
940-
941/*!-
942 \property QDateTimeEdit::timeSpec-
943 \brief the current timespec used by the date time edit.-
944 \since 4.4-
945*/-
946-
947Qt::TimeSpec QDateTimeEdit::timeSpec() const-
948{-
949 Q_D(const QDateTimeEdit);-
950 return d->spec;
never executed: return d->spec;
0
951}-
952-
953void QDateTimeEdit::setTimeSpec(Qt::TimeSpec spec)-
954{-
955 Q_D(QDateTimeEdit);-
956 if (spec != d->spec) {
spec != d->specDescription
TRUEnever evaluated
FALSEnever evaluated
0
957 d->spec = spec;-
958 d->updateTimeSpec();-
959 }
never executed: end of block
0
960}
never executed: end of block
0
961-
962/*!-
963 \reimp-
964*/-
965-
966QSize QDateTimeEdit::sizeHint() const-
967{-
968 Q_D(const QDateTimeEdit);-
969 if (d->cachedSizeHint.isEmpty()) {
d->cachedSizeHint.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
970 ensurePolished();-
971-
972 const QFontMetrics fm(fontMetrics());-
973 int h = d->edit->sizeHint().height();-
974 int w = 0;-
975 QString s;-
976 s = d->textFromValue(d->minimum) + QLatin1Char(' ');-
977 w = qMax<int>(w, fm.width(s));-
978 s = d->textFromValue(d->maximum) + QLatin1Char(' ');-
979 w = qMax<int>(w, fm.width(s));-
980 if (d->specialValueText.size()) {
d->specialValueText.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
981 s = d->specialValueText;-
982 w = qMax<int>(w, fm.width(s));-
983 }
never executed: end of block
0
984 w += 2; // cursor blinking space-
985-
986 QSize hint(w, h);-
987-
988#ifdef Q_OS_MAC-
989 if (d->calendarPopupEnabled()) {-
990 QStyleOptionComboBox opt;-
991 d->cachedSizeHint = style()->sizeFromContents(QStyle::CT_ComboBox, &opt, hint, this);-
992 } else-
993#endif-
994 {-
995 QStyleOptionSpinBox opt;-
996 initStyleOption(&opt);-
997 d->cachedSizeHint = style()->sizeFromContents(QStyle::CT_SpinBox, &opt, hint, this)-
998 .expandedTo(QApplication::globalStrut());-
999 }-
1000-
1001 d->cachedMinimumSizeHint = d->cachedSizeHint;-
1002 // essentially make minimumSizeHint return the same as sizeHint for datetimeedits-
1003 }
never executed: end of block
0
1004 return d->cachedSizeHint;
never executed: return d->cachedSizeHint;
0
1005}-
1006-
1007-
1008/*!-
1009 \reimp-
1010*/-
1011-
1012bool QDateTimeEdit::event(QEvent *event)-
1013{-
1014 Q_D(QDateTimeEdit);-
1015 switch (event->type()) {-
1016 case QEvent::ApplicationLayoutDirectionChange: {
never executed: case QEvent::ApplicationLayoutDirectionChange:
0
1017 const bool was = d->formatExplicitlySet;-
1018 const QString oldFormat = d->displayFormat;-
1019 d->displayFormat.clear();-
1020 setDisplayFormat(oldFormat);-
1021 d->formatExplicitlySet = was;-
1022 break; }
never executed: break;
0
1023 case QEvent::LocaleChange:
never executed: case QEvent::LocaleChange:
0
1024 d->updateEdit();-
1025 break;
never executed: break;
0
1026 case QEvent::StyleChange:
never executed: case QEvent::StyleChange:
0
1027#ifdef Q_OS_MAC-
1028 case QEvent::MacSizeChange:-
1029#endif-
1030 d->setLayoutItemMargins(QStyle::SE_DateTimeEditLayoutItem);-
1031 break;
never executed: break;
0
1032 default:
never executed: default:
0
1033 break;
never executed: break;
0
1034 }-
1035 return QAbstractSpinBox::event(event);
never executed: return QAbstractSpinBox::event(event);
0
1036}-
1037-
1038/*!-
1039 \reimp-
1040*/-
1041-
1042void QDateTimeEdit::clear()-
1043{-
1044 Q_D(QDateTimeEdit);-
1045 d->clearSection(d->currentSectionIndex);-
1046}
never executed: end of block
0
1047/*!-
1048 \reimp-
1049*/-
1050-
1051void QDateTimeEdit::keyPressEvent(QKeyEvent *event)-
1052{-
1053 Q_D(QDateTimeEdit);-
1054 int oldCurrent = d->currentSectionIndex;-
1055 bool select = true;-
1056 bool inserted = false;-
1057-
1058 switch (event->key()) {-
1059#ifdef QT_KEYPAD_NAVIGATION-
1060 case Qt::Key_NumberSign: //shortcut to popup calendar-
1061 if (QApplication::keypadNavigationEnabled() && d->calendarPopupEnabled()) {-
1062 d->initCalendarPopup();-
1063 d->positionCalendarPopup();-
1064 d->monthCalendar->show();-
1065 return;-
1066 }-
1067 break;-
1068 case Qt::Key_Select:-
1069 if (QApplication::keypadNavigationEnabled()) {-
1070 if (hasEditFocus()) {-
1071 if (d->focusOnButton) {-
1072 d->initCalendarPopup();-
1073 d->positionCalendarPopup();-
1074 d->monthCalendar->show();-
1075 d->focusOnButton = false;-
1076 return;-
1077 }-
1078 setEditFocus(false);-
1079 selectAll();-
1080 } else {-
1081 setEditFocus(true);-
1082-
1083 //hide cursor-
1084 d->edit->d_func()->setCursorVisible(false);-
1085 d->edit->d_func()->control->setCursorBlinkPeriod(0);-
1086 d->setSelected(0);-
1087 }-
1088 }-
1089 return;-
1090#endif-
1091 case Qt::Key_Enter:
never executed: case Qt::Key_Enter:
0
1092 case Qt::Key_Return:
never executed: case Qt::Key_Return:
0
1093 d->interpret(AlwaysEmit);-
1094 d->setSelected(d->currentSectionIndex, true);-
1095 event->ignore();-
1096 emit editingFinished();-
1097 return;
never executed: return;
0
1098 default:
never executed: default:
0
1099#ifdef QT_KEYPAD_NAVIGATION-
1100 if (QApplication::keypadNavigationEnabled() && !hasEditFocus()-
1101 && !event->text().isEmpty() && event->text().at(0).isLetterOrNumber()) {-
1102 setEditFocus(true);-
1103-
1104 //hide cursor-
1105 d->edit->d_func()->setCursorVisible(false);-
1106 d->edit->d_func()->control->setCursorBlinkPeriod(0);-
1107 d->setSelected(0);-
1108 oldCurrent = 0;-
1109 }-
1110#endif-
1111 if (!d->isSeparatorKey(event)) {
!d->isSeparatorKey(event)Description
TRUEnever evaluated
FALSEnever evaluated
0
1112 inserted = select = !event->text().isEmpty() && event->text().at(0).isPrint()
!event->text().isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
event->text().at(0).isPrint()Description
TRUEnever evaluated
FALSEnever evaluated
0
1113 && !(event->modifiers() & ~(Qt::ShiftModifier|Qt::KeypadModifier));
!(event->modif...ypadModifier))Description
TRUEnever evaluated
FALSEnever evaluated
0
1114 break;
never executed: break;
0
1115 }-
1116 case Qt::Key_Left:
code before this statement never executed: case Qt::Key_Left:
never executed: case Qt::Key_Left:
0
1117 case Qt::Key_Right:
never executed: case Qt::Key_Right:
0
1118 if (event->key() == Qt::Key_Left || event->key() == Qt::Key_Right) {
event->key() == Qt::Key_LeftDescription
TRUEnever evaluated
FALSEnever evaluated
event->key() == Qt::Key_RightDescription
TRUEnever evaluated
FALSEnever evaluated
0
1119 if (-
1120#ifdef QT_KEYPAD_NAVIGATION-
1121 QApplication::keypadNavigationEnabled() && !hasEditFocus()-
1122 || !QApplication::keypadNavigationEnabled() &&-
1123#endif-
1124 !(event->modifiers() & Qt::ControlModifier)) {
!(event->modif...ntrolModifier)Description
TRUEnever evaluated
FALSEnever evaluated
0
1125 select = false;-
1126 break;
never executed: break;
0
1127 }-
1128#ifdef Q_DEAD_CODE_FROM_QT4_MAC-
1129 else-
1130#ifdef QT_KEYPAD_NAVIGATION-
1131 if (!QApplication::keypadNavigationEnabled())-
1132#endif-
1133 {-
1134 select = (event->modifiers() & Qt::ShiftModifier);-
1135 break;-
1136 }-
1137#endif-
1138 }
never executed: end of block
0
1139 // else fall through-
1140 case Qt::Key_Backtab:
code before this statement never executed: case Qt::Key_Backtab:
never executed: case Qt::Key_Backtab:
0
1141 case Qt::Key_Tab: {
never executed: case Qt::Key_Tab:
0
1142 event->accept();-
1143 if (d->specialValue()) {
d->specialValue()Description
TRUEnever evaluated
FALSEnever evaluated
0
1144 d->edit->setSelection(d->edit->cursorPosition(), 0);-
1145 return;
never executed: return;
0
1146 }-
1147 const bool forward = event->key() != Qt::Key_Left && event->key() != Qt::Key_Backtab
event->key() != Qt::Key_LeftDescription
TRUEnever evaluated
FALSEnever evaluated
event->key() !...t::Key_BacktabDescription
TRUEnever evaluated
FALSEnever evaluated
0
1148 && (event->key() != Qt::Key_Tab || !(event->modifiers() & Qt::ShiftModifier));
event->key() != Qt::Key_TabDescription
TRUEnever evaluated
FALSEnever evaluated
!(event->modif...ShiftModifier)Description
TRUEnever evaluated
FALSEnever evaluated
0
1149#ifdef QT_KEYPAD_NAVIGATION-
1150 int newSection = d->nextPrevSection(d->currentSectionIndex, forward);-
1151 if (QApplication::keypadNavigationEnabled()) {-
1152 if (d->focusOnButton) {-
1153 newSection = forward ? 0 : d->sectionNodes.size() - 1;-
1154 d->focusOnButton = false;-
1155 update();-
1156 } else if (newSection < 0 && select && d->calendarPopupEnabled()) {-
1157 setSelectedSection(NoSection);-
1158 d->focusOnButton = true;-
1159 update();-
1160 return;-
1161 }-
1162 }-
1163 // only allow date/time sections to be selected.-
1164 if (newSection & ~(QDateTimeParser::TimeSectionMask | QDateTimeParser::DateSectionMask))-
1165 return;-
1166#endif-
1167 //key tab and backtab will be managed thrgout QWidget::event-
1168 if (event->key() != Qt::Key_Backtab && event->key() != Qt::Key_Tab)
event->key() !...t::Key_BacktabDescription
TRUEnever evaluated
FALSEnever evaluated
event->key() != Qt::Key_TabDescription
TRUEnever evaluated
FALSEnever evaluated
0
1169 focusNextPrevChild(forward);
never executed: focusNextPrevChild(forward);
0
1170-
1171 return; }
never executed: return;
0
1172 }-
1173 QAbstractSpinBox::keyPressEvent(event);-
1174 if (select && !d->edit->hasSelectedText()) {
selectDescription
TRUEnever evaluated
FALSEnever evaluated
!d->edit->hasSelectedText()Description
TRUEnever evaluated
FALSEnever evaluated
0
1175 if (inserted && d->sectionAt(d->edit->cursorPosition()) == QDateTimeParser::NoSectionIndex) {
insertedDescription
TRUEnever evaluated
FALSEnever evaluated
d->sectionAt(d...NoSectionIndexDescription
TRUEnever evaluated
FALSEnever evaluated
0
1176 QString str = d->displayText();-
1177 int pos = d->edit->cursorPosition();-
1178 if (validate(str, pos) == QValidator::Acceptable
validate(str, ...or::AcceptableDescription
TRUEnever evaluated
FALSEnever evaluated
0
1179 && (d->sectionNodes.at(oldCurrent).count != 1
d->sectionNode...nt).count != 1Description
TRUEnever evaluated
FALSEnever evaluated
0
1180 || d->sectionMaxSize(oldCurrent) == d->sectionSize(oldCurrent)
d->sectionMaxS...ze(oldCurrent)Description
TRUEnever evaluated
FALSEnever evaluated
0
1181 || d->skipToNextSection(oldCurrent, d->value.toDateTime(), d->sectionText(oldCurrent)))) {
d->skipToNextS...t(oldCurrent))Description
TRUEnever evaluated
FALSEnever evaluated
0
1182 QDTEDEBUG << "Setting currentsection to"
dead code: QMessageLogger(__FILE__, 1182, __PRETTY_FUNCTION__).debug() << "Setting currentsection to" << d->closestSection(d->edit->cursorPosition(), true) << event->key() << oldCurrent << str;
-
1183 << d->closestSection(d->edit->cursorPosition(), true) << event->key()
dead code: QMessageLogger(__FILE__, 1182, __PRETTY_FUNCTION__).debug() << "Setting currentsection to" << d->closestSection(d->edit->cursorPosition(), true) << event->key() << oldCurrent << str;
-
1184 << oldCurrent << str;
dead code: QMessageLogger(__FILE__, 1182, __PRETTY_FUNCTION__).debug() << "Setting currentsection to" << d->closestSection(d->edit->cursorPosition(), true) << event->key() << oldCurrent << str;
-
1185 const int tmp = d->closestSection(d->edit->cursorPosition(), true);-
1186 if (tmp >= 0)
tmp >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1187 d->currentSectionIndex = tmp;
never executed: d->currentSectionIndex = tmp;
0
1188 }
never executed: end of block
0
1189 }
never executed: end of block
0
1190 if (d->currentSectionIndex != oldCurrent) {
d->currentSect... != oldCurrentDescription
TRUEnever evaluated
FALSEnever evaluated
0
1191 d->setSelected(d->currentSectionIndex);-
1192 }
never executed: end of block
0
1193 }
never executed: end of block
0
1194 if (d->specialValue()) {
d->specialValue()Description
TRUEnever evaluated
FALSEnever evaluated
0
1195 d->edit->setSelection(d->edit->cursorPosition(), 0);-
1196 }
never executed: end of block
0
1197}
never executed: end of block
0
1198-
1199/*!-
1200 \reimp-
1201*/-
1202-
1203#ifndef QT_NO_WHEELEVENT-
1204void QDateTimeEdit::wheelEvent(QWheelEvent *event)-
1205{-
1206 QAbstractSpinBox::wheelEvent(event);-
1207}
never executed: end of block
0
1208#endif-
1209-
1210/*!-
1211 \reimp-
1212*/-
1213-
1214void QDateTimeEdit::focusInEvent(QFocusEvent *event)-
1215{-
1216 Q_D(QDateTimeEdit);-
1217 QAbstractSpinBox::focusInEvent(event);-
1218 QString *frm = 0;-
1219 const int oldPos = d->edit->cursorPosition();-
1220 if (!d->formatExplicitlySet) {
!d->formatExplicitlySetDescription
TRUEnever evaluated
FALSEnever evaluated
0
1221 if (d->displayFormat == d->defaultTimeFormat) {
d->displayForm...aultTimeFormatDescription
TRUEnever evaluated
FALSEnever evaluated
0
1222 frm = &d->defaultTimeFormat;-
1223 } else if (d->displayFormat == d->defaultDateFormat) {
never executed: end of block
d->displayForm...aultDateFormatDescription
TRUEnever evaluated
FALSEnever evaluated
0
1224 frm = &d->defaultDateFormat;-
1225 } else if (d->displayFormat == d->defaultDateTimeFormat) {
never executed: end of block
d->displayForm...DateTimeFormatDescription
TRUEnever evaluated
FALSEnever evaluated
0
1226 frm = &d->defaultDateTimeFormat;-
1227 }
never executed: end of block
0
1228-
1229 if (frm) {
frmDescription
TRUEnever evaluated
FALSEnever evaluated
0
1230 d->readLocaleSettings();-
1231 if (d->displayFormat != *frm) {
d->displayFormat != *frmDescription
TRUEnever evaluated
FALSEnever evaluated
0
1232 setDisplayFormat(*frm);-
1233 d->formatExplicitlySet = false;-
1234 d->edit->setCursorPosition(oldPos);-
1235 }
never executed: end of block
0
1236 }
never executed: end of block
0
1237 }
never executed: end of block
0
1238 const bool oldHasHadFocus = d->hasHadFocus;-
1239 d->hasHadFocus = true;-
1240 bool first = true;-
1241 switch (event->reason()) {-
1242 case Qt::BacktabFocusReason:
never executed: case Qt::BacktabFocusReason:
0
1243 first = false;-
1244 break;
never executed: break;
0
1245 case Qt::MouseFocusReason:
never executed: case Qt::MouseFocusReason:
0
1246 case Qt::PopupFocusReason:
never executed: case Qt::PopupFocusReason:
0
1247 return;
never executed: return;
0
1248 case Qt::ActiveWindowFocusReason:
never executed: case Qt::ActiveWindowFocusReason:
0
1249 if (oldHasHadFocus)
oldHasHadFocusDescription
TRUEnever evaluated
FALSEnever evaluated
0
1250 return;
never executed: return;
0
1251 case Qt::ShortcutFocusReason:
code before this statement never executed: case Qt::ShortcutFocusReason:
never executed: case Qt::ShortcutFocusReason:
0
1252 case Qt::TabFocusReason:
never executed: case Qt::TabFocusReason:
0
1253 default:
never executed: default:
0
1254 break;
never executed: break;
0
1255 }-
1256 if (isRightToLeft())
isRightToLeft()Description
TRUEnever evaluated
FALSEnever evaluated
0
1257 first = !first;
never executed: first = !first;
0
1258 d->updateEdit(); // needed to make it update specialValueText-
1259-
1260 d->setSelected(first ? 0 : d->sectionNodes.size() - 1);-
1261}
never executed: end of block
0
1262-
1263/*!-
1264 \reimp-
1265*/-
1266-
1267bool QDateTimeEdit::focusNextPrevChild(bool next)-
1268{-
1269 Q_D(QDateTimeEdit);-
1270 const int newSection = d->nextPrevSection(d->currentSectionIndex, next);-
1271 switch (d->sectionType(newSection)) {-
1272 case QDateTimeParser::NoSection:
never executed: case QDateTimeParser::NoSection:
0
1273 case QDateTimeParser::FirstSection:
never executed: case QDateTimeParser::FirstSection:
0
1274 case QDateTimeParser::LastSection:
never executed: case QDateTimeParser::LastSection:
0
1275 return QAbstractSpinBox::focusNextPrevChild(next);
never executed: return QAbstractSpinBox::focusNextPrevChild(next);
0
1276 default:
never executed: default:
0
1277 d->edit->deselect();-
1278 d->edit->setCursorPosition(d->sectionPos(newSection));-
1279 QDTEDEBUG << d->sectionPos(newSection);
dead code: QMessageLogger(__FILE__, 1279, __PRETTY_FUNCTION__).debug() << d->sectionPos(newSection);
-
1280 d->setSelected(newSection, true);-
1281 return false;
never executed: return false;
0
1282 }-
1283}-
1284-
1285/*!-
1286 \reimp-
1287*/-
1288-
1289void QDateTimeEdit::stepBy(int steps)-
1290{-
1291 Q_D(QDateTimeEdit);-
1292#ifdef QT_KEYPAD_NAVIGATION-
1293 // with keypad navigation and not editFocus, left right change the date/time by a fixed amount.-
1294 if (QApplication::keypadNavigationEnabled() && !hasEditFocus()) {-
1295 // if date based, shift by day. else shift by 15min-
1296 if (d->sections & DateSections_Mask) {-
1297 setDateTime(dateTime().addDays(steps));-
1298 } else {-
1299 int minutes = time().hour()*60 + time().minute();-
1300 int blocks = minutes/15;-
1301 blocks += steps;-
1302 /* rounding involved */-
1303 if (minutes % 15) {-
1304 if (steps < 0) {-
1305 blocks += 1; // do one less step;-
1306 }-
1307 }-
1308-
1309 minutes = blocks * 15;-
1310-
1311 /* need to take wrapping into account */-
1312 if (!d->wrapping) {-
1313 int max_minutes = d->maximum.toTime().hour()*60 + d->maximum.toTime().minute();-
1314 int min_minutes = d->minimum.toTime().hour()*60 + d->minimum.toTime().minute();-
1315-
1316 if (minutes >= max_minutes) {-
1317 setTime(maximumTime());-
1318 return;-
1319 } else if (minutes <= min_minutes) {-
1320 setTime(minimumTime());-
1321 return;-
1322 }-
1323 }-
1324 setTime(QTime(minutes/60, minutes%60));-
1325 }-
1326 return;-
1327 }-
1328#endif-
1329 // don't optimize away steps == 0. This is the only way to select-
1330 // the currentSection in Qt 4.1.x-
1331 if (d->specialValue() && displayedSections() != AmPmSection) {
d->specialValue()Description
TRUEnever evaluated
FALSEnever evaluated
displayedSecti...!= AmPmSectionDescription
TRUEnever evaluated
FALSEnever evaluated
0
1332 for (int i=0; i<d->sectionNodes.size(); ++i) {
i<d->sectionNodes.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
1333 if (d->sectionType(i) != QDateTimeParser::AmPmSection) {
d->sectionType...r::AmPmSectionDescription
TRUEnever evaluated
FALSEnever evaluated
0
1334 d->currentSectionIndex = i;-
1335 break;
never executed: break;
0
1336 }-
1337 }
never executed: end of block
0
1338 }
never executed: end of block
0
1339 d->setValue(d->stepBy(d->currentSectionIndex, steps, false), EmitIfChanged);-
1340 d->updateCache(d->value, d->displayText());-
1341-
1342 d->setSelected(d->currentSectionIndex);-
1343 d->updateTimeSpec();-
1344}
never executed: end of block
0
1345-
1346/*!-
1347 This virtual function is used by the date time edit whenever it-
1348 needs to display \a dateTime.-
1349-
1350 If you reimplement this, you may also need to reimplement validate().-
1351-
1352 \sa dateTimeFromText(), validate()-
1353*/-
1354QString QDateTimeEdit::textFromDateTime(const QDateTime &dateTime) const-
1355{-
1356 Q_D(const QDateTimeEdit);-
1357 return locale().toString(dateTime, d->displayFormat);
never executed: return locale().toString(dateTime, d->displayFormat);
0
1358}-
1359-
1360-
1361/*!-
1362 Returns an appropriate datetime for the given \a text.-
1363-
1364 This virtual function is used by the datetime edit whenever it-
1365 needs to interpret text entered by the user as a value.-
1366-
1367 \sa textFromDateTime(), validate()-
1368*/-
1369QDateTime QDateTimeEdit::dateTimeFromText(const QString &text) const-
1370{-
1371 Q_D(const QDateTimeEdit);-
1372 QString copy = text;-
1373 int pos = d->edit->cursorPosition();-
1374 QValidator::State state = QValidator::Acceptable;-
1375 return d->validateAndInterpret(copy, pos, state);
never executed: return d->validateAndInterpret(copy, pos, state);
0
1376}-
1377-
1378/*!-
1379 \reimp-
1380*/-
1381-
1382QValidator::State QDateTimeEdit::validate(QString &text, int &pos) const-
1383{-
1384 Q_D(const QDateTimeEdit);-
1385 QValidator::State state;-
1386 d->validateAndInterpret(text, pos, state);-
1387 return state;
never executed: return state;
0
1388}-
1389-
1390/*!-
1391 \reimp-
1392*/-
1393-
1394-
1395void QDateTimeEdit::fixup(QString &input) const-
1396{-
1397 Q_D(const QDateTimeEdit);-
1398 QValidator::State state;-
1399 int copy = d->edit->cursorPosition();-
1400-
1401 d->validateAndInterpret(input, copy, state, true);-
1402}
never executed: end of block
0
1403-
1404-
1405/*!-
1406 \reimp-
1407*/-
1408-
1409QDateTimeEdit::StepEnabled QDateTimeEdit::stepEnabled() const-
1410{-
1411 Q_D(const QDateTimeEdit);-
1412 if (d->readOnly)
d->readOnlyDescription
TRUEnever evaluated
FALSEnever evaluated
0
1413 return StepEnabled(0);
never executed: return StepEnabled(0);
0
1414 if (d->specialValue()) {
d->specialValue()Description
TRUEnever evaluated
FALSEnever evaluated
0
1415 return (d->minimum == d->maximum ? StepEnabled(0) : StepEnabled(StepUpEnabled));
never executed: return (d->minimum == d->maximum ? StepEnabled(0) : StepEnabled(StepUpEnabled));
0
1416 }-
1417-
1418 QAbstractSpinBox::StepEnabled ret = 0;-
1419-
1420#ifdef QT_KEYPAD_NAVIGATION-
1421 if (QApplication::keypadNavigationEnabled() && !hasEditFocus()) {-
1422 if (d->wrapping)-
1423 return StepEnabled(StepUpEnabled | StepDownEnabled);-
1424 // 3 cases. date, time, datetime. each case look-
1425 // at just the relavant component.-
1426 QVariant max, min, val;-
1427 if (!(d->sections & DateSections_Mask)) {-
1428 // time only, no date-
1429 max = d->maximum.toTime();-
1430 min = d->minimum.toTime();-
1431 val = d->value.toTime();-
1432 } else if (!(d->sections & TimeSections_Mask)) {-
1433 // date only, no time-
1434 max = d->maximum.toDate();-
1435 min = d->minimum.toDate();-
1436 val = d->value.toDate();-
1437 } else {-
1438 // both-
1439 max = d->maximum;-
1440 min = d->minimum;-
1441 val = d->value;-
1442 }-
1443 if (val != min)-
1444 ret |= QAbstractSpinBox::StepDownEnabled;-
1445 if (val != max)-
1446 ret |= QAbstractSpinBox::StepUpEnabled;-
1447 return ret;-
1448 }-
1449#endif-
1450 switch (d->sectionType(d->currentSectionIndex)) {-
1451 case QDateTimeParser::NoSection:
never executed: case QDateTimeParser::NoSection:
0
1452 case QDateTimeParser::FirstSection:
never executed: case QDateTimeParser::FirstSection:
0
1453 case QDateTimeParser::LastSection: return 0;
never executed: return 0;
never executed: case QDateTimeParser::LastSection:
0
1454 default: break;
never executed: break;
never executed: default:
0
1455 }-
1456 if (d->wrapping)
d->wrappingDescription
TRUEnever evaluated
FALSEnever evaluated
0
1457 return StepEnabled(StepDownEnabled|StepUpEnabled);
never executed: return StepEnabled(StepDownEnabled|StepUpEnabled);
0
1458-
1459 QVariant v = d->stepBy(d->currentSectionIndex, 1, true);-
1460 if (v != d->value) {
v != d->valueDescription
TRUEnever evaluated
FALSEnever evaluated
0
1461 ret |= QAbstractSpinBox::StepUpEnabled;-
1462 }
never executed: end of block
0
1463 v = d->stepBy(d->currentSectionIndex, -1, true);-
1464 if (v != d->value) {
v != d->valueDescription
TRUEnever evaluated
FALSEnever evaluated
0
1465 ret |= QAbstractSpinBox::StepDownEnabled;-
1466 }
never executed: end of block
0
1467-
1468 return ret;
never executed: return ret;
0
1469}-
1470-
1471-
1472/*!-
1473 \reimp-
1474*/-
1475-
1476void QDateTimeEdit::mousePressEvent(QMouseEvent *event)-
1477{-
1478 Q_D(QDateTimeEdit);-
1479 if (!d->calendarPopupEnabled()) {
!d->calendarPopupEnabled()Description
TRUEnever evaluated
FALSEnever evaluated
0
1480 QAbstractSpinBox::mousePressEvent(event);-
1481 return;
never executed: return;
0
1482 }-
1483 d->updateHoverControl(event->pos());-
1484 if (d->hoverControl == QStyle::SC_ComboBoxArrow) {
d->hoverContro..._ComboBoxArrowDescription
TRUEnever evaluated
FALSEnever evaluated
0
1485 event->accept();-
1486 if (d->readOnly) {
d->readOnlyDescription
TRUEnever evaluated
FALSEnever evaluated
0
1487 return;
never executed: return;
0
1488 }-
1489 d->updateArrow(QStyle::State_Sunken);-
1490 d->initCalendarPopup();-
1491 d->positionCalendarPopup();-
1492 //Show the calendar-
1493 d->monthCalendar->show();-
1494 } else {
never executed: end of block
0
1495 QAbstractSpinBox::mousePressEvent(event);-
1496 }
never executed: end of block
0
1497}-
1498-
1499/*!-
1500 \class QTimeEdit-
1501 \brief The QTimeEdit class provides a widget for editing times based on-
1502 the QDateTimeEdit widget.-
1503-
1504 \ingroup basicwidgets-
1505 \inmodule QtWidgets-
1506-
1507 Many of the properties and functions provided by QTimeEdit are implemented in-
1508 QDateTimeEdit. These are the relevant properties of this class:-
1509-
1510 \list-
1511 \li \l{QDateTimeEdit::time}{time} holds the time displayed by the widget.-
1512 \li \l{QDateTimeEdit::minimumTime}{minimumTime} defines the minimum (earliest) time-
1513 that can be set by the user.-
1514 \li \l{QDateTimeEdit::maximumTime}{maximumTime} defines the maximum (latest) time-
1515 that can be set by the user.-
1516 \li \l{QDateTimeEdit::displayFormat}{displayFormat} contains a string that is used-
1517 to format the time displayed in the widget.-
1518 \endlist-
1519-
1520 \table 100%-
1521 \row \li \inlineimage windowsvista-timeedit.png Screenshot of a Windows Vista style time editing widget-
1522 \li A time editing widget shown in the \l{Windows Vista Style Widget Gallery}{Windows Vista widget style}.-
1523 \row \li \inlineimage macintosh-timeedit.png Screenshot of a Macintosh style time editing widget-
1524 \li A time editing widget shown in the \l{Macintosh Style Widget Gallery}{Macintosh widget style}.-
1525 \row \li \inlineimage fusion-timeedit.png Screenshot of a Fusion style time editing widget-
1526 \li A time editing widget shown in the \l{Fusion Style Widget Gallery}{Fusion widget style}.-
1527 \endtable-
1528-
1529 \sa QDateEdit, QDateTimeEdit-
1530*/-
1531-
1532/*!-
1533 Constructs an empty time editor with a \a parent.-
1534*/-
1535-
1536-
1537QTimeEdit::QTimeEdit(QWidget *parent)-
1538 : QDateTimeEdit(QDATETIMEEDIT_TIME_MIN, QVariant::Time, parent)-
1539{-
1540 connect(this, SIGNAL(timeChanged(QTime)), SIGNAL(userTimeChanged(QTime)));-
1541}
never executed: end of block
0
1542-
1543/*!-
1544 Constructs an empty time editor with a \a parent. The time is set-
1545 to \a time.-
1546*/-
1547-
1548QTimeEdit::QTimeEdit(const QTime &time, QWidget *parent)-
1549 : QDateTimeEdit(time, QVariant::Time, parent)-
1550{-
1551}
never executed: end of block
0
1552-
1553/*!-
1554 Destructor.-
1555*/-
1556QTimeEdit::~QTimeEdit()-
1557{-
1558}-
1559-
1560/*!-
1561 \property QTimeEdit::time-
1562 \internal-
1563 \sa QDateTimeEdit::time-
1564*/-
1565-
1566/*!-
1567 \fn void QTimeEdit::userTimeChanged(const QTime &time)-
1568-
1569 This signal only exists to fully implement the time Q_PROPERTY on the class.-
1570 Normally timeChanged should be used instead.-
1571-
1572 \internal-
1573*/-
1574-
1575-
1576/*!-
1577 \class QDateEdit-
1578 \brief The QDateEdit class provides a widget for editing dates based on-
1579 the QDateTimeEdit widget.-
1580-
1581 \ingroup basicwidgets-
1582 \inmodule QtWidgets-
1583-
1584 Many of the properties and functions provided by QDateEdit are implemented in-
1585 QDateTimeEdit. These are the relevant properties of this class:-
1586-
1587 \list-
1588 \li \l{QDateTimeEdit::date}{date} holds the date displayed by the widget.-
1589 \li \l{QDateTimeEdit::minimumDate}{minimumDate} defines the minimum (earliest)-
1590 date that can be set by the user.-
1591 \li \l{QDateTimeEdit::maximumDate}{maximumDate} defines the maximum (latest) date-
1592 that can be set by the user.-
1593 \li \l{QDateTimeEdit::displayFormat}{displayFormat} contains a string that is used-
1594 to format the date displayed in the widget.-
1595 \endlist-
1596-
1597 \table 100%-
1598 \row \li \inlineimage windowsvista-dateedit.png Screenshot of a Windows Vista style date editing widget-
1599 \li A date editing widget shown in the \l{Windows Vista Style Widget Gallery}{Windows Vista widget style}.-
1600 \row \li \inlineimage macintosh-dateedit.png Screenshot of a Macintosh style date editing widget-
1601 \li A date editing widget shown in the \l{Macintosh Style Widget Gallery}{Macintosh widget style}.-
1602 \row \li \inlineimage fusion-dateedit.png Screenshot of a Fusion style date editing widget-
1603 \li A date editing widget shown in the \l{Fusion Style Widget Gallery}{Fusion widget style}.-
1604 \endtable-
1605-
1606 \sa QTimeEdit, QDateTimeEdit-
1607*/-
1608-
1609/*!-
1610 Constructs an empty date editor with a \a parent.-
1611*/-
1612-
1613QDateEdit::QDateEdit(QWidget *parent)-
1614 : QDateTimeEdit(QDATETIMEEDIT_DATE_INITIAL, QVariant::Date, parent)-
1615{-
1616 connect(this, SIGNAL(dateChanged(QDate)), SIGNAL(userDateChanged(QDate)));-
1617}
never executed: end of block
0
1618-
1619/*!-
1620 Constructs an empty date editor with a \a parent. The date is set-
1621 to \a date.-
1622*/-
1623-
1624QDateEdit::QDateEdit(const QDate &date, QWidget *parent)-
1625 : QDateTimeEdit(date, QVariant::Date, parent)-
1626{-
1627}
never executed: end of block
0
1628-
1629/*!-
1630 Destructor.-
1631*/-
1632QDateEdit::~QDateEdit()-
1633{-
1634}-
1635-
1636/*!-
1637 \property QDateEdit::date-
1638 \internal-
1639 \sa QDateTimeEdit::date-
1640*/-
1641-
1642/*!-
1643 \fn void QDateEdit::userDateChanged(const QDate &date)-
1644-
1645 This signal only exists to fully implement the date Q_PROPERTY on the class.-
1646 Normally dateChanged should be used instead.-
1647-
1648 \internal-
1649*/-
1650-
1651-
1652// --- QDateTimeEditPrivate ----
1653-
1654/*!-
1655 \internal-
1656 Constructs a QDateTimeEditPrivate object-
1657*/-
1658-
1659-
1660QDateTimeEditPrivate::QDateTimeEditPrivate()-
1661 : QDateTimeParser(QVariant::DateTime, QDateTimeParser::DateTimeEdit)-
1662{-
1663 hasHadFocus = false;-
1664 formatExplicitlySet = false;-
1665 cacheGuard = false;-
1666 fixday = true;-
1667 type = QVariant::DateTime;-
1668 sections = 0;-
1669 cachedDay = -1;-
1670 currentSectionIndex = FirstSectionIndex;-
1671-
1672 first.pos = 0;-
1673 sections = 0;-
1674 calendarPopup = false;-
1675 minimum = QDATETIMEEDIT_COMPAT_DATETIME_MIN;-
1676 maximum = QDATETIMEEDIT_DATETIME_MAX;-
1677 arrowState = QStyle::State_None;-
1678 monthCalendar = 0;-
1679 readLocaleSettings();-
1680-
1681#ifdef QT_KEYPAD_NAVIGATION-
1682 focusOnButton = false;-
1683#endif-
1684}
never executed: end of block
0
1685-
1686QDateTimeEditPrivate::~QDateTimeEditPrivate()-
1687{-
1688}-
1689-
1690void QDateTimeEditPrivate::updateTimeSpec()-
1691{-
1692 minimum = minimum.toDateTime().toTimeSpec(spec);-
1693 maximum = maximum.toDateTime().toTimeSpec(spec);-
1694 value = value.toDateTime().toTimeSpec(spec);-
1695-
1696 // time zone changes can lead to 00:00:00 becomes 01:00:00 and 23:59:59 becomes 00:59:59 (invalid range)-
1697 const bool dateShown = (sections & QDateTimeEdit::DateSections_Mask);-
1698 if (!dateShown) {
!dateShownDescription
TRUEnever evaluated
FALSEnever evaluated
0
1699 if (minimum.toTime() >= maximum.toTime()){
minimum.toTime...ximum.toTime()Description
TRUEnever evaluated
FALSEnever evaluated
0
1700 minimum = QDateTime(value.toDate(), QDATETIMEEDIT_TIME_MIN, spec);-
1701 maximum = QDateTime(value.toDate(), QDATETIMEEDIT_TIME_MAX, spec);-
1702 }
never executed: end of block
0
1703 }
never executed: end of block
0
1704}
never executed: end of block
0
1705-
1706void QDateTimeEditPrivate::updateEdit()-
1707{-
1708 const QString newText = (specialValue() ? specialValueText : textFromValue(value));
specialValue()Description
TRUEnever evaluated
FALSEnever evaluated
0
1709 if (newText == displayText())
newText == displayText()Description
TRUEnever evaluated
FALSEnever evaluated
0
1710 return;
never executed: return;
0
1711 int selsize = edit->selectedText().size();-
1712 const QSignalBlocker blocker(edit);-
1713-
1714 edit->setText(newText);-
1715-
1716 if (!specialValue()
!specialValue()Description
TRUEnever evaluated
FALSEnever evaluated
0
1717#ifdef QT_KEYPAD_NAVIGATION-
1718 && !(QApplication::keypadNavigationEnabled() && !edit->hasEditFocus())-
1719#endif-
1720 ) {-
1721 int cursor = sectionPos(currentSectionIndex);-
1722 QDTEDEBUG << "cursor is " << cursor << currentSectionIndex;
dead code: QMessageLogger(__FILE__, 1722, __PRETTY_FUNCTION__).debug() << "cursor is " << cursor << currentSectionIndex;
-
1723 cursor = qBound(0, cursor, displayText().size());-
1724 QDTEDEBUG << cursor;
dead code: QMessageLogger(__FILE__, 1724, __PRETTY_FUNCTION__).debug() << cursor;
-
1725 if (selsize > 0) {
selsize > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1726 edit->setSelection(cursor, selsize);-
1727 QDTEDEBUG << cursor << selsize;
dead code: QMessageLogger(__FILE__, 1727, __PRETTY_FUNCTION__).debug() << cursor << selsize;
-
1728 } else {
never executed: end of block
0
1729 edit->setCursorPosition(cursor);-
1730 QDTEDEBUG << cursor;
dead code: QMessageLogger(__FILE__, 1730, __PRETTY_FUNCTION__).debug() << cursor;
-
1731-
1732 }
never executed: end of block
0
1733 }-
1734}
never executed: end of block
0
1735-
1736-
1737/*!-
1738 \internal-
1739-
1740 Selects the section \a s. If \a forward is false selects backwards.-
1741*/-
1742-
1743void QDateTimeEditPrivate::setSelected(int sectionIndex, bool forward)-
1744{-
1745 if (specialValue()
specialValue()Description
TRUEnever evaluated
FALSEnever evaluated
0
1746#ifdef QT_KEYPAD_NAVIGATION-
1747 || (QApplication::keypadNavigationEnabled() && !edit->hasEditFocus())-
1748#endif-
1749 ) {-
1750 edit->selectAll();-
1751 } else {
never executed: end of block
0
1752 const SectionNode &node = sectionNode(sectionIndex);-
1753 if (node.type == NoSection || node.type == LastSection || node.type == FirstSection)
node.type == NoSectionDescription
TRUEnever evaluated
FALSEnever evaluated
node.type == LastSectionDescription
TRUEnever evaluated
FALSEnever evaluated
node.type == FirstSectionDescription
TRUEnever evaluated
FALSEnever evaluated
0
1754 return;
never executed: return;
0
1755-
1756 updateCache(value, displayText());-
1757 const int size = sectionSize(sectionIndex);-
1758 if (forward) {
forwardDescription
TRUEnever evaluated
FALSEnever evaluated
0
1759 edit->setSelection(sectionPos(node), size);-
1760 } else {
never executed: end of block
0
1761 edit->setSelection(sectionPos(node) + size, -size);-
1762 }
never executed: end of block
0
1763 }-
1764}-
1765-
1766/*!-
1767 \internal-
1768-
1769 Returns the section at index \a index or NoSection if there are no sections there.-
1770*/-
1771-
1772int QDateTimeEditPrivate::sectionAt(int pos) const-
1773{-
1774 if (pos < separators.first().size())
pos < separato...first().size()Description
TRUEnever evaluated
FALSEnever evaluated
0
1775 return (pos == 0 ? FirstSectionIndex : NoSectionIndex);
never executed: return (pos == 0 ? FirstSectionIndex : NoSectionIndex);
0
1776-
1777 const QString text = displayText();-
1778 const int textSize = text.size();-
1779 if (textSize - pos < separators.last().size() + 1) {
textSize - pos...t().size() + 1Description
TRUEnever evaluated
FALSEnever evaluated
0
1780 if (separators.last().size() == 0) {
separators.last().size() == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1781 return sectionNodes.count() - 1;
never executed: return sectionNodes.count() - 1;
0
1782 }-
1783 return (pos == textSize ? LastSectionIndex : NoSectionIndex);
never executed: return (pos == textSize ? LastSectionIndex : NoSectionIndex);
0
1784 }-
1785 updateCache(value, text);-
1786-
1787 for (int i=0; i<sectionNodes.size(); ++i) {
i<sectionNodes.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
1788 const int tmp = sectionPos(i);-
1789 if (pos < tmp + sectionSize(i)) {
pos < tmp + sectionSize(i)Description
TRUEnever evaluated
FALSEnever evaluated
0
1790 return (pos < tmp ? -1 : i);
never executed: return (pos < tmp ? -1 : i);
0
1791 }-
1792 }
never executed: end of block
0
1793 return -1;
never executed: return -1;
0
1794}-
1795-
1796/*!-
1797 \internal-
1798-
1799 Returns the closest section of index \a index. Searches forward-
1800 for a section if \a forward is true. Otherwise searches backwards.-
1801*/-
1802-
1803int QDateTimeEditPrivate::closestSection(int pos, bool forward) const-
1804{-
1805 Q_ASSERT(pos >= 0);-
1806 if (pos < separators.first().size())
pos < separato...first().size()Description
TRUEnever evaluated
FALSEnever evaluated
0
1807 return forward ? 0 : FirstSectionIndex;
never executed: return forward ? 0 : FirstSectionIndex;
0
1808-
1809 const QString text = displayText();-
1810 if (text.size() - pos < separators.last().size() + 1)
text.size() - ...t().size() + 1Description
TRUEnever evaluated
FALSEnever evaluated
0
1811 return forward ? LastSectionIndex : sectionNodes.size() - 1;
never executed: return forward ? LastSectionIndex : sectionNodes.size() - 1;
0
1812-
1813 updateCache(value, text);-
1814 for (int i=0; i<sectionNodes.size(); ++i) {
i<sectionNodes.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
1815 const int tmp = sectionPos(sectionNodes.at(i));-
1816 if (pos < tmp + sectionSize(i)) {
pos < tmp + sectionSize(i)Description
TRUEnever evaluated
FALSEnever evaluated
0
1817 if (pos < tmp && !forward) {
pos < tmpDescription
TRUEnever evaluated
FALSEnever evaluated
!forwardDescription
TRUEnever evaluated
FALSEnever evaluated
0
1818 return i-1;
never executed: return i-1;
0
1819 }-
1820 return i;
never executed: return i;
0
1821 } else if (i == sectionNodes.size() - 1 && pos > tmp) {
i == sectionNodes.size() - 1Description
TRUEnever evaluated
FALSEnever evaluated
pos > tmpDescription
TRUEnever evaluated
FALSEnever evaluated
0
1822 return i;
never executed: return i;
0
1823 }-
1824 }
never executed: end of block
0
1825 qWarning("QDateTimeEdit: Internal Error: closestSection returned NoSection");-
1826 return NoSectionIndex;
never executed: return NoSectionIndex;
0
1827}-
1828-
1829/*!-
1830 \internal-
1831-
1832 Returns a copy of the section that is before or after \a current, depending on \a forward.-
1833*/-
1834-
1835int QDateTimeEditPrivate::nextPrevSection(int current, bool forward) const-
1836{-
1837 Q_Q(const QDateTimeEdit);-
1838 if (q->isRightToLeft())
q->isRightToLeft()Description
TRUEnever evaluated
FALSEnever evaluated
0
1839 forward = !forward;
never executed: forward = !forward;
0
1840-
1841 switch (current) {-
1842 case FirstSectionIndex: return forward ? 0 : FirstSectionIndex;
never executed: return forward ? 0 : FirstSectionIndex;
never executed: case FirstSectionIndex:
0
1843 case LastSectionIndex: return (forward ? LastSectionIndex : sectionNodes.size() - 1);
never executed: return (forward ? LastSectionIndex : sectionNodes.size() - 1);
never executed: case LastSectionIndex:
0
1844 case NoSectionIndex: return FirstSectionIndex;
never executed: return FirstSectionIndex;
never executed: case NoSectionIndex:
0
1845 default: break;
never executed: break;
never executed: default:
0
1846 }-
1847 Q_ASSERT(current >= 0 && current < sectionNodes.size());-
1848-
1849 current += (forward ? 1 : -1);
forwardDescription
TRUEnever evaluated
FALSEnever evaluated
0
1850 if (current >= sectionNodes.size()) {
current >= sectionNodes.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
1851 return LastSectionIndex;
never executed: return LastSectionIndex;
0
1852 } else if (current < 0) {
current < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1853 return FirstSectionIndex;
never executed: return FirstSectionIndex;
0
1854 }-
1855-
1856 return current;
never executed: return current;
0
1857}-
1858-
1859/*!-
1860 \internal-
1861-
1862 Clears the text of section \a s.-
1863*/-
1864-
1865void QDateTimeEditPrivate::clearSection(int index)-
1866{-
1867 const QLatin1Char space(' ');-
1868 int cursorPos = edit->cursorPosition();-
1869 const QSignalBlocker blocker(edit);-
1870 QString t = edit->text();-
1871 const int pos = sectionPos(index);-
1872 if (Q_UNLIKELY(pos == -1)) {
__builtin_expe...== -1), false)Description
TRUEnever evaluated
FALSEnever evaluated
0
1873 qWarning("QDateTimeEdit: Internal error (%s:%d)", __FILE__, __LINE__);-
1874 return;
never executed: return;
0
1875 }-
1876 const int size = sectionSize(index);-
1877 t.replace(pos, size, QString().fill(space, size));-
1878 edit->setText(t);-
1879 edit->setCursorPosition(cursorPos);-
1880 QDTEDEBUG << cursorPos;
dead code: QMessageLogger(__FILE__, 1880, __PRETTY_FUNCTION__).debug() << cursorPos;
-
1881}
never executed: end of block
0
1882-
1883-
1884/*!-
1885 \internal-
1886-
1887 updates the cached values-
1888*/-
1889-
1890void QDateTimeEditPrivate::updateCache(const QVariant &val, const QString &str) const-
1891{-
1892 if (val != cachedValue || str != cachedText || cacheGuard) {
val != cachedValueDescription
TRUEnever evaluated
FALSEnever evaluated
str != cachedTextDescription
TRUEnever evaluated
FALSEnever evaluated
cacheGuardDescription
TRUEnever evaluated
FALSEnever evaluated
0
1893 cacheGuard = true;-
1894 QString copy = str;-
1895 int unused = edit->cursorPosition();-
1896 QValidator::State unusedState;-
1897 validateAndInterpret(copy, unused, unusedState);-
1898 cacheGuard = false;-
1899 }
never executed: end of block
0
1900}
never executed: end of block
0
1901-
1902/*!-
1903 \internal-
1904-
1905 parses and validates \a input-
1906*/-
1907-
1908QDateTime QDateTimeEditPrivate::validateAndInterpret(QString &input, int &position,-
1909 QValidator::State &state, bool fixup) const-
1910{-
1911 if (input.isEmpty()) {
input.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
1912 if (sectionNodes.size() == 1 || !specialValueText.isEmpty()) {
sectionNodes.size() == 1Description
TRUEnever evaluated
FALSEnever evaluated
!specialValueText.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
1913 state = QValidator::Intermediate;-
1914 } else {
never executed: end of block
0
1915 state = QValidator::Invalid;-
1916 }
never executed: end of block
0
1917 return getZeroVariant().toDateTime();
never executed: return getZeroVariant().toDateTime();
0
1918 } else if (cachedText == input && !fixup) {
cachedText == inputDescription
TRUEnever evaluated
FALSEnever evaluated
!fixupDescription
TRUEnever evaluated
FALSEnever evaluated
0
1919 state = cachedState;-
1920 return cachedValue.toDateTime();
never executed: return cachedValue.toDateTime();
0
1921 } else if (!specialValueText.isEmpty()) {
!specialValueText.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
1922 bool changeCase = false;-
1923 const int max = qMin(specialValueText.size(), input.size());-
1924 int i;-
1925 for (i=0; i<max; ++i) {
i<maxDescription
TRUEnever evaluated
FALSEnever evaluated
0
1926 const QChar ic = input.at(i);-
1927 const QChar sc = specialValueText.at(i);-
1928 if (ic != sc) {
ic != scDescription
TRUEnever evaluated
FALSEnever evaluated
0
1929 if (sc.toLower() == ic.toLower()) {
sc.toLower() == ic.toLower()Description
TRUEnever evaluated
FALSEnever evaluated
0
1930 changeCase = true;-
1931 } else {
never executed: end of block
0
1932 break;
never executed: break;
0
1933 }-
1934 }-
1935 }
never executed: end of block
0
1936 if (i == max) {
i == maxDescription
TRUEnever evaluated
FALSEnever evaluated
0
1937 state = specialValueText.size() == input.size() ? QValidator::Acceptable : QValidator::Intermediate;
specialValueTe...= input.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
1938 if (changeCase) {
changeCaseDescription
TRUEnever evaluated
FALSEnever evaluated
0
1939 input = specialValueText.left(max);-
1940 }
never executed: end of block
0
1941 return minimum.toDateTime();
never executed: return minimum.toDateTime();
0
1942 }-
1943 }
never executed: end of block
0
1944 StateNode tmp = parse(input, position, value.toDateTime(), fixup);-
1945 input = tmp.input;-
1946 state = QValidator::State(int(tmp.state));-
1947 if (state == QValidator::Acceptable) {
state == QVali...or::AcceptableDescription
TRUEnever evaluated
FALSEnever evaluated
0
1948 if (tmp.conflicts && conflictGuard != tmp.value) {
tmp.conflictsDescription
TRUEnever evaluated
FALSEnever evaluated
conflictGuard != tmp.valueDescription
TRUEnever evaluated
FALSEnever evaluated
0
1949 conflictGuard = tmp.value;-
1950 clearCache();-
1951 input = textFromValue(tmp.value);-
1952 updateCache(tmp.value, input);-
1953 conflictGuard.clear();-
1954 } else {
never executed: end of block
0
1955 cachedText = input;-
1956 cachedState = state;-
1957 cachedValue = tmp.value;-
1958 }
never executed: end of block
0
1959 } else {-
1960 clearCache();-
1961 }
never executed: end of block
0
1962 return (tmp.value.isNull() ? getZeroVariant().toDateTime() : tmp.value);
never executed: return (tmp.value.isNull() ? getZeroVariant().toDateTime() : tmp.value);
0
1963}-
1964-
1965-
1966/*!-
1967 \internal-
1968*/-
1969-
1970QString QDateTimeEditPrivate::textFromValue(const QVariant &f) const-
1971{-
1972 Q_Q(const QDateTimeEdit);-
1973 return q->textFromDateTime(f.toDateTime());
never executed: return q->textFromDateTime(f.toDateTime());
0
1974}-
1975-
1976/*!-
1977 \internal-
1978-
1979 This function's name is slightly confusing; it is not to be confused-
1980 with QAbstractSpinBox::valueFromText().-
1981*/-
1982-
1983QVariant QDateTimeEditPrivate::valueFromText(const QString &f) const-
1984{-
1985 Q_Q(const QDateTimeEdit);-
1986 return q->dateTimeFromText(f).toTimeSpec(spec);
never executed: return q->dateTimeFromText(f).toTimeSpec(spec);
0
1987}-
1988-
1989-
1990/*!-
1991 \internal-
1992-
1993 Internal function called by QDateTimeEdit::stepBy(). Also takes a-
1994 Section for which section to step on and a bool \a test for-
1995 whether or not to modify the internal cachedDay variable. This is-
1996 necessary because the function is called from the const function-
1997 QDateTimeEdit::stepEnabled() as well as QDateTimeEdit::stepBy().-
1998*/-
1999-
2000QDateTime QDateTimeEditPrivate::stepBy(int sectionIndex, int steps, bool test) const-
2001{-
2002 Q_Q(const QDateTimeEdit);-
2003 QDateTime v = value.toDateTime();-
2004 QString str = displayText();-
2005 int pos = edit->cursorPosition();-
2006 const SectionNode sn = sectionNode(sectionIndex);-
2007-
2008 int val;-
2009 // to make sure it behaves reasonably when typing something and then stepping in non-tracking mode-
2010 if (!test && pendingEmit) {
!testDescription
TRUEnever evaluated
FALSEnever evaluated
pendingEmitDescription
TRUEnever evaluated
FALSEnever evaluated
0
2011 if (q->validate(str, pos) != QValidator::Acceptable) {
q->validate(st...or::AcceptableDescription
TRUEnever evaluated
FALSEnever evaluated
0
2012 v = value.toDateTime();-
2013 } else {
never executed: end of block
0
2014 v = q->dateTimeFromText(str);-
2015 }
never executed: end of block
0
2016 val = getDigit(v, sectionIndex);-
2017 } else {
never executed: end of block
0
2018 val = getDigit(v, sectionIndex);-
2019 }
never executed: end of block
0
2020-
2021 val += steps;-
2022-
2023 const int min = absoluteMin(sectionIndex);-
2024 const int max = absoluteMax(sectionIndex, value.toDateTime());-
2025-
2026 if (val < min) {
val < minDescription
TRUEnever evaluated
FALSEnever evaluated
0
2027 val = (wrapping ? max - (min - val) + 1 : min);
wrappingDescription
TRUEnever evaluated
FALSEnever evaluated
0
2028 } else if (val > max) {
never executed: end of block
val > maxDescription
TRUEnever evaluated
FALSEnever evaluated
0
2029 val = (wrapping ? min + val - max - 1 : max);
wrappingDescription
TRUEnever evaluated
FALSEnever evaluated
0
2030 }
never executed: end of block
0
2031-
2032-
2033 const int oldDay = v.date().day();-
2034-
2035 setDigit(v, sectionIndex, val);-
2036 // if this sets year or month it will make-
2037 // sure that days are lowered if needed.-
2038-
2039 const QDateTime minimumDateTime = minimum.toDateTime();-
2040 const QDateTime maximumDateTime = maximum.toDateTime();-
2041 // changing one section should only modify that section, if possible-
2042 if (sn.type != AmPmSection && (v < minimumDateTime || v > maximumDateTime)) {
sn.type != AmPmSectionDescription
TRUEnever evaluated
FALSEnever evaluated
v < minimumDateTimeDescription
TRUEnever evaluated
FALSEnever evaluated
v > maximumDateTimeDescription
TRUEnever evaluated
FALSEnever evaluated
0
2043 const int localmin = getDigit(minimumDateTime, sectionIndex);-
2044 const int localmax = getDigit(maximumDateTime, sectionIndex);-
2045-
2046 if (wrapping) {
wrappingDescription
TRUEnever evaluated
FALSEnever evaluated
0
2047 // just because we hit the roof in one direction, it-
2048 // doesn't mean that we hit the floor in the other-
2049 if (steps > 0) {
steps > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2050 setDigit(v, sectionIndex, min);-
2051 if (!(sn.type & DaySectionMask) && sections & DateSectionMask) {
!(sn.type & DaySectionMask)Description
TRUEnever evaluated
FALSEnever evaluated
sections & DateSectionMaskDescription
TRUEnever evaluated
FALSEnever evaluated
0
2052 const int daysInMonth = v.date().daysInMonth();-
2053 if (v.date().day() < oldDay && v.date().day() < daysInMonth) {
v.date().day() < oldDayDescription
TRUEnever evaluated
FALSEnever evaluated
v.date().day() < daysInMonthDescription
TRUEnever evaluated
FALSEnever evaluated
0
2054 const int adds = qMin(oldDay, daysInMonth);-
2055 v = v.addDays(adds - v.date().day());-
2056 }
never executed: end of block
0
2057 }
never executed: end of block
0
2058-
2059 if (v < minimumDateTime) {
v < minimumDateTimeDescription
TRUEnever evaluated
FALSEnever evaluated
0
2060 setDigit(v, sectionIndex, localmin);-
2061 if (v < minimumDateTime)
v < minimumDateTimeDescription
TRUEnever evaluated
FALSEnever evaluated
0
2062 setDigit(v, sectionIndex, localmin + 1);
never executed: setDigit(v, sectionIndex, localmin + 1);
0
2063 }
never executed: end of block
0
2064 } else {
never executed: end of block
0
2065 setDigit(v, sectionIndex, max);-
2066 if (!(sn.type & DaySectionMask) && sections & DateSectionMask) {
!(sn.type & DaySectionMask)Description
TRUEnever evaluated
FALSEnever evaluated
sections & DateSectionMaskDescription
TRUEnever evaluated
FALSEnever evaluated
0
2067 const int daysInMonth = v.date().daysInMonth();-
2068 if (v.date().day() < oldDay && v.date().day() < daysInMonth) {
v.date().day() < oldDayDescription
TRUEnever evaluated
FALSEnever evaluated
v.date().day() < daysInMonthDescription
TRUEnever evaluated
FALSEnever evaluated
0
2069 const int adds = qMin(oldDay, daysInMonth);-
2070 v = v.addDays(adds - v.date().day());-
2071 }
never executed: end of block
0
2072 }
never executed: end of block
0
2073-
2074 if (v > maximumDateTime) {
v > maximumDateTimeDescription
TRUEnever evaluated
FALSEnever evaluated
0
2075 setDigit(v, sectionIndex, localmax);-
2076 if (v > maximumDateTime)
v > maximumDateTimeDescription
TRUEnever evaluated
FALSEnever evaluated
0
2077 setDigit(v, sectionIndex, localmax - 1);
never executed: setDigit(v, sectionIndex, localmax - 1);
0
2078 }
never executed: end of block
0
2079 }
never executed: end of block
0
2080 } else {-
2081 setDigit(v, sectionIndex, (steps > 0 ? localmax : localmin));-
2082 }
never executed: end of block
0
2083 }-
2084 if (!test && oldDay != v.date().day() && !(sn.type & DaySectionMask)) {
!testDescription
TRUEnever evaluated
FALSEnever evaluated
oldDay != v.date().day()Description
TRUEnever evaluated
FALSEnever evaluated
!(sn.type & DaySectionMask)Description
TRUEnever evaluated
FALSEnever evaluated
0
2085 // this should not happen when called from stepEnabled-
2086 cachedDay = qMax<int>(oldDay, cachedDay);-
2087 }
never executed: end of block
0
2088-
2089 if (v < minimumDateTime) {
v < minimumDateTimeDescription
TRUEnever evaluated
FALSEnever evaluated
0
2090 if (wrapping) {
wrappingDescription
TRUEnever evaluated
FALSEnever evaluated
0
2091 QDateTime t = v;-
2092 setDigit(t, sectionIndex, steps < 0 ? max : min);-
2093 bool mincmp = (t >= minimumDateTime);-
2094 bool maxcmp = (t <= maximumDateTime);-
2095 if (!mincmp || !maxcmp) {
!mincmpDescription
TRUEnever evaluated
FALSEnever evaluated
!maxcmpDescription
TRUEnever evaluated
FALSEnever evaluated
0
2096 setDigit(t, sectionIndex, getDigit(steps < 0-
2097 ? maximumDateTime-
2098 : minimumDateTime, sectionIndex));-
2099 mincmp = (t >= minimumDateTime);-
2100 maxcmp = (t <= maximumDateTime);-
2101 }
never executed: end of block
0
2102 if (mincmp && maxcmp) {
mincmpDescription
TRUEnever evaluated
FALSEnever evaluated
maxcmpDescription
TRUEnever evaluated
FALSEnever evaluated
0
2103 v = t;-
2104 }
never executed: end of block
0
2105 } else {
never executed: end of block
0
2106 v = value.toDateTime();-
2107 }
never executed: end of block
0
2108 } else if (v > maximumDateTime) {
v > maximumDateTimeDescription
TRUEnever evaluated
FALSEnever evaluated
0
2109 if (wrapping) {
wrappingDescription
TRUEnever evaluated
FALSEnever evaluated
0
2110 QDateTime t = v;-
2111 setDigit(t, sectionIndex, steps > 0 ? min : max);-
2112 bool mincmp = (t >= minimumDateTime);-
2113 bool maxcmp = (t <= maximumDateTime);-
2114 if (!mincmp || !maxcmp) {
!mincmpDescription
TRUEnever evaluated
FALSEnever evaluated
!maxcmpDescription
TRUEnever evaluated
FALSEnever evaluated
0
2115 setDigit(t, sectionIndex, getDigit(steps > 0 ?-
2116 minimumDateTime :-
2117 maximumDateTime, sectionIndex));-
2118 mincmp = (t >= minimumDateTime);-
2119 maxcmp = (t <= maximumDateTime);-
2120 }
never executed: end of block
0
2121 if (mincmp && maxcmp) {
mincmpDescription
TRUEnever evaluated
FALSEnever evaluated
maxcmpDescription
TRUEnever evaluated
FALSEnever evaluated
0
2122 v = t;-
2123 }
never executed: end of block
0
2124 } else {
never executed: end of block
0
2125 v = value.toDateTime();-
2126 }
never executed: end of block
0
2127 }-
2128-
2129 const QDateTime ret = bound(v, value, steps).toDateTime().toTimeSpec(spec);-
2130 return ret;
never executed: return ret;
0
2131}-
2132-
2133/*!-
2134 \internal-
2135*/-
2136-
2137void QDateTimeEditPrivate::emitSignals(EmitPolicy ep, const QVariant &old)-
2138{-
2139 Q_Q(QDateTimeEdit);-
2140 if (ep == NeverEmit) {
ep == NeverEmitDescription
TRUEnever evaluated
FALSEnever evaluated
0
2141 return;
never executed: return;
0
2142 }-
2143 pendingEmit = false;-
2144-
2145 const bool dodate = value.toDate().isValid() && (sections & DateSectionMask);
value.toDate().isValid()Description
TRUEnever evaluated
FALSEnever evaluated
(sections & DateSectionMask)Description
TRUEnever evaluated
FALSEnever evaluated
0
2146 const bool datechanged = (ep == AlwaysEmit || old.toDate() != value.toDate());
ep == AlwaysEmitDescription
TRUEnever evaluated
FALSEnever evaluated
old.toDate() != value.toDate()Description
TRUEnever evaluated
FALSEnever evaluated
0
2147 const bool dotime = value.toTime().isValid() && (sections & TimeSectionMask);
value.toTime().isValid()Description
TRUEnever evaluated
FALSEnever evaluated
(sections & TimeSectionMask)Description
TRUEnever evaluated
FALSEnever evaluated
0
2148 const bool timechanged = (ep == AlwaysEmit || old.toTime() != value.toTime());
ep == AlwaysEmitDescription
TRUEnever evaluated
FALSEnever evaluated
old.toTime() != value.toTime()Description
TRUEnever evaluated
FALSEnever evaluated
0
2149-
2150 updateCache(value, displayText());-
2151-
2152 syncCalendarWidget();-
2153 if (datechanged || timechanged)
datechangedDescription
TRUEnever evaluated
FALSEnever evaluated
timechangedDescription
TRUEnever evaluated
FALSEnever evaluated
0
2154 emit q->dateTimeChanged(value.toDateTime());
never executed: q->dateTimeChanged(value.toDateTime());
0
2155 if (dodate && datechanged)
dodateDescription
TRUEnever evaluated
FALSEnever evaluated
datechangedDescription
TRUEnever evaluated
FALSEnever evaluated
0
2156 emit q->dateChanged(value.toDate());
never executed: q->dateChanged(value.toDate());
0
2157 if (dotime && timechanged)
dotimeDescription
TRUEnever evaluated
FALSEnever evaluated
timechangedDescription
TRUEnever evaluated
FALSEnever evaluated
0
2158 emit q->timeChanged(value.toTime());
never executed: q->timeChanged(value.toTime());
0
2159-
2160}
never executed: end of block
0
2161-
2162/*!-
2163 \internal-
2164*/-
2165-
2166void QDateTimeEditPrivate::_q_editorCursorPositionChanged(int oldpos, int newpos)-
2167{-
2168 if (ignoreCursorPositionChanged || specialValue())
ignoreCursorPositionChangedDescription
TRUEnever evaluated
FALSEnever evaluated
specialValue()Description
TRUEnever evaluated
FALSEnever evaluated
0
2169 return;
never executed: return;
0
2170 const QString oldText = displayText();-
2171 updateCache(value, oldText);-
2172-
2173 const bool allowChange = !edit->hasSelectedText();-
2174 const bool forward = oldpos <= newpos;-
2175 ignoreCursorPositionChanged = true;-
2176 int s = sectionAt(newpos);-
2177 if (s == NoSectionIndex && forward && newpos > 0) {
s == NoSectionIndexDescription
TRUEnever evaluated
FALSEnever evaluated
forwardDescription
TRUEnever evaluated
FALSEnever evaluated
newpos > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2178 s = sectionAt(newpos - 1);-
2179 }
never executed: end of block
0
2180-
2181 int c = newpos;-
2182-
2183 const int selstart = edit->selectionStart();-
2184 const int selSection = sectionAt(selstart);-
2185 const int l = selSection != -1 ? sectionSize(selSection) : 0;
selSection != -1Description
TRUEnever evaluated
FALSEnever evaluated
0
2186-
2187 if (s == NoSectionIndex) {
s == NoSectionIndexDescription
TRUEnever evaluated
FALSEnever evaluated
0
2188 if (l > 0 && selstart == sectionPos(selSection) && edit->selectedText().size() == l) {
l > 0Description
TRUEnever evaluated
FALSEnever evaluated
selstart == se...os(selSection)Description
TRUEnever evaluated
FALSEnever evaluated
edit->selected...().size() == lDescription
TRUEnever evaluated
FALSEnever evaluated
0
2189 s = selSection;-
2190 if (allowChange)
allowChangeDescription
TRUEnever evaluated
FALSEnever evaluated
0
2191 setSelected(selSection, true);
never executed: setSelected(selSection, true);
0
2192 c = -1;-
2193 } else {
never executed: end of block
0
2194 int closest = closestSection(newpos, forward);-
2195 c = sectionPos(closest) + (forward ? 0 : qMax<int>(0, sectionSize(closest)));
forwardDescription
TRUEnever evaluated
FALSEnever evaluated
0
2196-
2197 if (allowChange) {
allowChangeDescription
TRUEnever evaluated
FALSEnever evaluated
0
2198 edit->setCursorPosition(c);-
2199 QDTEDEBUG << c;
dead code: QMessageLogger(__FILE__, 2199, __PRETTY_FUNCTION__).debug() << c;
-
2200 }
never executed: end of block
0
2201 s = closest;-
2202 }
never executed: end of block
0
2203 }-
2204-
2205 if (allowChange && currentSectionIndex != s) {
allowChangeDescription
TRUEnever evaluated
FALSEnever evaluated
currentSectionIndex != sDescription
TRUEnever evaluated
FALSEnever evaluated
0
2206 interpret(EmitIfChanged);-
2207 }
never executed: end of block
0
2208 if (c == -1) {
c == -1Description
TRUEnever evaluated
FALSEnever evaluated
0
2209 setSelected(s, true);-
2210 } else if (!edit->hasSelectedText()) {
never executed: end of block
!edit->hasSelectedText()Description
TRUEnever evaluated
FALSEnever evaluated
0
2211 if (oldpos < newpos) {
oldpos < newposDescription
TRUEnever evaluated
FALSEnever evaluated
0
2212 edit->setCursorPosition(displayText().size() - (oldText.size() - c));-
2213 } else {
never executed: end of block
0
2214 edit->setCursorPosition(c);-
2215 }
never executed: end of block
0
2216 }-
2217-
2218 QDTEDEBUG << "currentSectionIndex is set to" << sectionNode(s).name()
dead code: QMessageLogger(__FILE__, 2218, __PRETTY_FUNCTION__).debug() << "currentSectionIndex is set to" << sectionNode(s).name() << oldpos << newpos << "was" << sectionNode(currentSectionIndex).name();
-
2219 << oldpos << newpos
dead code: QMessageLogger(__FILE__, 2218, __PRETTY_FUNCTION__).debug() << "currentSectionIndex is set to" << sectionNode(s).name() << oldpos << newpos << "was" << sectionNode(currentSectionIndex).name();
-
2220 << "was" << sectionNode(currentSectionIndex).name();
dead code: QMessageLogger(__FILE__, 2218, __PRETTY_FUNCTION__).debug() << "currentSectionIndex is set to" << sectionNode(s).name() << oldpos << newpos << "was" << sectionNode(currentSectionIndex).name();
-
2221-
2222 currentSectionIndex = s;-
2223 Q_ASSERT_X(currentSectionIndex < sectionNodes.size(),-
2224 "QDateTimeEditPrivate::_q_editorCursorPositionChanged()",-
2225 qPrintable(QString::fromLatin1("Internal error (%1 %2)").-
2226 arg(currentSectionIndex).-
2227 arg(sectionNodes.size())));-
2228-
2229 ignoreCursorPositionChanged = false;-
2230}
never executed: end of block
0
2231-
2232/*!-
2233 \internal-
2234-
2235 Try to get the format from the local settings-
2236*/-
2237void QDateTimeEditPrivate::readLocaleSettings()-
2238{-
2239 const QLocale loc;-
2240 defaultTimeFormat = loc.timeFormat(QLocale::ShortFormat);-
2241 defaultDateFormat = loc.dateFormat(QLocale::ShortFormat);-
2242 defaultDateTimeFormat = loc.dateTimeFormat(QLocale::ShortFormat);-
2243}
never executed: end of block
0
2244-
2245QDateTimeEdit::Section QDateTimeEditPrivate::convertToPublic(QDateTimeParser::Section s)-
2246{-
2247 switch (s & ~Internal) {-
2248 case AmPmSection: return QDateTimeEdit::AmPmSection;
never executed: return QDateTimeEdit::AmPmSection;
never executed: case AmPmSection:
0
2249 case MSecSection: return QDateTimeEdit::MSecSection;
never executed: return QDateTimeEdit::MSecSection;
never executed: case MSecSection:
0
2250 case SecondSection: return QDateTimeEdit::SecondSection;
never executed: return QDateTimeEdit::SecondSection;
never executed: case SecondSection:
0
2251 case MinuteSection: return QDateTimeEdit::MinuteSection;
never executed: return QDateTimeEdit::MinuteSection;
never executed: case MinuteSection:
0
2252 case DayOfWeekSectionShort:
never executed: case DayOfWeekSectionShort:
0
2253 case DayOfWeekSectionLong:
never executed: case DayOfWeekSectionLong:
0
2254 case DaySection: return QDateTimeEdit::DaySection;
never executed: return QDateTimeEdit::DaySection;
never executed: case DaySection:
0
2255 case MonthSection: return QDateTimeEdit::MonthSection;
never executed: return QDateTimeEdit::MonthSection;
never executed: case MonthSection:
0
2256 case YearSection2Digits:
never executed: case YearSection2Digits:
0
2257 case YearSection: return QDateTimeEdit::YearSection;
never executed: return QDateTimeEdit::YearSection;
never executed: case YearSection:
0
2258 case Hour12Section:
never executed: case Hour12Section:
0
2259 case Hour24Section: return QDateTimeEdit::HourSection;
never executed: return QDateTimeEdit::HourSection;
never executed: case Hour24Section:
0
2260 case FirstSection:
never executed: case FirstSection:
0
2261 case NoSection:
never executed: case NoSection:
0
2262 case LastSection: break;
never executed: break;
never executed: case LastSection:
0
2263 }-
2264 return QDateTimeEdit::NoSection;
never executed: return QDateTimeEdit::NoSection;
0
2265}-
2266-
2267QDateTimeEdit::Sections QDateTimeEditPrivate::convertSections(QDateTimeParser::Sections s)-
2268{-
2269 QDateTimeEdit::Sections ret = 0;-
2270 if (s & QDateTimeParser::MSecSection)
s & QDateTimeP...r::MSecSectionDescription
TRUEnever evaluated
FALSEnever evaluated
0
2271 ret |= QDateTimeEdit::MSecSection;
never executed: ret |= QDateTimeEdit::MSecSection;
0
2272 if (s & QDateTimeParser::SecondSection)
s & QDateTimeP...:SecondSectionDescription
TRUEnever evaluated
FALSEnever evaluated
0
2273 ret |= QDateTimeEdit::SecondSection;
never executed: ret |= QDateTimeEdit::SecondSection;
0
2274 if (s & QDateTimeParser::MinuteSection)
s & QDateTimeP...:MinuteSectionDescription
TRUEnever evaluated
FALSEnever evaluated
0
2275 ret |= QDateTimeEdit::MinuteSection;
never executed: ret |= QDateTimeEdit::MinuteSection;
0
2276 if (s & (QDateTimeParser::HourSectionMask))
s & (QDateTime...urSectionMask)Description
TRUEnever evaluated
FALSEnever evaluated
0
2277 ret |= QDateTimeEdit::HourSection;
never executed: ret |= QDateTimeEdit::HourSection;
0
2278 if (s & QDateTimeParser::AmPmSection)
s & QDateTimeP...r::AmPmSectionDescription
TRUEnever evaluated
FALSEnever evaluated
0
2279 ret |= QDateTimeEdit::AmPmSection;
never executed: ret |= QDateTimeEdit::AmPmSection;
0
2280 if (s & (QDateTimeParser::DaySectionMask))
s & (QDateTime...aySectionMask)Description
TRUEnever evaluated
FALSEnever evaluated
0
2281 ret |= QDateTimeEdit::DaySection;
never executed: ret |= QDateTimeEdit::DaySection;
0
2282 if (s & QDateTimeParser::MonthSection)
s & QDateTimeP...::MonthSectionDescription
TRUEnever evaluated
FALSEnever evaluated
0
2283 ret |= QDateTimeEdit::MonthSection;
never executed: ret |= QDateTimeEdit::MonthSection;
0
2284 if (s & (QDateTimeParser::YearSectionMask))
s & (QDateTime...arSectionMask)Description
TRUEnever evaluated
FALSEnever evaluated
0
2285 ret |= QDateTimeEdit::YearSection;
never executed: ret |= QDateTimeEdit::YearSection;
0
2286-
2287 return ret;
never executed: return ret;
0
2288}-
2289-
2290/*!-
2291 \reimp-
2292*/-
2293-
2294void QDateTimeEdit::paintEvent(QPaintEvent *event)-
2295{-
2296 Q_D(QDateTimeEdit);-
2297 if (!d->calendarPopupEnabled()) {
!d->calendarPopupEnabled()Description
TRUEnever evaluated
FALSEnever evaluated
0
2298 QAbstractSpinBox::paintEvent(event);-
2299 return;
never executed: return;
0
2300 }-
2301-
2302 QStyleOptionSpinBox opt;-
2303 initStyleOption(&opt);-
2304-
2305 QStyleOptionComboBox optCombo;-
2306-
2307 optCombo.init(this);-
2308 optCombo.editable = true;-
2309 optCombo.frame = opt.frame;-
2310 optCombo.subControls = opt.subControls;-
2311 optCombo.activeSubControls = opt.activeSubControls;-
2312 optCombo.state = opt.state;-
2313 if (d->readOnly) {
d->readOnlyDescription
TRUEnever evaluated
FALSEnever evaluated
0
2314 optCombo.state &= ~QStyle::State_Enabled;-
2315 }
never executed: end of block
0
2316-
2317 QPainter p(this);-
2318 style()->drawComplexControl(QStyle::CC_ComboBox, &optCombo, &p, this);-
2319}
never executed: end of block
0
2320-
2321QString QDateTimeEditPrivate::getAmPmText(AmPm ap, Case cs) const-
2322{-
2323 if (ap == AmText) {
ap == AmTextDescription
TRUEnever evaluated
FALSEnever evaluated
0
2324 return (cs == UpperCase ? QDateTimeParser::tr("AM") : QDateTimeParser::tr("am"));
never executed: return (cs == UpperCase ? QDateTimeParser::tr("AM") : QDateTimeParser::tr("am"));
0
2325 } else {-
2326 return (cs == UpperCase ? QDateTimeParser::tr("PM") : QDateTimeParser::tr("pm"));
never executed: return (cs == UpperCase ? QDateTimeParser::tr("PM") : QDateTimeParser::tr("pm"));
0
2327 }-
2328}-
2329-
2330int QDateTimeEditPrivate::absoluteIndex(QDateTimeEdit::Section s, int index) const-
2331{-
2332 for (int i=0; i<sectionNodes.size(); ++i) {
i<sectionNodes.size()Description
TRUEnever evaluated
FALSEnever evaluated
0
2333 if (convertToPublic(sectionNodes.at(i).type) == s && index-- == 0) {
convertToPubli...(i).type) == sDescription
TRUEnever evaluated
FALSEnever evaluated
index-- == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2334 return i;
never executed: return i;
0
2335 }-
2336 }
never executed: end of block
0
2337 return NoSectionIndex;
never executed: return NoSectionIndex;
0
2338}-
2339-
2340int QDateTimeEditPrivate::absoluteIndex(const SectionNode &s) const-
2341{-
2342 return sectionNodes.indexOf(s);
never executed: return sectionNodes.indexOf(s);
0
2343}-
2344-
2345void QDateTimeEditPrivate::interpret(EmitPolicy ep)-
2346{-
2347 Q_Q(QDateTimeEdit);-
2348 QString tmp = displayText();-
2349 int pos = edit->cursorPosition();-
2350 const QValidator::State state = q->validate(tmp, pos);-
2351 if (state != QValidator::Acceptable
state != QVali...or::AcceptableDescription
TRUEnever evaluated
FALSEnever evaluated
0
2352 && correctionMode == QAbstractSpinBox::CorrectToPreviousValue
correctionMode...oPreviousValueDescription
TRUEnever evaluated
FALSEnever evaluated
0
2353 && (state == QValidator::Invalid
state == QValidator::InvalidDescription
TRUEnever evaluated
FALSEnever evaluated
0
2354 || currentSectionIndex < 0
currentSectionIndex < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2355 || !(fieldInfo(currentSectionIndex) & AllowPartial))) {
!(fieldInfo(cu... AllowPartial)Description
TRUEnever evaluated
FALSEnever evaluated
0
2356 setValue(value, ep);-
2357 updateTimeSpec();-
2358 } else {
never executed: end of block
0
2359 QAbstractSpinBoxPrivate::interpret(ep);-
2360 }
never executed: end of block
0
2361}-
2362-
2363void QDateTimeEditPrivate::clearCache() const-
2364{-
2365 QAbstractSpinBoxPrivate::clearCache();-
2366 cachedDay = -1;-
2367}
never executed: end of block
0
2368-
2369/*!-
2370 Initialize \a option with the values from this QDataTimeEdit. This method-
2371 is useful for subclasses when they need a QStyleOptionSpinBox, but don't want-
2372 to fill in all the information themselves.-
2373-
2374 \sa QStyleOption::initFrom()-
2375*/-
2376void QDateTimeEdit::initStyleOption(QStyleOptionSpinBox *option) const-
2377{-
2378 if (!option)
!optionDescription
TRUEnever evaluated
FALSEnever evaluated
0
2379 return;
never executed: return;
0
2380-
2381 Q_D(const QDateTimeEdit);-
2382 QAbstractSpinBox::initStyleOption(option);-
2383 if (d->calendarPopupEnabled()) {
d->calendarPopupEnabled()Description
TRUEnever evaluated
FALSEnever evaluated
0
2384 option->subControls = QStyle::SC_ComboBoxFrame | QStyle::SC_ComboBoxEditField-
2385 | QStyle::SC_ComboBoxArrow;-
2386 if (d->arrowState == QStyle::State_Sunken)
d->arrowState ...::State_SunkenDescription
TRUEnever evaluated
FALSEnever evaluated
0
2387 option->state |= QStyle::State_Sunken;
never executed: option->state |= QStyle::State_Sunken;
0
2388 else-
2389 option->state &= ~QStyle::State_Sunken;
never executed: option->state &= ~QStyle::State_Sunken;
0
2390 }-
2391}
never executed: end of block
0
2392-
2393void QDateTimeEditPrivate::init(const QVariant &var)-
2394{-
2395 Q_Q(QDateTimeEdit);-
2396 switch (var.type()) {-
2397 case QVariant::Date:
never executed: case QVariant::Date:
0
2398 value = QDateTime(var.toDate(), QDATETIMEEDIT_TIME_MIN);-
2399 updateTimeSpec();-
2400 q->setDisplayFormat(defaultDateFormat);-
2401 if (sectionNodes.isEmpty()) // ### safeguard for broken locale
sectionNodes.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
2402 q->setDisplayFormat(QLatin1String("dd/MM/yyyy"));
never executed: q->setDisplayFormat(QLatin1String("dd/MM/yyyy"));
0
2403 break;
never executed: break;
0
2404 case QVariant::DateTime:
never executed: case QVariant::DateTime:
0
2405 value = var;-
2406 updateTimeSpec();-
2407 q->setDisplayFormat(defaultDateTimeFormat);-
2408 if (sectionNodes.isEmpty()) // ### safeguard for broken locale
sectionNodes.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
2409 q->setDisplayFormat(QLatin1String("dd/MM/yyyy hh:mm:ss"));
never executed: q->setDisplayFormat(QLatin1String("dd/MM/yyyy hh:mm:ss"));
0
2410 break;
never executed: break;
0
2411 case QVariant::Time:
never executed: case QVariant::Time:
0
2412 value = QDateTime(QDATETIMEEDIT_DATE_INITIAL, var.toTime());-
2413 updateTimeSpec();-
2414 q->setDisplayFormat(defaultTimeFormat);-
2415 if (sectionNodes.isEmpty()) // ### safeguard for broken locale
sectionNodes.isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
0
2416 q->setDisplayFormat(QLatin1String("hh:mm:ss"));
never executed: q->setDisplayFormat(QLatin1String("hh:mm:ss"));
0
2417 break;
never executed: break;
0
2418 default:
never executed: default:
0
2419 Q_ASSERT_X(0, "QDateTimeEditPrivate::init", "Internal error");-
2420 break;
never executed: break;
0
2421 }-
2422#ifdef QT_KEYPAD_NAVIGATION-
2423 if (QApplication::keypadNavigationEnabled())-
2424 q->setCalendarPopup(true);-
2425#endif-
2426 q->setInputMethodHints(Qt::ImhPreferNumbers);-
2427 setLayoutItemMargins(QStyle::SE_DateTimeEditLayoutItem);-
2428}
never executed: end of block
0
2429-
2430void QDateTimeEditPrivate::_q_resetButton()-
2431{-
2432 updateArrow(QStyle::State_None);-
2433}
never executed: end of block
0
2434-
2435void QDateTimeEditPrivate::updateArrow(QStyle::StateFlag state)-
2436{-
2437 Q_Q(QDateTimeEdit);-
2438-
2439 if (arrowState == state)
arrowState == stateDescription
TRUEnever evaluated
FALSEnever evaluated
0
2440 return;
never executed: return;
0
2441 arrowState = state;-
2442 if (arrowState != QStyle::State_None)
arrowState != ...le::State_NoneDescription
TRUEnever evaluated
FALSEnever evaluated
0
2443 buttonState |= Mouse;
never executed: buttonState |= Mouse;
0
2444 else {-
2445 buttonState = 0;-
2446 hoverControl = QStyle::SC_ComboBoxFrame;-
2447 }
never executed: end of block
0
2448 q->update();-
2449}
never executed: end of block
0
2450-
2451/*!-
2452 \internal-
2453 Returns the hover control at \a pos.-
2454 This will update the hoverRect and hoverControl.-
2455*/-
2456QStyle::SubControl QDateTimeEditPrivate::newHoverControl(const QPoint &pos)-
2457{-
2458 if (!calendarPopupEnabled())
!calendarPopupEnabled()Description
TRUEnever evaluated
FALSEnever evaluated
0
2459 return QAbstractSpinBoxPrivate::newHoverControl(pos);
never executed: return QAbstractSpinBoxPrivate::newHoverControl(pos);
0
2460-
2461 Q_Q(QDateTimeEdit);-
2462-
2463 QStyleOptionComboBox optCombo;-
2464 optCombo.init(q);-
2465 optCombo.editable = true;-
2466 optCombo.subControls = QStyle::SC_All;-
2467 hoverControl = q->style()->hitTestComplexControl(QStyle::CC_ComboBox, &optCombo, pos, q);-
2468 return hoverControl;
never executed: return hoverControl;
0
2469}-
2470-
2471void QDateTimeEditPrivate::updateEditFieldGeometry()-
2472{-
2473 if (!calendarPopupEnabled()) {
!calendarPopupEnabled()Description
TRUEnever evaluated
FALSEnever evaluated
0
2474 QAbstractSpinBoxPrivate::updateEditFieldGeometry();-
2475 return;
never executed: return;
0
2476 }-
2477-
2478 Q_Q(QDateTimeEdit);-
2479-
2480 QStyleOptionComboBox optCombo;-
2481 optCombo.init(q);-
2482 optCombo.editable = true;-
2483 optCombo.subControls = QStyle::SC_ComboBoxEditField;-
2484 edit->setGeometry(q->style()->subControlRect(QStyle::CC_ComboBox, &optCombo,-
2485 QStyle::SC_ComboBoxEditField, q));-
2486}
never executed: end of block
0
2487-
2488QVariant QDateTimeEditPrivate::getZeroVariant() const-
2489{-
2490 Q_ASSERT(type == QVariant::DateTime);-
2491 return QDateTime(QDATETIMEEDIT_DATE_INITIAL, QTime(), spec);
never executed: return QDateTime(QDate(2000, 1, 1), QTime(), spec);
0
2492}-
2493-
2494void QDateTimeEditPrivate::setRange(const QVariant &min, const QVariant &max)-
2495{-
2496 QAbstractSpinBoxPrivate::setRange(min, max);-
2497 syncCalendarWidget();-
2498}
never executed: end of block
0
2499-
2500-
2501bool QDateTimeEditPrivate::isSeparatorKey(const QKeyEvent *ke) const-
2502{-
2503 if (!ke->text().isEmpty() && currentSectionIndex + 1 < sectionNodes.size() && currentSectionIndex >= 0) {
!ke->text().isEmpty()Description
TRUEnever evaluated
FALSEnever evaluated
currentSection...onNodes.size()Description
TRUEnever evaluated
FALSEnever evaluated
currentSectionIndex >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2504 if (fieldInfo(currentSectionIndex) & Numeric) {
fieldInfo(curr...dex) & NumericDescription
TRUEnever evaluated
FALSEnever evaluated
0
2505 if (ke->text().at(0).isNumber())
ke->text().at(0).isNumber()Description
TRUEnever evaluated
FALSEnever evaluated
0
2506 return false;
never executed: return false;
0
2507 } else if (ke->text().at(0).isLetterOrNumber()) {
never executed: end of block
ke->text().at(...tterOrNumber()Description
TRUEnever evaluated
FALSEnever evaluated
0
2508 return false;
never executed: return false;
0
2509 }-
2510 return separators.at(currentSectionIndex + 1).contains(ke->text());
never executed: return separators.at(currentSectionIndex + 1).contains(ke->text());
0
2511 }-
2512 return false;
never executed: return false;
0
2513}-
2514-
2515void QDateTimeEditPrivate::initCalendarPopup(QCalendarWidget *cw)-
2516{-
2517 Q_Q(QDateTimeEdit);-
2518 if (!monthCalendar) {
!monthCalendarDescription
TRUEnever evaluated
FALSEnever evaluated
0
2519 monthCalendar = new QCalendarPopup(q, cw);-
2520 monthCalendar->setObjectName(QLatin1String("qt_datetimedit_calendar"));-
2521 QObject::connect(monthCalendar, SIGNAL(newDateSelected(QDate)), q, SLOT(setDate(QDate)));-
2522 QObject::connect(monthCalendar, SIGNAL(hidingCalendar(QDate)), q, SLOT(setDate(QDate)));-
2523 QObject::connect(monthCalendar, SIGNAL(activated(QDate)), q, SLOT(setDate(QDate)));-
2524 QObject::connect(monthCalendar, SIGNAL(activated(QDate)), monthCalendar, SLOT(close()));-
2525 QObject::connect(monthCalendar, SIGNAL(resetButton()), q, SLOT(_q_resetButton()));-
2526 } else if (cw) {
never executed: end of block
cwDescription
TRUEnever evaluated
FALSEnever evaluated
0
2527 monthCalendar->setCalendarWidget(cw);-
2528 }
never executed: end of block
0
2529 syncCalendarWidget();-
2530}
never executed: end of block
0
2531-
2532void QDateTimeEditPrivate::positionCalendarPopup()-
2533{-
2534 Q_Q(QDateTimeEdit);-
2535 QPoint pos = (q->layoutDirection() == Qt::RightToLeft) ? q->rect().bottomRight() : q->rect().bottomLeft();
(q->layoutDire...::RightToLeft)Description
TRUEnever evaluated
FALSEnever evaluated
0
2536 QPoint pos2 = (q->layoutDirection() == Qt::RightToLeft) ? q->rect().topRight() : q->rect().topLeft();
(q->layoutDire...::RightToLeft)Description
TRUEnever evaluated
FALSEnever evaluated
0
2537 pos = q->mapToGlobal(pos);-
2538 pos2 = q->mapToGlobal(pos2);-
2539 QSize size = monthCalendar->sizeHint();-
2540 QRect screen = QApplication::desktop()->availableGeometry(pos);-
2541 //handle popup falling "off screen"-
2542 if (q->layoutDirection() == Qt::RightToLeft) {
q->layoutDirec...t::RightToLeftDescription
TRUEnever evaluated
FALSEnever evaluated
0
2543 pos.setX(pos.x()-size.width());-
2544 pos2.setX(pos2.x()-size.width());-
2545 if (pos.x() < screen.left())
pos.x() < screen.left()Description
TRUEnever evaluated
FALSEnever evaluated
0
2546 pos.setX(qMax(pos.x(), screen.left()));
never executed: pos.setX(qMax(pos.x(), screen.left()));
0
2547 else if (pos.x()+size.width() > screen.right())
pos.x()+size.w...screen.right()Description
TRUEnever evaluated
FALSEnever evaluated
0
2548 pos.setX(qMax(pos.x()-size.width(), screen.right()-size.width()));
never executed: pos.setX(qMax(pos.x()-size.width(), screen.right()-size.width()));
0
2549 } else {
never executed: end of block
0
2550 if (pos.x()+size.width() > screen.right())
pos.x()+size.w...screen.right()Description
TRUEnever evaluated
FALSEnever evaluated
0
2551 pos.setX(screen.right()-size.width());
never executed: pos.setX(screen.right()-size.width());
0
2552 pos.setX(qMax(pos.x(), screen.left()));-
2553 }
never executed: end of block
0
2554 if (pos.y() + size.height() > screen.bottom())
pos.y() + size...creen.bottom()Description
TRUEnever evaluated
FALSEnever evaluated
0
2555 pos.setY(pos2.y() - size.height());
never executed: pos.setY(pos2.y() - size.height());
0
2556 else if (pos.y() < screen.top())
pos.y() < screen.top()Description
TRUEnever evaluated
FALSEnever evaluated
0
2557 pos.setY(screen.top());
never executed: pos.setY(screen.top());
0
2558 if (pos.y() < screen.top())
pos.y() < screen.top()Description
TRUEnever evaluated
FALSEnever evaluated
0
2559 pos.setY(screen.top());
never executed: pos.setY(screen.top());
0
2560 if (pos.y()+size.height() > screen.bottom())
pos.y()+size.h...creen.bottom()Description
TRUEnever evaluated
FALSEnever evaluated
0
2561 pos.setY(screen.bottom()-size.height());
never executed: pos.setY(screen.bottom()-size.height());
0
2562 monthCalendar->move(pos);-
2563}
never executed: end of block
0
2564-
2565bool QDateTimeEditPrivate::calendarPopupEnabled() const-
2566{-
2567 return (calendarPopup && (sections & (DateSectionMask)));
never executed: return (calendarPopup && (sections & (DateSectionMask)));
0
2568}-
2569-
2570void QDateTimeEditPrivate::syncCalendarWidget()-
2571{-
2572 Q_Q(QDateTimeEdit);-
2573 if (monthCalendar) {
monthCalendarDescription
TRUEnever evaluated
FALSEnever evaluated
0
2574 const QSignalBlocker blocker(monthCalendar);-
2575 monthCalendar->setDateRange(q->minimumDate(), q->maximumDate());-
2576 monthCalendar->setDate(q->date());-
2577 }
never executed: end of block
0
2578}
never executed: end of block
0
2579-
2580QCalendarPopup::QCalendarPopup(QWidget * parent, QCalendarWidget *cw)-
2581 : QWidget(parent, Qt::Popup)-
2582{-
2583 setAttribute(Qt::WA_WindowPropagation);-
2584-
2585 dateChanged = false;-
2586 if (!cw) {
!cwDescription
TRUEnever evaluated
FALSEnever evaluated
0
2587 verifyCalendarInstance();-
2588 } else {
never executed: end of block
0
2589 setCalendarWidget(cw);-
2590 }
never executed: end of block
0
2591}-
2592-
2593QCalendarWidget *QCalendarPopup::verifyCalendarInstance()-
2594{-
2595 if (calendar.isNull()) {
calendar.isNull()Description
TRUEnever evaluated
FALSEnever evaluated
0
2596 QCalendarWidget *cw = new QCalendarWidget(this);-
2597 cw->setVerticalHeaderFormat(QCalendarWidget::NoVerticalHeader);-
2598#ifdef QT_KEYPAD_NAVIGATION-
2599 if (QApplication::keypadNavigationEnabled())-
2600 cw->setHorizontalHeaderFormat(QCalendarWidget::SingleLetterDayNames);-
2601#endif-
2602 setCalendarWidget(cw);-
2603 return cw;
never executed: return cw;
0
2604 } else {-
2605 return calendar.data();
never executed: return calendar.data();
0
2606 }-
2607}-
2608-
2609void QCalendarPopup::setCalendarWidget(QCalendarWidget *cw)-
2610{-
2611 Q_ASSERT(cw);-
2612 QVBoxLayout *widgetLayout = qobject_cast<QVBoxLayout*>(layout());-
2613 if (!widgetLayout) {
!widgetLayoutDescription
TRUEnever evaluated
FALSEnever evaluated
0
2614 widgetLayout = new QVBoxLayout(this);-
2615 widgetLayout->setMargin(0);-
2616 widgetLayout->setSpacing(0);-
2617 }
never executed: end of block
0
2618 delete calendar.data();-
2619 calendar = QPointer<QCalendarWidget>(cw);-
2620 widgetLayout->addWidget(cw);-
2621-
2622 connect(cw, SIGNAL(activated(QDate)), this, SLOT(dateSelected(QDate)));-
2623 connect(cw, SIGNAL(clicked(QDate)), this, SLOT(dateSelected(QDate)));-
2624 connect(cw, SIGNAL(selectionChanged()), this, SLOT(dateSelectionChanged()));-
2625-
2626 cw->setFocus();-
2627}
never executed: end of block
0
2628-
2629-
2630void QCalendarPopup::setDate(const QDate &date)-
2631{-
2632 oldDate = date;-
2633 verifyCalendarInstance()->setSelectedDate(date);-
2634}
never executed: end of block
0
2635-
2636void QCalendarPopup::setDateRange(const QDate &min, const QDate &max)-
2637{-
2638 QCalendarWidget *cw = verifyCalendarInstance();-
2639 cw->setMinimumDate(min);-
2640 cw->setMaximumDate(max);-
2641}
never executed: end of block
0
2642-
2643void QCalendarPopup::mousePressEvent(QMouseEvent *event)-
2644{-
2645 QDateTimeEdit *dateTime = qobject_cast<QDateTimeEdit *>(parentWidget());-
2646 if (dateTime) {
dateTimeDescription
TRUEnever evaluated
FALSEnever evaluated
0
2647 QStyleOptionComboBox opt;-
2648 opt.init(dateTime);-
2649 QRect arrowRect = dateTime->style()->subControlRect(QStyle::CC_ComboBox, &opt,-
2650 QStyle::SC_ComboBoxArrow, dateTime);-
2651 arrowRect.moveTo(dateTime->mapToGlobal(arrowRect .topLeft()));-
2652 if (arrowRect.contains(event->globalPos()) || rect().contains(event->pos()))
arrowRect.cont...->globalPos())Description
TRUEnever evaluated
FALSEnever evaluated
rect().contains(event->pos())Description
TRUEnever evaluated
FALSEnever evaluated
0
2653 setAttribute(Qt::WA_NoMouseReplay);
never executed: setAttribute(Qt::WA_NoMouseReplay);
0
2654 }
never executed: end of block
0
2655 QWidget::mousePressEvent(event);-
2656}
never executed: end of block
0
2657-
2658void QCalendarPopup::mouseReleaseEvent(QMouseEvent*)-
2659{-
2660 emit resetButton();-
2661}
never executed: end of block
0
2662-
2663bool QCalendarPopup::event(QEvent *event)-
2664{-
2665 if (event->type() == QEvent::KeyPress) {
event->type() ...vent::KeyPressDescription
TRUEnever evaluated
FALSEnever evaluated
0
2666 QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);-
2667 if (keyEvent->matches(QKeySequence::Cancel))
keyEvent->matc...uence::Cancel)Description
TRUEnever evaluated
FALSEnever evaluated
0
2668 dateChanged = false;
never executed: dateChanged = false;
0
2669 }
never executed: end of block
0
2670 return QWidget::event(event);
never executed: return QWidget::event(event);
0
2671}-
2672-
2673void QCalendarPopup::dateSelectionChanged()-
2674{-
2675 dateChanged = true;-
2676 emit newDateSelected(verifyCalendarInstance()->selectedDate());-
2677}
never executed: end of block
0
2678void QCalendarPopup::dateSelected(const QDate &date)-
2679{-
2680 dateChanged = true;-
2681 emit activated(date);-
2682 close();-
2683}
never executed: end of block
0
2684-
2685void QCalendarPopup::hideEvent(QHideEvent *)-
2686{-
2687 emit resetButton();-
2688 if (!dateChanged)
!dateChangedDescription
TRUEnever evaluated
FALSEnever evaluated
0
2689 emit hidingCalendar(oldDate);
never executed: hidingCalendar(oldDate);
0
2690}
never executed: end of block
0
2691-
2692QT_END_NAMESPACE-
2693#include "moc_qdatetimeedit.cpp"-
2694#include "moc_qdatetimeedit_p.cpp"-
2695-
2696#endif // QT_NO_DATETIMEEDIT-
Source codeSwitch to Preprocessed file

Generated by Squish Coco Non-Commercial 4.3.0-BETA-master-30-08-2018-4cb69e9