diff options
-rw-r--r-- | src/imports/calendar/qquickmonthgrid.cpp | 75 | ||||
-rw-r--r-- | src/imports/calendar/qquickmonthgrid_p.h | 4 | ||||
-rw-r--r-- | tests/auto/calendar/data/tst_monthgrid.qml | 53 |
3 files changed, 93 insertions, 39 deletions
diff --git a/src/imports/calendar/qquickmonthgrid.cpp b/src/imports/calendar/qquickmonthgrid.cpp index 9621f49a..46b18db6 100644 --- a/src/imports/calendar/qquickmonthgrid.cpp +++ b/src/imports/calendar/qquickmonthgrid.cpp @@ -106,12 +106,17 @@ public: void resizeItems(); - QQuickItem *cellAt(const QPoint &pos) const; + QQuickItem *cellAt(const QPointF &pos) const; QDate dateOf(QQuickItem *cell) const; - void updatePress(const QPoint &pos); + void updatePress(const QPointF &pos); void clearPress(bool clicked); + void handlePress(const QPointF &point) override; + void handleMove(const QPointF &point) override; + void handleRelease(const QPointF &point) override; + void handleUngrab() override; + static void setContextProperty(QQuickItem *item, const QString &name, const QVariant &value); QString title; @@ -133,11 +138,13 @@ void QQuickMonthGridPrivate::resizeItems() itemSize.setHeight((contentItem->height() - 5 * spacing) / 6); const auto childItems = contentItem->childItems(); - for (QQuickItem *item : childItems) - item->setSize(itemSize); + for (QQuickItem *item : childItems) { + if (!QQuickItemPrivate::get(item)->isTransparentForPositioner()) + item->setSize(itemSize); + } } -QQuickItem *QQuickMonthGridPrivate::cellAt(const QPoint &pos) const +QQuickItem *QQuickMonthGridPrivate::cellAt(const QPointF &pos) const { Q_Q(const QQuickMonthGrid); if (contentItem) { @@ -154,7 +161,7 @@ QDate QQuickMonthGridPrivate::dateOf(QQuickItem *cell) const return QDate(); } -void QQuickMonthGridPrivate::updatePress(const QPoint &pos) +void QQuickMonthGridPrivate::updatePress(const QPointF &pos) { Q_Q(QQuickMonthGrid); clearPress(false); @@ -178,6 +185,33 @@ void QQuickMonthGridPrivate::clearPress(bool clicked) pressedItem = nullptr; } +void QQuickMonthGridPrivate::handlePress(const QPointF &point) +{ + Q_Q(QQuickMonthGrid); + QQuickControlPrivate::handlePress(point); + updatePress(point); + if (pressedDate.isValid()) + pressTimer = q->startTimer(qGuiApp->styleHints()->mousePressAndHoldInterval()); +} + +void QQuickMonthGridPrivate::handleMove(const QPointF &point) +{ + QQuickControlPrivate::handleMove(point); + updatePress(point); +} + +void QQuickMonthGridPrivate::handleRelease(const QPointF &point) +{ + QQuickControlPrivate::handleRelease(point); + clearPress(true); +} + +void QQuickMonthGridPrivate::handleUngrab() +{ + QQuickControlPrivate::handleUngrab(); + clearPress(false); +} + void QQuickMonthGridPrivate::setContextProperty(QQuickItem *item, const QString &name, const QVariant &value) { QQmlContext *context = qmlContext(item); @@ -402,35 +436,6 @@ void QQuickMonthGrid::updatePolish() d->resizeItems(); } -void QQuickMonthGrid::mousePressEvent(QMouseEvent *event) -{ - Q_D(QQuickMonthGrid); - d->updatePress(event->pos()); - if (d->pressedDate.isValid()) - d->pressTimer = startTimer(qGuiApp->styleHints()->mousePressAndHoldInterval()); - event->accept(); -} - -void QQuickMonthGrid::mouseMoveEvent(QMouseEvent *event) -{ - Q_D(QQuickMonthGrid); - d->updatePress(event->pos()); - event->accept(); -} - -void QQuickMonthGrid::mouseReleaseEvent(QMouseEvent *event) -{ - Q_D(QQuickMonthGrid); - d->clearPress(true); - event->accept(); -} - -void QQuickMonthGrid::mouseUngrabEvent() -{ - Q_D(QQuickMonthGrid); - d->clearPress(false); -} - void QQuickMonthGrid::timerEvent(QTimerEvent *event) { Q_D(QQuickMonthGrid); diff --git a/src/imports/calendar/qquickmonthgrid_p.h b/src/imports/calendar/qquickmonthgrid_p.h index 20c9c0fd..b85e0921 100644 --- a/src/imports/calendar/qquickmonthgrid_p.h +++ b/src/imports/calendar/qquickmonthgrid_p.h @@ -101,10 +101,6 @@ protected: void paddingChange(const QMarginsF &newPadding, const QMarginsF &oldPadding) override; void updatePolish() override; - void mousePressEvent(QMouseEvent *event) override; - void mouseMoveEvent(QMouseEvent *event) override; - void mouseReleaseEvent(QMouseEvent *event) override; - void mouseUngrabEvent() override; void timerEvent(QTimerEvent *event) override; private: diff --git a/tests/auto/calendar/data/tst_monthgrid.qml b/tests/auto/calendar/data/tst_monthgrid.qml index 413e6d55..f07121dc 100644 --- a/tests/auto/calendar/data/tst_monthgrid.qml +++ b/tests/auto/calendar/data/tst_monthgrid.qml @@ -79,6 +79,11 @@ TestCase { } } + Component { + id: signalSpy + SignalSpy { } + } + function test_locale() { var control = delegateGrid.createObject(testCase, {month: 0, year: 2013}) @@ -227,4 +232,52 @@ TestCase { control.destroy() } + + function test_clicked_data() { + return [ + { tag: "mouse", touch: false }, + { tag: "touch", touch: true } + ] + } + + function test_clicked(data) { + var control = createTemporaryObject(defaultGrid, testCase) + verify(control) + + compare(control.contentItem.children.length, 6 * 7 + 1) + + var pressedSpy = signalSpy.createObject(control, {target: control, signalName: "pressed"}) + verify(pressedSpy.valid) + + var releasedSpy = signalSpy.createObject(control, {target: control, signalName: "released"}) + verify(releasedSpy.valid) + + var clickedSpy = signalSpy.createObject(control, {target: control, signalName: "clicked"}) + verify(clickedSpy.valid) + + var touch = touchEvent(control) + + for (var i = 0; i < 42; ++i) { + var cell = control.contentItem.children[i] + verify(cell) + + if (data.touch) + touch.press(0, cell).commit() + else + mousePress(cell) + + compare(pressedSpy.count, i + 1) + compare(releasedSpy.count, i) + compare(clickedSpy.count, i) + + if (data.touch) + touch.release(0, cell).commit() + else + mouseRelease(cell) + + compare(pressedSpy.count, i + 1) + compare(releasedSpy.count, i + 1) + compare(clickedSpy.count, i + 1) + } + } } |