summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndy Shaw <andy.shaw@qt.io>2018-12-05 12:12:03 +0100
committerAndy Shaw <andy.shaw@qt.io>2019-01-14 07:30:35 +0000
commitb1b68aa279275e93b867c29fa42350f42b9d9728 (patch)
treec659c0ebb560d015f497ecce54cda8bf3c39fe4f /src
parent08b418078217b1c7c8756358810773f492a0df35 (diff)
downloadqtquickcontrols-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')
-rw-r--r--src/controls/Private/qquickrangeddate.cpp35
-rw-r--r--src/controls/Private/qquickrangeddate_p.h8
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