void QgsDateTimeEdit::mousePressEvent( QMouseEvent *event ) { // catch mouse press on the button (when the current value is null) // in non-calendar mode: modifiy the date so it leads to showing current date (don't bother about time) // in calendar mode: be sure NULL is displayed when needed and show page of current date in calendar widget bool updateCalendar = false; if ( mIsNull ) { QStyle::SubControl control; if ( calendarPopup() ) { QStyleOptionComboBox optCombo; optCombo.init( this ); optCombo.editable = true; optCombo.subControls = QStyle::SC_All; control = style()->hitTestComplexControl( QStyle::CC_ComboBox, &optCombo, event->pos(), this ); if ( control == QStyle::SC_ComboBoxArrow && calendarWidget() ) { mCurrentPressEvent = true; // ensure the line edit still displays NULL updateCalendar = true; displayNull( updateCalendar ); mCurrentPressEvent = false; } } else { QStyleOptionSpinBox opt; this->initStyleOption( &opt ); control = style()->hitTestComplexControl( QStyle::CC_SpinBox, &opt, event->pos(), this ); if ( control == QStyle::SC_SpinBoxDown || control == QStyle::SC_SpinBoxUp ) { mCurrentPressEvent = true; disconnect( this, &QDateTimeEdit::dateTimeChanged, this, &QgsDateTimeEdit::changed ); resetBeforeChange( control == QStyle::SC_SpinBoxDown ? -1 : 1 ); connect( this, &QDateTimeEdit::dateTimeChanged, this, &QgsDateTimeEdit::changed ); mCurrentPressEvent = false; } } } QDateTimeEdit::mousePressEvent( event ); if ( updateCalendar ) { // set calendar page to current date to avoid going to minimal date page when value is null calendarWidget()->setCurrentPage( QDate::currentDate().year(), QDate::currentDate().month() ); } }
int QDateTimeEdit::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QAbstractSpinBox::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { if (_id < 7) qt_static_metacall(this, _c, _id, _a); _id -= 7; } #ifndef QT_NO_PROPERTIES else if (_c == QMetaObject::ReadProperty) { void *_v = _a[0]; switch (_id) { case 0: *reinterpret_cast< QDateTime*>(_v) = dateTime(); break; case 1: *reinterpret_cast< QDate*>(_v) = date(); break; case 2: *reinterpret_cast< QTime*>(_v) = time(); break; case 3: *reinterpret_cast< QDateTime*>(_v) = maximumDateTime(); break; case 4: *reinterpret_cast< QDateTime*>(_v) = minimumDateTime(); break; case 5: *reinterpret_cast< QDate*>(_v) = maximumDate(); break; case 6: *reinterpret_cast< QDate*>(_v) = minimumDate(); break; case 7: *reinterpret_cast< QTime*>(_v) = maximumTime(); break; case 8: *reinterpret_cast< QTime*>(_v) = minimumTime(); break; case 9: *reinterpret_cast< Section*>(_v) = currentSection(); break; case 10: *reinterpret_cast<int*>(_v) = QFlag(displayedSections()); break; case 11: *reinterpret_cast< QString*>(_v) = displayFormat(); break; case 12: *reinterpret_cast< bool*>(_v) = calendarPopup(); break; case 13: *reinterpret_cast< int*>(_v) = currentSectionIndex(); break; case 14: *reinterpret_cast< int*>(_v) = sectionCount(); break; case 15: *reinterpret_cast< Qt::TimeSpec*>(_v) = timeSpec(); break; } _id -= 16; } else if (_c == QMetaObject::WriteProperty) { void *_v = _a[0]; switch (_id) { case 0: setDateTime(*reinterpret_cast< QDateTime*>(_v)); break; case 1: setDate(*reinterpret_cast< QDate*>(_v)); break; case 2: setTime(*reinterpret_cast< QTime*>(_v)); break; case 3: setMaximumDateTime(*reinterpret_cast< QDateTime*>(_v)); break; case 4: setMinimumDateTime(*reinterpret_cast< QDateTime*>(_v)); break; case 5: setMaximumDate(*reinterpret_cast< QDate*>(_v)); break; case 6: setMinimumDate(*reinterpret_cast< QDate*>(_v)); break; case 7: setMaximumTime(*reinterpret_cast< QTime*>(_v)); break; case 8: setMinimumTime(*reinterpret_cast< QTime*>(_v)); break; case 9: setCurrentSection(*reinterpret_cast< Section*>(_v)); break; case 11: setDisplayFormat(*reinterpret_cast< QString*>(_v)); break; case 12: setCalendarPopup(*reinterpret_cast< bool*>(_v)); break; case 13: setCurrentSectionIndex(*reinterpret_cast< int*>(_v)); break; case 15: setTimeSpec(*reinterpret_cast< Qt::TimeSpec*>(_v)); break; } _id -= 16; } else if (_c == QMetaObject::ResetProperty) { switch (_id) { case 3: clearMaximumDateTime(); break; case 4: clearMinimumDateTime(); break; case 5: clearMaximumDate(); break; case 6: clearMinimumDate(); break; case 7: clearMaximumTime(); break; case 8: clearMinimumTime(); break; } _id -= 16; } else if (_c == QMetaObject::QueryPropertyDesignable) { _id -= 16; } else if (_c == QMetaObject::QueryPropertyScriptable) { _id -= 16; } else if (_c == QMetaObject::QueryPropertyStored) { _id -= 16; } else if (_c == QMetaObject::QueryPropertyEditable) { _id -= 16; } else if (_c == QMetaObject::QueryPropertyUser) { _id -= 16; } #endif // QT_NO_PROPERTIES return _id; }
int QgsDateTimeEdit::spinButtonWidth() const { return calendarPopup() ? 25 : 18; }