Files
KDDockWidgets/src/qtquick/TestHelpers_qtquick.cpp
2022-06-07 17:14:05 +01:00

140 lines
3.8 KiB
C++

/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
Contact KDAB at <info@kdab.com> for commercial licensing options.
*/
#include "KDDockWidgets.h"
#include "Platform_qtquick.h"
#include "views/View_qtquick.h"
#include "qtquick/views/MainWindow_qtquick.h"
#include "controllers/MainWindow.h"
#include <QGuiApplication>
#include <QQmlEngine>
#include <QQuickStyle>
#include <QQuickItem>
#include <QQuickView>
#include <QtTest/QTest>
using namespace KDDockWidgets;
#ifdef DOCKS_DEVELOPER_MODE
namespace KDDockWidgets {
class TestView_qtquick : public Views::View_qtquick
{
public:
explicit TestView_qtquick(Platform::CreateViewOptions opts, QQuickItem *parent)
: Views::View_qtquick(nullptr, Type::None, parent)
, m_opts(opts)
{
setMinimumSize(opts.minSize);
setMaximumSize(opts.maxSize);
}
QSize sizeHint() const override
{
return m_opts.sizeHint;
}
private:
Platform::CreateViewOptions m_opts;
};
}
Platform_qtquick::Platform_qtquick(int &argc, char **argv)
: Platform_qt(argc, argv)
{
new QApplication(argc, argv);
init();
}
void Platform_qtquick::tests_initPlatform_impl()
{
Platform_qt::tests_initPlatform_impl();
QQuickStyle::setStyle(QStringLiteral("Material")); // so we don't load KDE plugins
plat()->setQmlEngine(new QQmlEngine());
}
void Platform_qtquick::tests_deinitPlatform_impl()
{
delete m_qmlEngine;
Platform_qt::tests_deinitPlatform_impl();
}
View *Platform_qtquick::tests_createView(CreateViewOptions opts, View *parent)
{
auto parentItem = parent ? Views::asQQuickItem(parent) : nullptr;
auto newItem = new TestView_qtquick(opts, parentItem);
if (!parentItem && opts.createWindow) {
auto view = new QQuickView(m_qmlEngine, nullptr);
view->resize(QSize(800, 800));
newItem->QQuickItem::setParentItem(view->contentItem());
newItem->QQuickItem::setParent(view->contentItem());
if (opts.isVisible)
newItem->Views::View_qtquick::setVisible(true);
QTest::qWait(100); // the root object gets sized delayed
}
return newItem;
}
View *Platform_qtquick::tests_createFocusableView(CreateViewOptions opts, View *parent)
{
auto view = tests_createView(opts, parent);
view->setFocusPolicy(Qt::StrongFocus);
return view;
}
View *Platform_qtquick::tests_createNonClosableView(View *parent)
{
CreateViewOptions opts;
opts.isVisible = true;
auto view = tests_createView(opts, parent);
view->closeRequested.connect([](QCloseEvent *ev) {
ev->ignore();
});
return view;
}
Controllers::MainWindow *Platform_qtquick::createMainWindow(const QString &uniqueName,
CreateViewOptions viewOpts,
MainWindowOptions options,
View *parent, Qt::WindowFlags flags) const
{
QQuickItem *parentItem = Views::asQQuickItem(parent);
if (!parentItem) {
auto view = new QQuickView(m_qmlEngine, nullptr);
view->resize(viewOpts.size);
view->setResizeMode(QQuickView::SizeRootObjectToView);
view->setSource(QUrl(QStringLiteral("qrc:/main.qml")));
if (viewOpts.isVisible)
view->show();
parentItem = view->rootObject();
Platform::instance()->tests_wait(100); // the root object gets sized delayed
}
auto view = new Views::MainWindow_qtquick(uniqueName, options,
parentItem, flags);
return view->mainWindow();
}
#endif