Source code

Revision control

Copy as Markdown

// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "capturedevent.h"
#include <QMetaEnum>
#include <QMouseEvent>
namespace {
static inline bool isMouseEvent(const QEvent &event)
{
return event.type() >= QEvent::MouseButtonPress && event.type() <= QEvent::MouseMove;
}
}
CapturedEvent::CapturedEvent()
{
}
CapturedEvent::CapturedEvent(const QEvent &event, int delay)
{
setEvent(event);
setDelay(delay);
}
void CapturedEvent::setEvent(const QEvent &event)
{
mType = event.type();
if (isMouseEvent(event)) {
const QMouseEvent *mouseEvent = static_cast<const QMouseEvent*>(&event);
mPos = mouseEvent->pos();
mMouseButton = mouseEvent->button();
}
}
QEvent::Type CapturedEvent::type() const
{
return mType;
}
int CapturedEvent::delay() const
{
return mDelay;
}
void CapturedEvent::setDelay(int delay)
{
mDelay = delay;
mCppCommand.clear();
// We generate the C++ command here instead of when the event is captured,
// because events() might trim some events, causing the delay of some events to change.
// If we did it earlier, the events wouldn't have correct delays.
if (mType == QEvent::MouseMove) {
mCppCommand = QString::fromLatin1("QTest::mouseMove(&view, QPoint(%1, %2), %3);")
.arg(mPos.x())
.arg(mPos.y())
.arg(mDelay);
} else if (mType >= QEvent::MouseButtonPress && mType <= QEvent::MouseButtonDblClick) {
QString eventTestFunctionName = (mType == QEvent::MouseButtonPress
? "mousePress" : (mType == QEvent::MouseButtonRelease
? "mouseRelease" : "mouseDClick"));
QString buttonStr = QMetaEnum::fromType<Qt::MouseButtons>().valueToKey(mMouseButton);
mCppCommand = QString::fromLatin1("QTest::%1(&view, Qt::%2, Qt::NoModifier, QPoint(%3, %4), %5);")
.arg(eventTestFunctionName)
.arg(buttonStr)
.arg(mPos.x())
.arg(mPos.y())
.arg(mDelay);
}
}
QString CapturedEvent::cppCommand() const
{
return mCppCommand;
}