diff --git a/src/controllers/MainWindow.cpp b/src/controllers/MainWindow.cpp index a5175df9..d7c9082d 100644 --- a/src/controllers/MainWindow.cpp +++ b/src/controllers/MainWindow.cpp @@ -33,14 +33,8 @@ #include "controllers/DockWidget_p.h" #include "controllers/Frame.h" #include "controllers/SideBar.h" +#include "views/MainWindow.h" -// Or we can have a createDockWidget() in the factory -#ifdef KDDOCKWIDGETS_QTQUICK -#include "DockWidgetQuick.h" -#else -// TODO: Use framework factory instead -#include "views_qtwidgets/MainWindow_qtwidgets.h" -#endif using namespace KDDockWidgets; using namespace KDDockWidgets::Controllers; @@ -819,24 +813,24 @@ QWidgetOrQuick *MainWindow::persistentCentralWidget() const void MainWindow::setContentsMargins(int left, int top, int right, int bottom) { - auto v = qobject_cast(view()->asQWidget()); + auto v = dynamic_cast(view()); v->setContentsMargins(left, top, right, bottom); } QMargins MainWindow::centerWidgetMargins() const { - auto v = qobject_cast(view()->asQWidget()); + auto v = dynamic_cast(view()); return v->centerWidgetMargins(); } Controllers::SideBar *MainWindow::sideBar(SideBarLocation loc) const { - auto v = qobject_cast(view()->asQWidget()); + auto v = dynamic_cast(view()); return v->sideBar(loc); } QRect MainWindow::centralAreaGeometry() const { - auto v = qobject_cast(view()->asQWidget()); + auto v = dynamic_cast(view()); return v->centralAreaGeometry(); } diff --git a/src/views/MainWindow.h b/src/views/MainWindow.h new file mode 100644 index 00000000..9e038d84 --- /dev/null +++ b/src/views/MainWindow.h @@ -0,0 +1,39 @@ +/* + This file is part of KDDockWidgets. + + SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group company + Author: Sérgio Martins + + SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only + + Contact KDAB at for commercial licensing options. +*/ + +#pragma once + +#include "KDDockWidgets.h" + +class QMargins; +class QRect; + +namespace KDDockWidgets { + +namespace Controllers { +class SideBar; +} + +namespace Views { + +/// @brief The interface that MainWindow views should implement +class MainWindow +{ +public: + virtual QMargins centerWidgetMargins() const = 0; + virtual QRect centralAreaGeometry() const = 0; + virtual void setContentsMargins(int left, int top, int right, int bottom) = 0; + virtual Controllers::SideBar *sideBar(SideBarLocation loc) const = 0; +}; + +} + +} diff --git a/src/views_qtwidgets/MainWindow_qtwidgets.cpp b/src/views_qtwidgets/MainWindow_qtwidgets.cpp index de8ab39b..b76df984 100644 --- a/src/views_qtwidgets/MainWindow_qtwidgets.cpp +++ b/src/views_qtwidgets/MainWindow_qtwidgets.cpp @@ -186,3 +186,8 @@ Controllers::MainWindow *MainWindow_qtwidgets::mainWindow() const { return d->m_controller; } + +void MainWindow_qtwidgets::setContentsMargins(int left, int top, int right, int bottom) +{ + QMainWindow::setContentsMargins(left, top, right, bottom); +} diff --git a/src/views_qtwidgets/MainWindow_qtwidgets.h b/src/views_qtwidgets/MainWindow_qtwidgets.h index 4d250055..d36049e6 100644 --- a/src/views_qtwidgets/MainWindow_qtwidgets.h +++ b/src/views_qtwidgets/MainWindow_qtwidgets.h @@ -21,6 +21,7 @@ #include "View_qtwidgets.h" #include "controllers/MainWindow.h" +#include "views/MainWindow.h" #include @@ -37,7 +38,7 @@ namespace Views { * @brief The QMainwindow sub-class that the application should use to be able * to dock KDDockWidget::DockWidget instances. */ -class DOCKS_EXPORT MainWindow_qtwidgets : public View_qtwidgets +class DOCKS_EXPORT MainWindow_qtwidgets : public View_qtwidgets, public MainWindow { Q_OBJECT public: @@ -63,10 +64,10 @@ public: ~MainWindow_qtwidgets() override; ///@brief returns the sidebar for the specified location - Controllers::SideBar *sideBar(SideBarLocation) const; + Controllers::SideBar *sideBar(SideBarLocation) const override; //@brief returns the margins for the contents widget - QMargins centerWidgetMargins() const; + QMargins centerWidgetMargins() const override; //@brief sets the margins for the contents widgets void setCenterWidgetMargins(const QMargins &margins); @@ -74,12 +75,13 @@ public: /// @brief Returns the main window controller Controllers::MainWindow *mainWindow() const; + void setContentsMargins(int left, int top, int right, int bottom) override; void init() override; protected: void resizeEvent(QResizeEvent *) override; - QRect centralAreaGeometry() const; + QRect centralAreaGeometry() const override; private: friend class Controllers::MainWindow;