From d5ac23a8d26057a143e56a442bb4e090cc7a3bdf Mon Sep 17 00:00:00 2001 From: Sergio Martins Date: Sun, 15 May 2022 22:14:51 +0100 Subject: [PATCH] qtquick: Implement DefaultWidgetFactory_qtquick Requires implementing some pure-virtuals in the views too --- .../FrameworkWidgetFactory_qtquick.cpp | 67 ++++++++++--------- src/qtquick/views/FloatingWindow_qtquick.cpp | 5 +- src/qtquick/views/FloatingWindow_qtquick.h | 3 +- src/qtquick/views/Frame_qtquick.cpp | 6 ++ src/qtquick/views/Frame_qtquick.h | 2 + src/qtquick/views/MainWindow_qtquick.cpp | 14 ++++ src/qtquick/views/MainWindow_qtquick.h | 2 + src/qtquick/views/Stack_qtquick.cpp | 5 ++ src/qtquick/views/Stack_qtquick.h | 1 + src/qtquick/views/TabBar_qtquick.cpp | 11 +++ src/qtquick/views/TabBar_qtquick.h | 2 + src/qtquick/views/TitleBar_qtquick.cpp | 5 ++ src/qtquick/views/TitleBar_qtquick.h | 1 + 13 files changed, 88 insertions(+), 36 deletions(-) diff --git a/src/qtquick/FrameworkWidgetFactory_qtquick.cpp b/src/qtquick/FrameworkWidgetFactory_qtquick.cpp index d8d86d97..e305d1f5 100644 --- a/src/qtquick/FrameworkWidgetFactory_qtquick.cpp +++ b/src/qtquick/FrameworkWidgetFactory_qtquick.cpp @@ -15,24 +15,25 @@ #include "private/indicators/ClassicIndicators_p.h" #include "private/indicators/NullIndicators_p.h" #include "private/Utils_p.h" +#include "private/indicators/SegmentedIndicators_p.h" +#include "controllers/MainWindow.h" #include "controllers/TabBar.h" #include "controllers/Stack.h" #include "controllers/FloatingWindow.h" -#include "private/indicators/SegmentedIndicators_p.h" - -// #include "qtquick/views/FloatingWindow_qtquick.h" +#include "qtquick/views/FloatingWindow_qtquick.h" #include "qtquick/views/DockWidget_qtquick.h" #include "qtquick/views/DropArea_qtquick.h" #include "qtquick/views/Frame_qtquick.h" #include "qtquick/views/View_qtquick.h" +#include "qtquick/views/RubberBand_qtquick.h" #include "qtquick/views/Separator_qtquick.h" #include "qtquick/views/TitleBar_qtquick.h" #include "qtquick/views/TabBar_qtquick.h" // #include "qtquick/views/SideBar_qtquick.h" #include "qtquick/views/Stack_qtquick.h" -// #include "qtquick/views/MainWindow_qtquick.h" +#include "qtquick/views/MainWindow_qtquick.h" #include "qtquick/views/MDILayout_qtquick.h" @@ -46,48 +47,48 @@ DefaultWidgetFactory_qtquick::~DefaultWidgetFactory_qtquick() { } -View *DefaultWidgetFactory_qtquick::createMainWindow(Controllers::MainWindow *, View *, Qt::WindowFlags) const +View *DefaultWidgetFactory_qtquick::createMainWindow(Controllers::MainWindow *mainWindow, + View *parent, Qt::WindowFlags flags) const { + Q_UNUSED(mainWindow); + Q_UNUSED(parent); + Q_UNUSED(flags); + return {}; - // return new Views::MainWindow_qtquick(mainWindow, parent ? static_cast *>(parent) : nullptr, flags); + // return new Views::MainWindow_qtquick(mainWindow, Views::asQQuickItem(parent), flags); } -View *DefaultWidgetFactory_qtquick::createDockWidget(Controllers::DockWidget *, Qt::WindowFlags) const +View *DefaultWidgetFactory_qtquick::createDockWidget(Controllers::DockWidget *dw, Qt::WindowFlags flags) const { - return {}; - // return new Views::DockWidget_qtquick(dw, flags); + return new Views::DockWidget_qtquick(dw, flags); } -View *DefaultWidgetFactory_qtquick::createFrame(Controllers::Frame *, View *, +View *DefaultWidgetFactory_qtquick::createFrame(Controllers::Frame *controller, View *parent, FrameOptions) const { - // TODOv2: Remove options - return {}; - // return new Views::Frame_qtquick(controller, Views::View_qtwidgets::asQWidget(parent)); + return new Views::Frame_qtquick(controller, Views::asQQuickItem(parent)); } -View *DefaultWidgetFactory_qtquick::createTitleBar(Controllers::TitleBar *, Controllers::Frame *) const +View *DefaultWidgetFactory_qtquick::createTitleBar(Controllers::TitleBar *titleBar, + Controllers::Frame *parent) const { - return {}; - // return new Views::TitleBar_qtquick(titleBar, Views::View_qtwidgets::asQWidget(frame)); + return new Views::TitleBar_qtquick(titleBar, Views::asQQuickItem(parent)); } -View *DefaultWidgetFactory_qtquick::createTitleBar(Controllers::TitleBar *, Controllers::FloatingWindow *) const +View *DefaultWidgetFactory_qtquick::createTitleBar(Controllers::TitleBar *titleBar, + Controllers::FloatingWindow *fw) const { - return {}; - // return new Views::TitleBar_qtquick(titleBar, Views::View_qtwidgets::asQWidget(fw)); + return new Views::TitleBar_qtquick(titleBar, Views::asQQuickItem(fw)); } -View *DefaultWidgetFactory_qtquick::createTabBar(Controllers::TabBar *, View *) const +View *DefaultWidgetFactory_qtquick::createTabBar(Controllers::TabBar *controller, View *parent) const { - return {}; - // return new Views::TabBar_qtquick(tabBar, Views::View_qtwidgets::asQWidget(parent)); + return new Views::TabBar_qtquick(controller, Views::asQQuickItem(parent)); } -View *DefaultWidgetFactory_qtquick::createTabWidget(Controllers::Stack *, Controllers::Frame *) const +View *DefaultWidgetFactory_qtquick::createTabWidget(Controllers::Stack *controller, Controllers::Frame *parent) const { - return {}; - // return new Views::Stack_qtquick(controller, parent); + return new Views::Stack_qtquick(controller, parent); } View *DefaultWidgetFactory_qtquick::createSeparator(Controllers::Separator *controller, View *parent) const @@ -95,12 +96,13 @@ View *DefaultWidgetFactory_qtquick::createSeparator(Controllers::Separator *cont return new Views::Separator_qtquick(controller, parent ? static_cast(parent) : nullptr); } -View *DefaultWidgetFactory_qtquick::createFloatingWindow(Controllers::FloatingWindow *, - Controllers::MainWindow *, Qt::WindowFlags) const +View *DefaultWidgetFactory_qtquick::createFloatingWindow(Controllers::FloatingWindow *controller, + Controllers::MainWindow *parent, Qt::WindowFlags flags) const { - return {}; - // auto mainwindow = qobject_cast(Views::View_qtwidgets::asQWidget(parent)); - // return new Views::FloatingWindow_qtquick(controller, mainwindow, windowFlags); + + auto mainwindow = parent ? qobject_cast(Views::asQQuickItem(parent->view())) + : nullptr; + return new Views::FloatingWindow_qtquick(controller, mainwindow, flags); } DropIndicatorOverlayInterface *DefaultWidgetFactory_qtquick::createDropIndicatorOverlay(Controllers::DropArea *dropArea) const @@ -122,10 +124,9 @@ DropIndicatorOverlayInterface *DefaultWidgetFactory_qtquick::createDropIndicator return new ClassicIndicators(dropArea); } -View *DefaultWidgetFactory_qtquick::createRubberBand(View *) const +View *DefaultWidgetFactory_qtquick::createRubberBand(View *parent) const { - return {}; - // return new QRubberBand(QRubberBand::Rectangle, parent ? qobject_cast(parent->asQObject()) : nullptr); + return new Views::RubberBand_qtquick(Views::asQQuickItem(parent)); } View *DefaultWidgetFactory_qtquick::createSideBar(Controllers::SideBar *, diff --git a/src/qtquick/views/FloatingWindow_qtquick.cpp b/src/qtquick/views/FloatingWindow_qtquick.cpp index 0bcce038..5cc360c9 100644 --- a/src/qtquick/views/FloatingWindow_qtquick.cpp +++ b/src/qtquick/views/FloatingWindow_qtquick.cpp @@ -111,8 +111,9 @@ QuickView::~QuickView() = default; } -FloatingWindow_qtquick::FloatingWindow_qtquick(Controllers::FloatingWindow *controller, Views::MainWindow_qtquick *parent) - : Views::View_qtquick(controller, Type::FloatingWindow, parent) +FloatingWindow_qtquick::FloatingWindow_qtquick(Controllers::FloatingWindow *controller, + Views::MainWindow_qtquick *parent, Qt::WindowFlags flags) + : Views::View_qtquick(controller, Type::FloatingWindow, parent, flags) , m_quickWindow(new QuickView(plat()->qmlEngine(), this)) , m_controller(controller) { diff --git a/src/qtquick/views/FloatingWindow_qtquick.h b/src/qtquick/views/FloatingWindow_qtquick.h index c2fd6c15..bb941cb4 100644 --- a/src/qtquick/views/FloatingWindow_qtquick.h +++ b/src/qtquick/views/FloatingWindow_qtquick.h @@ -30,7 +30,8 @@ class DOCKS_EXPORT FloatingWindow_qtquick : public Views::View_qtquick { Q_OBJECT public: - explicit FloatingWindow_qtquick(Controllers::FloatingWindow *controller, Views::MainWindow_qtquick *parent = nullptr); + explicit FloatingWindow_qtquick(Controllers::FloatingWindow *controller, + Views::MainWindow_qtquick *parent = nullptr, Qt::WindowFlags flags = {}); ~FloatingWindow_qtquick(); QSize minSize() const override; diff --git a/src/qtquick/views/Frame_qtquick.cpp b/src/qtquick/views/Frame_qtquick.cpp index 6ae42ae0..60b4e811 100644 --- a/src/qtquick/views/Frame_qtquick.cpp +++ b/src/qtquick/views/Frame_qtquick.cpp @@ -217,3 +217,9 @@ Stack_qtquick *Frame_qtquick::stackView() const return nullptr; } + +QRect Frame_qtquick::dragRect() const +{ + qFatal("Not implemented"); + return {}; +} diff --git a/src/qtquick/views/Frame_qtquick.h b/src/qtquick/views/Frame_qtquick.h index 3c3fab5a..4f639b5e 100644 --- a/src/qtquick/views/Frame_qtquick.h +++ b/src/qtquick/views/Frame_qtquick.h @@ -51,6 +51,8 @@ public: /// @brief Returns the QQuickItem which represents this frame on the screen QQuickItem *visualItem() const; + QRect dragRect() const override; + protected: void removeWidget_impl(Controllers::DockWidget *) override; int indexOfDockWidget_impl(const Controllers::DockWidget *) override; diff --git a/src/qtquick/views/MainWindow_qtquick.cpp b/src/qtquick/views/MainWindow_qtquick.cpp index 513fbefe..b83f31ec 100644 --- a/src/qtquick/views/MainWindow_qtquick.cpp +++ b/src/qtquick/views/MainWindow_qtquick.cpp @@ -81,3 +81,17 @@ void MainWindow_qtquick::onMultiSplitterGeometryUpdated() } } } + +QRect MainWindow_qtquick::centralAreaGeometry() const +{ + qFatal("Not implemented"); +} + +void MainWindow_qtquick::setContentsMargins(int left, int top, int right, int bottom) +{ + Q_UNUSED(left); + Q_UNUSED(right); + Q_UNUSED(top); + Q_UNUSED(bottom); + qFatal("Not implemented"); +} diff --git a/src/qtquick/views/MainWindow_qtquick.h b/src/qtquick/views/MainWindow_qtquick.h index ed96b39a..1f2d9237 100644 --- a/src/qtquick/views/MainWindow_qtquick.h +++ b/src/qtquick/views/MainWindow_qtquick.h @@ -47,6 +47,8 @@ public: protected: Controllers::SideBar *sideBar(SideBarLocation) const override; QMargins centerWidgetMargins() const override; + QRect centralAreaGeometry() const override; + void setContentsMargins(int left, int top, int right, int bottom) override; private: void onMultiSplitterGeometryUpdated(); diff --git a/src/qtquick/views/Stack_qtquick.cpp b/src/qtquick/views/Stack_qtquick.cpp index 11771e71..63f17dfa 100644 --- a/src/qtquick/views/Stack_qtquick.cpp +++ b/src/qtquick/views/Stack_qtquick.cpp @@ -44,6 +44,11 @@ Stack_qtquick::Stack_qtquick(Controllers::Stack *controller, // return m_tabBar; // } +void Stack_qtquick::setDocumentMode(bool) +{ + qDebug() << "Not implemented"; +} + int Stack_qtquick::numDockWidgets() const { return m_dockWidgetModel->count(); diff --git a/src/qtquick/views/Stack_qtquick.h b/src/qtquick/views/Stack_qtquick.h index d1d6f6a7..af5d464c 100644 --- a/src/qtquick/views/Stack_qtquick.h +++ b/src/qtquick/views/Stack_qtquick.h @@ -59,6 +59,7 @@ public: int currentIndex() const override; bool insertDockWidget(int index, Controllers::DockWidget *, const QIcon &, const QString &title) override; Q_INVOKABLE void setCurrentDockWidget(int index) override; + void setDocumentMode(bool) override; Controllers::DockWidget *currentDockWidget() const; /// @brief Returns the tab bar as a QObject for QML. diff --git a/src/qtquick/views/TabBar_qtquick.cpp b/src/qtquick/views/TabBar_qtquick.cpp index e7fd8c95..4bfd9c19 100644 --- a/src/qtquick/views/TabBar_qtquick.cpp +++ b/src/qtquick/views/TabBar_qtquick.cpp @@ -139,3 +139,14 @@ void TabBar_qtquick::moveTabTo(int from, int to) Q_UNUSED(to); // Not implemented yet } + +Controllers::DockWidget *TabBar_qtquick::currentDockWidget() const +{ + return nullptr; +} + +bool TabBar_qtquick::tabsAreMovable() const +{ + qFatal("Not implemented"); + return false; +} diff --git a/src/qtquick/views/TabBar_qtquick.h b/src/qtquick/views/TabBar_qtquick.h index b5958e13..9b9155be 100644 --- a/src/qtquick/views/TabBar_qtquick.h +++ b/src/qtquick/views/TabBar_qtquick.h @@ -52,6 +52,8 @@ public: QRect rectForTab(int index) const override; void moveTabTo(int from, int to) override; + Controllers::DockWidget *currentDockWidget() const override; + bool tabsAreMovable() const override; Q_SIGNALS: void tabBarQmlItemChanged(); diff --git a/src/qtquick/views/TitleBar_qtquick.cpp b/src/qtquick/views/TitleBar_qtquick.cpp index 5c718592..62008701 100644 --- a/src/qtquick/views/TitleBar_qtquick.cpp +++ b/src/qtquick/views/TitleBar_qtquick.cpp @@ -95,3 +95,8 @@ QQuickItem *TitleBar_qtquick::closeButton() const return m_titleBarQmlItem ? m_titleBarQmlItem->property("closeButton").value() : nullptr; } + +void TitleBar_qtquick::updateMaximizeButton() +{ + qFatal("Not implemented"); +} diff --git a/src/qtquick/views/TitleBar_qtquick.h b/src/qtquick/views/TitleBar_qtquick.h index 27a34034..9d665675 100644 --- a/src/qtquick/views/TitleBar_qtquick.h +++ b/src/qtquick/views/TitleBar_qtquick.h @@ -43,6 +43,7 @@ protected: QQuickItem *titleBarQmlItem() const; QQuickItem *titleBarMouseArea() const; void setTitleBarQmlItem(QQuickItem *); + void updateMaximizeButton() override; Q_SIGNALS: void titleBarQmlItemChanged();