diff --git a/src/Controller.h b/src/Controller.h index 76e884ab..a8a72bfd 100644 --- a/src/Controller.h +++ b/src/Controller.h @@ -27,6 +27,7 @@ class ViewWrapper; enum class Type { FIRST = 1, // Keep first + None = 0, Frame = 1, TitleBar = 2, TabBar = 4, diff --git a/src/Platform.h b/src/Platform.h index 206a6677..e75682f7 100644 --- a/src/Platform.h +++ b/src/Platform.h @@ -108,7 +108,7 @@ public: /// @brief Creates a view with the specified parent /// If the parent is null then a new window is created and the returned view will be the root view - virtual std::shared_ptr tests_createView(std::shared_ptr parent = {}) = 0; + virtual View *tests_createView(View *parent = nullptr) = 0; protected: /// @brief Implement any needed initializations before tests starting to run, if any diff --git a/src/qtquick/Platform_qtquick.h b/src/qtquick/Platform_qtquick.h index b202b17e..7fed5a5e 100644 --- a/src/qtquick/Platform_qtquick.h +++ b/src/qtquick/Platform_qtquick.h @@ -38,7 +38,7 @@ public: explicit Platform_qtquick(int argc, char *argv[]); void tests_initPlatform_impl() override; void tests_deinitPlatform_impl() override; - std::shared_ptr tests_createView(std::shared_ptr parent = {}) override; + View *tests_createView(View *parent = nullptr) override; static QQmlEngine *m_qmlEngine; #endif diff --git a/src/qtquick/TestHelpers_qtquick.cpp b/src/qtquick/TestHelpers_qtquick.cpp index c63e6805..d198f968 100644 --- a/src/qtquick/TestHelpers_qtquick.cpp +++ b/src/qtquick/TestHelpers_qtquick.cpp @@ -11,8 +11,8 @@ #include "KDDockWidgets.h" #include "Platform_qtquick.h" - #include "views/View_qtquick.h" + #include // TODO: Make it QGuiApplication #include #include @@ -22,6 +22,14 @@ using namespace KDDockWidgets; #ifdef DOCKS_DEVELOPER_MODE +namespace KDDockWidgets { +class TestView_qtquick : public Views::View_qtquick +{ +public: + using Views::View_qtquick::View_qtquick; +}; +} + Platform_qtquick::Platform_qtquick(int argc, char *argv[]) : Platform_qt(argc, argv) { @@ -43,13 +51,12 @@ void Platform_qtquick::tests_deinitPlatform_impl() Platform_qt::tests_deinitPlatform_impl(); } -std::shared_ptr Platform_qtquick::tests_createView(std::shared_ptr parent) +View *Platform_qtquick::tests_createView(View *parent) { - auto parentItem = parent ? Views::asQQuickItem(parent.get()) : nullptr; - auto newItem = new QQuickItem(parentItem); + auto parentItem = parent ? Views::asQQuickItem(parent) : nullptr; + auto newItem = new TestView_qtquick(nullptr, Type::None, parentItem); - auto wrapper = new Views::ViewWrapper_qtquick(newItem); - return std::shared_ptr(wrapper); + return newItem; } #endif diff --git a/src/qtquick/views/View_qtquick.cpp b/src/qtquick/views/View_qtquick.cpp index 9344d5cc..e6dd4b23 100644 --- a/src/qtquick/views/View_qtquick.cpp +++ b/src/qtquick/views/View_qtquick.cpp @@ -11,5 +11,17 @@ #include "View_qtquick.h" +#include using namespace KDDockWidgets::Views; + +View_qtquick::View_qtquick(KDDockWidgets::Controller *controller, Type type, + QQuickItem *parent, + Qt::WindowFlags) + : QQuickItem(parent) + , View(controller, type, this) +{ + qApp->installEventFilter(this); + + // setSize(800, 800); +} diff --git a/src/qtquick/views/old/QWidgetAdapter_quick.cpp b/src/qtquick/views/old/QWidgetAdapter_quick.cpp index 874987e8..92103f21 100644 --- a/src/qtquick/views/old/QWidgetAdapter_quick.cpp +++ b/src/qtquick/views/old/QWidgetAdapter_quick.cpp @@ -18,7 +18,7 @@ * @author Sérgio Martins \ */ -#include "QWidgetAdapter.h" + #include "MainWindow.h" #include "../DockRegistry_p.h" diff --git a/src/qtwidgets/Platform_qtwidgets.h b/src/qtwidgets/Platform_qtwidgets.h index 8fd6ac71..d92cb07c 100644 --- a/src/qtwidgets/Platform_qtwidgets.h +++ b/src/qtwidgets/Platform_qtwidgets.h @@ -38,7 +38,7 @@ public: explicit Platform_qtwidgets(int argc, char *argv[]); void tests_initPlatform_impl() override; void tests_deinitPlatform_impl() override; - std::shared_ptr tests_createView(std::shared_ptr parent = {}) override; + View *tests_createView(View *parent = nullptr) override; #endif protected: void init(); diff --git a/src/qtwidgets/TestHelpers_qtwidgets.cpp b/src/qtwidgets/TestHelpers_qtwidgets.cpp index 151d8b92..82e2d692 100644 --- a/src/qtwidgets/TestHelpers_qtwidgets.cpp +++ b/src/qtwidgets/TestHelpers_qtwidgets.cpp @@ -22,6 +22,15 @@ using namespace KDDockWidgets; #ifdef DOCKS_DEVELOPER_MODE +namespace KDDockWidgets { +class TestView_qtwidgets : public Views::View_qtwidgets +{ +public: + using Views::View_qtwidgets::View_qtwidgets; +}; +} + + Platform_qtwidgets::Platform_qtwidgets(int argc, char *argv[]) : Platform_qt(argc, argv) { @@ -41,14 +50,12 @@ void Platform_qtwidgets::tests_deinitPlatform_impl() Platform_qt::tests_deinitPlatform_impl(); } -std::shared_ptr Platform_qtwidgets::tests_createView(std::shared_ptr parent) +View *Platform_qtwidgets::tests_createView(View *parent) { - QWidget *parentWidget = Views::View_qtwidgets::asQWidget(parent.get()); + QWidget *parentWidget = Views::View_qtwidgets::asQWidget(parent); - auto newWidget = new QWidget(parentWidget); - auto wrapper = new Views::ViewWrapper_qtwidgets(newWidget); - - return std::shared_ptr(wrapper); + auto newWidget = new TestView_qtwidgets(nullptr, Type::None, parentWidget); + return newWidget; } #endif \ No newline at end of file diff --git a/src/qtwidgets/views/ViewWrapper_qtwidgets.cpp b/src/qtwidgets/views/ViewWrapper_qtwidgets.cpp index 675b756d..181f7c4b 100644 --- a/src/qtwidgets/views/ViewWrapper_qtwidgets.cpp +++ b/src/qtwidgets/views/ViewWrapper_qtwidgets.cpp @@ -93,6 +93,7 @@ static Controller *controllerForWidget(QWidget *widget) case Type::LayoutItem: case Type::DropIndicatorOverlayInterface: case Type::ViewWrapper: + case Type::None: // skip internal types continue; } @@ -227,6 +228,7 @@ bool ViewWrapper_qtwidgets::is(Type t) const case Type::MDIArea: return qobject_cast(m_widget); case Type::LayoutItem: + case Type::None: case Type::DropIndicatorOverlayInterface: qWarning() << Q_FUNC_INFO << "These are framework internals that are not wrapped"; return false; diff --git a/tests/tst_view.cpp b/tests/tst_view.cpp index 701c9529..72e3da4f 100644 --- a/tests/tst_view.cpp +++ b/tests/tst_view.cpp @@ -34,7 +34,7 @@ TEST_CASE("View::setParent()") CHECK(children[0]->equals(childView)); auto rootView2 = Platform::instance()->tests_createView(); - childView->setParent(rootView2.get()); + childView->setParent(rootView2); CHECK(childView->parentView()->equals(rootView2)); CHECK(rootView->childViews().isEmpty()); }