diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fd5e223b..bd8dee8a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -101,6 +101,8 @@ set(KDDW_BACKEND_SRCS views/ClassicIndicatorWindow.cpp views/MainWindowMDI.cpp views/MainWindowMDI.h + views/MainWindowViewInterface.cpp + views/MainWindowViewInterface.h qtcommon/Platform_qt.cpp qtcommon/Platform_qt.h qtcommon/Window_qt.cpp diff --git a/src/KDDockWidgets.cpp b/src/KDDockWidgets.cpp index 435d309e..0c920387 100644 --- a/src/KDDockWidgets.cpp +++ b/src/KDDockWidgets.cpp @@ -16,7 +16,6 @@ #include "kddockwidgets/views/Frame.h" #include "kddockwidgets/views/TabBar.h" #include "kddockwidgets/views/TitleBar.h" -#include "kddockwidgets/views/MainWindow.h" #include "kddockwidgets/views/Stack.h" #include "kddockwidgets/views/Frame.h" @@ -55,6 +54,6 @@ SideBar::~SideBar() = default; Stack::~Stack() = default; TabBar::~TabBar() = default; TitleBar::~TitleBar() = default; -MainWindow::~MainWindow() = default; + Frame::~Frame() = default; } diff --git a/src/controllers/MainWindow.cpp b/src/controllers/MainWindow.cpp index 07c4774a..c6d3c7ad 100644 --- a/src/controllers/MainWindow.cpp +++ b/src/controllers/MainWindow.cpp @@ -32,7 +32,7 @@ #include "controllers/DockWidget_p.h" #include "controllers/Frame.h" #include "controllers/SideBar.h" -#include "kddockwidgets/views/MainWindow.h" +#include "kddockwidgets/views/MainWindowViewInterface.h" using namespace KDDockWidgets; @@ -798,24 +798,24 @@ std::shared_ptr MainWindow::persistentCentralWidget() const void MainWindow::setContentsMargins(int left, int top, int right, int bottom) { - auto v = dynamic_cast(view()); + auto v = dynamic_cast(view()); v->setContentsMargins(left, top, right, bottom); } QMargins MainWindow::centerWidgetMargins() const { - auto v = dynamic_cast(view()); + auto v = dynamic_cast(view()); return v->centerWidgetMargins(); } Controllers::SideBar *MainWindow::sideBar(SideBarLocation loc) const { - auto v = dynamic_cast(view()); + auto v = dynamic_cast(view()); return v->sideBar(loc); } QRect MainWindow::centralAreaGeometry() const { - auto v = dynamic_cast(view()); + auto v = dynamic_cast(view()); return v->centralAreaGeometry(); } diff --git a/src/controllers/MainWindow.h b/src/controllers/MainWindow.h index 92aab653..62961295 100644 --- a/src/controllers/MainWindow.h +++ b/src/controllers/MainWindow.h @@ -222,8 +222,6 @@ public: void setContentsMargins(int, int, int, int); - void onResized(QResizeEvent *); - protected: void setUniqueName(const QString &uniqueName); QMargins centerWidgetMargins() const; diff --git a/src/fwd_headers/kddockwidgets/views/MainWindow.h b/src/fwd_headers/kddockwidgets/views/MainWindowViewInterface.h similarity index 86% rename from src/fwd_headers/kddockwidgets/views/MainWindow.h rename to src/fwd_headers/kddockwidgets/views/MainWindowViewInterface.h index a0d14b47..957d7a20 100644 --- a/src/fwd_headers/kddockwidgets/views/MainWindow.h +++ b/src/fwd_headers/kddockwidgets/views/MainWindowViewInterface.h @@ -9,4 +9,4 @@ Contact KDAB at for commercial licensing options. */ -#include "../../../views/MainWindow.h" +#include "../../../views/MainWindowViewInterface.h" diff --git a/src/qtquick/views/MainWindow_qtquick.cpp b/src/qtquick/views/MainWindow_qtquick.cpp index 185cf2fd..1ec2c212 100644 --- a/src/qtquick/views/MainWindow_qtquick.cpp +++ b/src/qtquick/views/MainWindow_qtquick.cpp @@ -22,12 +22,12 @@ MainWindow_qtquick::MainWindow_qtquick(const QString &uniqueName, MainWindowOpti QQuickItem *parent, Qt::WindowFlags flags) : View_qtquick(new Controllers::MainWindow(this, uniqueName, options), Type::MainWindow, parent, flags) - , m_controller(static_cast(controller())) + , MainWindowViewInterface(static_cast(View::controller())) { - m_controller->init(uniqueName); + m_mainWindow->init(uniqueName); makeItemFillParent(this); - Controllers::Layout *lw = m_controller->layout(); + Controllers::Layout *lw = m_mainWindow->layout(); auto layoutView = asView_qtquick(lw->view()); makeItemFillParent(layoutView); @@ -51,12 +51,12 @@ MainWindow_qtquick::~MainWindow_qtquick() QSize MainWindow_qtquick::minSize() const { - return m_controller->layout()->layoutMinimumSize(); + return m_mainWindow->layout()->layoutMinimumSize(); } QSize MainWindow_qtquick::maximumSize() const { - return m_controller->layout()->layoutMaximumSizeHint(); + return m_mainWindow->layout()->layoutMaximumSizeHint(); } Controllers::SideBar *MainWindow_qtquick::sideBar(SideBarLocation) const @@ -97,8 +97,3 @@ void MainWindow_qtquick::setContentsMargins(int left, int top, int right, int bo Q_UNUSED(bottom); qDebug() << Q_FUNC_INFO << "not implemented"; } - -Controllers::MainWindow *MainWindow_qtquick::mainWindow() const -{ - return m_controller; -} diff --git a/src/qtquick/views/MainWindow_qtquick.h b/src/qtquick/views/MainWindow_qtquick.h index ceda95f6..a0250c83 100644 --- a/src/qtquick/views/MainWindow_qtquick.h +++ b/src/qtquick/views/MainWindow_qtquick.h @@ -13,7 +13,7 @@ #define KD_MAIN_WINDOW_QUICK_P_H #include "View_qtquick.h" -#include "kddockwidgets/views/MainWindow.h" +#include "kddockwidgets/views/MainWindowViewInterface.h" namespace KDDockWidgets { @@ -28,7 +28,7 @@ namespace Views { /// Provides the ability of acepting drops of dock widgets. /// It's not a real QWindow and not a main window in the sense of QMainWindow. Would be overkill /// to have tool bars, menu bar and footer in the QtQuick implementation. That's left for the user to do. -class DOCKS_EXPORT MainWindow_qtquick : public Views::View_qtquick, public MainWindow +class DOCKS_EXPORT MainWindow_qtquick : public Views::View_qtquick, public MainWindowViewInterface { Q_OBJECT public: @@ -44,9 +44,6 @@ public: /// @reimp QSize maximumSize() const override; - /// TODOm3 move into interface - Controllers::MainWindow *mainWindow() const; - protected: Controllers::SideBar *sideBar(SideBarLocation) const override; QMargins centerWidgetMargins() const override; @@ -55,7 +52,6 @@ protected: private: void onMultiSplitterGeometryUpdated(); - Controllers::MainWindow *const m_controller; }; } } diff --git a/src/qtwidgets/views/MainWindow_qtwidgets.cpp b/src/qtwidgets/views/MainWindow_qtwidgets.cpp index cae2ae5e..22e46335 100644 --- a/src/qtwidgets/views/MainWindow_qtwidgets.cpp +++ b/src/qtwidgets/views/MainWindow_qtwidgets.cpp @@ -55,9 +55,9 @@ public: class MainWindow_qtwidgets::Private { public: - explicit Private(Controllers::MainWindow *controller, MainWindow_qtwidgets *qq) + explicit Private(MainWindow_qtwidgets *qq) : q(qq) - , m_controller(controller) + , m_controller(qq->mainWindow()) , m_supportsAutoHide(Config::self().flags() & Config::Flag_AutoHideSupport) , m_centralWidget(new MyCentralWidget(qq)) , m_layout(new QHBoxLayout(m_centralWidget)) // 1 level of indirection so we can add some margins @@ -127,7 +127,8 @@ MyCentralWidget::~MyCentralWidget() MainWindow_qtwidgets::MainWindow_qtwidgets(Controllers::MainWindow *controller, QWidget *parent, Qt::WindowFlags flags) : View_qtwidgets(controller, Type::MainWindow, parent, flags) - , d(new Private(controller, this)) + , MainWindowViewInterface(controller) + , d(new Private(this)) { } @@ -137,7 +138,8 @@ MainWindow_qtwidgets::MainWindow_qtwidgets(const QString &uniqueName, Qt::WindowFlags flags) : View_qtwidgets(new Controllers::MainWindow(this, uniqueName, options), Type::MainWindow, parent, flags) - , d(new Private(static_cast(controller()), this)) + , MainWindowViewInterface(static_cast(controller())) + , d(new Private(this)) { auto controller = mainWindow(); controller->init(uniqueName); @@ -182,11 +184,6 @@ QRect MainWindow_qtwidgets::centralAreaGeometry() const return centralWidget()->geometry(); } -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/qtwidgets/views/MainWindow_qtwidgets.h b/src/qtwidgets/views/MainWindow_qtwidgets.h index 28f0770e..4497cf35 100644 --- a/src/qtwidgets/views/MainWindow_qtwidgets.h +++ b/src/qtwidgets/views/MainWindow_qtwidgets.h @@ -20,7 +20,7 @@ #define KD_MAINWINDOW_H #include "View_qtwidgets.h" -#include "kddockwidgets/views/MainWindow.h" +#include "kddockwidgets/views/MainWindowViewInterface.h" #include @@ -37,7 +37,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, public MainWindow +class DOCKS_EXPORT MainWindow_qtwidgets : public View_qtwidgets, public MainWindowViewInterface { Q_OBJECT public: @@ -71,9 +71,6 @@ public: //@brief sets the margins for the contents widgets void setCenterWidgetMargins(const QMargins &margins); - /// @brief Returns the main window controller - Controllers::MainWindow *mainWindow() const; - void setContentsMargins(int left, int top, int right, int bottom) override; void init() override; diff --git a/src/views/MainWindowViewInterface.cpp b/src/views/MainWindowViewInterface.cpp new file mode 100644 index 00000000..575f9c7d --- /dev/null +++ b/src/views/MainWindowViewInterface.cpp @@ -0,0 +1,28 @@ +/* + 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. +*/ + +#include "MainWindowViewInterface.h" + +namespace KDDockWidgets::Views { + +MainWindowViewInterface::MainWindowViewInterface(Controllers::MainWindow *controller) + : m_mainWindow(controller) +{ +} + +MainWindowViewInterface::~MainWindowViewInterface() = default; + +Controllers::MainWindow *MainWindowViewInterface::mainWindow() const +{ + return m_mainWindow; +} + +} \ No newline at end of file diff --git a/src/views/MainWindow.h b/src/views/MainWindowViewInterface.h similarity index 73% rename from src/views/MainWindow.h rename to src/views/MainWindowViewInterface.h index fff1293c..8d2994f7 100644 --- a/src/views/MainWindow.h +++ b/src/views/MainWindowViewInterface.h @@ -21,19 +21,27 @@ namespace KDDockWidgets { namespace Controllers { class SideBar; +class MainWindow; } namespace Views { /// @brief The interface that MainWindow views should implement -class DOCKS_EXPORT MainWindow +class DOCKS_EXPORT MainWindowViewInterface { public: - virtual ~MainWindow(); + explicit MainWindowViewInterface(Controllers::MainWindow *); + virtual ~MainWindowViewInterface(); 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; + + /// @brief Returns the main window controller + Controllers::MainWindow *mainWindow() const; + +protected: + Controllers::MainWindow *const m_mainWindow; }; }