diff options
author | Sami Nurmenniemi <sami.nurmenniemi@qt.io> | 2019-01-24 14:45:19 +0200 |
---|---|---|
committer | Sami Nurmenniemi <sami.nurmenniemi@qt.io> | 2019-02-04 11:39:20 +0000 |
commit | 32bd51b0ee16696488f1476c004e944b44f76eb6 (patch) | |
tree | 13b90fd9411dc22de79706c2b916111db8d53ffb /src/automationhelper.cpp | |
parent | 64f65e26feb4f6b0b3ac31cfc4e22c5971c1c41d (diff) |
Enable boot2qt launcher automatic demo mode
Task-number: QTBUG-72852
Change-Id: I8e2ab58a2a0b13f5a1ce67a24c5c75b809683324
Reviewed-by: Tuomas Heimonen <tuomas.heimonen@qt.io>
Diffstat (limited to 'src/automationhelper.cpp')
-rw-r--r-- | src/automationhelper.cpp | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/src/automationhelper.cpp b/src/automationhelper.cpp new file mode 100644 index 0000000..b4c6a99 --- /dev/null +++ b/src/automationhelper.cpp @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt for Device Creation. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "automationhelper.h" +#include <QCoreApplication> +#include <QApplication> +#include <QQuickWindow> + +AutomationHelper::AutomationHelper(QObject* parent) : + QObject(parent) +{ +} + +/*! + * \brief Click center of given QQuickItem + * \param item Item to click + */ +void AutomationHelper::click(QQuickItem* item) +{ + QQuickWindow* window = item->window(); + if (!window) { + qWarning()<<"No window for item "<<item; + return; + } + + int centerX = static_cast<int>(item->width()/2); + int centerY = static_cast<int>(item->height()/2); + QPointF globalCoordinates = item->mapToGlobal(QPoint(centerX, centerY)); + QPointF windowCoordinates = window->mapFromGlobal(globalCoordinates.toPoint()); + + QMouseEvent pressEvent(QEvent::MouseButtonPress, windowCoordinates, windowCoordinates, windowCoordinates, + Qt::MouseButton::LeftButton, Qt::NoButton, Qt::NoModifier, Qt::MouseEventSynthesizedByApplication); + QMouseEvent releaseEvent(QEvent::MouseButtonRelease, windowCoordinates, windowCoordinates, windowCoordinates, + Qt::MouseButton::LeftButton, Qt::NoButton, Qt::NoModifier, Qt::MouseEventSynthesizedByApplication); + QApplication::instance()->sendEvent(window, &pressEvent); + QApplication::instance()->sendEvent(window, &releaseEvent); +} + +/*! + * \brief Click center of child item of given QQuickItem + * \param item Item which child to click + * \param childObjectName Object name of the child to click + */ +void AutomationHelper::clickChildObject(QQuickItem* item, QString childObjectName) +{ + QQuickItem* obj = findChildObject(item, childObjectName); + if (!obj) { + qWarning()<<"No such child "<<childObjectName<<" for "<<item; + return; + } + + click(obj); +} + +/*! + * \brief Find child item of given QQuickItem + * + * This function is needed for exposing findChildObject to QML + * \param item Item which child to find + * \param childObjectName Object name of the child to find + * \return found child + */ +QQuickItem* AutomationHelper::findChildObject(QQuickItem* item, QString childObjectName) +{ + return item->findChild<QQuickItem*>(childObjectName); +} |