diff options
author | Andy Shaw <andy.shaw@qt.io> | 2018-12-05 12:12:03 +0100 |
---|---|---|
committer | Andy Shaw <andy.shaw@qt.io> | 2019-01-14 07:30:35 +0000 |
commit | b1b68aa279275e93b867c29fa42350f42b9d9728 (patch) | |
tree | c659c0ebb560d015f497ecce54cda8bf3c39fe4f /src/controls | |
parent | 08b418078217b1c7c8756358810773f492a0df35 (diff) | |
download | qtquickcontrols-b1b68aa279275e93b867c29fa42350f42b9d9728.tar.gz |
Calendar: Ignore any time specified for a minimum and maximum date
Since Calendar only cares about the date part and not the time, we
should ignore the time part when it is set as the minimum and maximum
and manually set it to 0:00:00 and 23:59:59 respectively. This ensures
that the day itself is still seen as valid irrespective of what time
was passed to Date().
Change-Id: I57c311ffe7d3fb1ab69c59296a067a66f1007137
Fixes: QTBUG-71997
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Diffstat (limited to 'src/controls')
-rw-r--r-- | src/controls/Private/qquickrangeddate.cpp | 35 | ||||
-rw-r--r-- | src/controls/Private/qquickrangeddate_p.h | 8 |
2 files changed, 23 insertions, 20 deletions
diff --git a/src/controls/Private/qquickrangeddate.cpp b/src/controls/Private/qquickrangeddate.cpp index df7958ac..67b80e35 100644 --- a/src/controls/Private/qquickrangeddate.cpp +++ b/src/controls/Private/qquickrangeddate.cpp @@ -42,8 +42,8 @@ QT_BEGIN_NAMESPACE // JavaScript Date > QDate conversion is not correct for large negative dates. -Q_GLOBAL_STATIC_WITH_ARGS(const QDateTime, jsMinimumDate, (QDateTime(QDate(1, 1, 1), QTime()))) -Q_GLOBAL_STATIC_WITH_ARGS(const QDateTime, jsMaximumDate, (QDateTime(QDate(275759, 10, 25), QTime()))) +Q_GLOBAL_STATIC_WITH_ARGS(const QDate, jsMinimumDate, (1, 1, 1)) +Q_GLOBAL_STATIC_WITH_ARGS(const QDate, jsMaximumDate, (275759, 10, 25)) QQuickRangedDate1::QQuickRangedDate1() : QObject(0), @@ -61,10 +61,11 @@ void QQuickRangedDate1::setDate(const QDateTime &date) if (date == mDate) return; - if (date < mMinimumDate) { - mDate = mMinimumDate; - } else if (date > mMaximumDate) { - mDate = mMaximumDate; + const QDate tmpDate = date.date(); + if (tmpDate < mMinimumDate) { + mDate = minimumDate(); + } else if (tmpDate > mMaximumDate) { + mDate = maximumDate(); } else { mDate = date; } @@ -75,17 +76,18 @@ void QQuickRangedDate1::setDate(const QDateTime &date) /*! \internal \qmlproperty date QQuickRangedDate::minimumDate */ -void QQuickRangedDate1::setMinimumDate(const QDateTime &minimumDate) +void QQuickRangedDate1::setMinimumDate(const QDateTime &minDate) { - if (minimumDate == mMinimumDate) + const QDate tmpDate = minDate.date(); + if (tmpDate == mMinimumDate) return; - mMinimumDate = qMax(minimumDate, *jsMinimumDate); + mMinimumDate = qMax(tmpDate, *jsMinimumDate); emit minimumDateChanged(); // If the new minimumDate makes date invalid, clamp date to it. - if (mDate < mMinimumDate) { - mDate = mMinimumDate; + if (mDate < minimumDate()) { + mDate = minimumDate(); emit dateChanged(); } } @@ -93,19 +95,20 @@ void QQuickRangedDate1::setMinimumDate(const QDateTime &minimumDate) /*! \internal \qmlproperty date QQuickRangedDate::maximumDate */ -void QQuickRangedDate1::setMaximumDate(const QDateTime &maximumDate) +void QQuickRangedDate1::setMaximumDate(const QDateTime &maxDate) { - if (maximumDate == mMaximumDate) + const QDate tmpDate = maxDate.date(); + if (tmpDate == mMaximumDate) return; // If the new maximumDate is smaller than minimumDate, clamp maximumDate to it. // If the new maximumDate is larger than jsMaximumDate, also clamp it. - mMaximumDate = maximumDate < mMinimumDate ? mMinimumDate : qMin(maximumDate, *jsMaximumDate); + mMaximumDate = tmpDate < mMinimumDate ? mMinimumDate : qMin(tmpDate, *jsMaximumDate); emit maximumDateChanged(); // If the new maximumDate makes the date invalid, clamp it. - if (mDate > mMaximumDate) { - mDate = mMaximumDate; + if (mDate > maximumDate()) { + mDate = maximumDate(); emit dateChanged(); } } diff --git a/src/controls/Private/qquickrangeddate_p.h b/src/controls/Private/qquickrangeddate_p.h index 836daa4c..048d7edd 100644 --- a/src/controls/Private/qquickrangeddate_p.h +++ b/src/controls/Private/qquickrangeddate_p.h @@ -60,11 +60,11 @@ public: void setDate(const QDateTime &date); void resetDate() {} - QDateTime minimumDate() const { return mMinimumDate; } + QDateTime minimumDate() const { return QDateTime(mMinimumDate, QTime()); } void setMinimumDate(const QDateTime &minimumDate); void resetMinimumDate() {} - QDateTime maximumDate() const { return mMaximumDate; } + QDateTime maximumDate() const { return QDateTime(mMaximumDate, QTime(23, 59, 59, 999)); } void setMaximumDate(const QDateTime &maximumDate); void resetMaximumDate() {} @@ -75,8 +75,8 @@ Q_SIGNALS: private: QDateTime mDate; - QDateTime mMinimumDate; - QDateTime mMaximumDate; + QDate mMinimumDate; + QDate mMaximumDate; }; QT_END_NAMESPACE |