From 0825a6bdc2ad3ff292d679e1e2feda2ef7b633dd Mon Sep 17 00:00:00 2001 From: Sergio Martins Date: Wed, 15 Jun 2022 15:49:07 +0100 Subject: [PATCH] Move sidebars into MainWindow controller No reason to have them duplicated between qtwidgets and qtquick --- src/controllers/MainWindow.cpp | 17 +++++++++++++++-- src/controllers/MainWindow.h | 4 +++- src/qtquick/views/MainWindow_qtquick.cpp | 5 ----- src/qtquick/views/MainWindow_qtquick.h | 1 - src/qtwidgets/views/MainWindow_qtwidgets.cpp | 20 ++++---------------- src/qtwidgets/views/MainWindow_qtwidgets.h | 3 --- src/views/MainWindowViewInterface.h | 1 - 7 files changed, 22 insertions(+), 29 deletions(-) diff --git a/src/controllers/MainWindow.cpp b/src/controllers/MainWindow.cpp index c6d3c7ad..4443c6eb 100644 --- a/src/controllers/MainWindow.cpp +++ b/src/controllers/MainWindow.cpp @@ -52,9 +52,20 @@ public: explicit Private(MainWindow *mainWindow, const QString &, MainWindowOptions options) : m_options(options) , q(mainWindow) + , m_supportsAutoHide(Config::self().flags() & Config::Flag_AutoHideSupport) { } + void init() + { + if (m_supportsAutoHide) { + for (auto location : { SideBarLocation::North, SideBarLocation::East, + SideBarLocation::West, SideBarLocation::South }) { + m_sideBars.insert(location, new Controllers::SideBar(location, q)); + } + } + } + bool supportsCentralFrame() const { return m_options & MainWindowOption_HasCentralFrame; @@ -111,9 +122,11 @@ public: const MainWindowOptions m_options; MainWindow *const q; QPointer m_overlayedDockWidget; + QHash m_sideBars; Layout *m_layout = nullptr; Controllers::DockWidget *m_persistentCentralDockWidget = nullptr; KDBindings::ScopedConnection m_visibleWidgetCountConnection; + const bool m_supportsAutoHide; }; MainWindow::MainWindow(View *view, const QString &uniqueName, MainWindowOptions options) @@ -124,6 +137,7 @@ MainWindow::MainWindow(View *view, const QString &uniqueName, MainWindowOptions void MainWindow::init(const QString &name) { + d->init(); d->m_layout = createLayoutWidget(this, d->m_options); d->m_persistentCentralDockWidget = d->createPersistentCentralDockWidget(d->name); @@ -810,8 +824,7 @@ QMargins MainWindow::centerWidgetMargins() const Controllers::SideBar *MainWindow::sideBar(SideBarLocation loc) const { - auto v = dynamic_cast(view()); - return v->sideBar(loc); + return d->m_sideBars.value(loc); } QRect MainWindow::centralAreaGeometry() const diff --git a/src/controllers/MainWindow.h b/src/controllers/MainWindow.h index 62961295..6b424597 100644 --- a/src/controllers/MainWindow.h +++ b/src/controllers/MainWindow.h @@ -222,10 +222,12 @@ public: void setContentsMargins(int, int, int, int); + /// @brief Returns the side bar at the specified location + Controllers::SideBar *sideBar(SideBarLocation) const; + protected: void setUniqueName(const QString &uniqueName); QMargins centerWidgetMargins() const; - Controllers::SideBar *sideBar(SideBarLocation) const; QRect centralAreaGeometry() const; Q_SIGNALS: diff --git a/src/qtquick/views/MainWindow_qtquick.cpp b/src/qtquick/views/MainWindow_qtquick.cpp index 0876ab07..bf5319ab 100644 --- a/src/qtquick/views/MainWindow_qtquick.cpp +++ b/src/qtquick/views/MainWindow_qtquick.cpp @@ -89,11 +89,6 @@ QSize MainWindow_qtquick::maximumSize() const return m_mainWindow->layout()->layoutMaximumSizeHint(); } -Controllers::SideBar *MainWindow_qtquick::sideBar(SideBarLocation) const -{ - return nullptr; -} - QMargins MainWindow_qtquick::centerWidgetMargins() const { qDebug() << Q_FUNC_INFO << "SideBar hasn't been implemented yet"; diff --git a/src/qtquick/views/MainWindow_qtquick.h b/src/qtquick/views/MainWindow_qtquick.h index 99c64480..fb332567 100644 --- a/src/qtquick/views/MainWindow_qtquick.h +++ b/src/qtquick/views/MainWindow_qtquick.h @@ -48,7 +48,6 @@ public: QSize maximumSize() const override; 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; diff --git a/src/qtwidgets/views/MainWindow_qtwidgets.cpp b/src/qtwidgets/views/MainWindow_qtwidgets.cpp index aa472641..fd10ba25 100644 --- a/src/qtwidgets/views/MainWindow_qtwidgets.cpp +++ b/src/qtwidgets/views/MainWindow_qtwidgets.cpp @@ -71,26 +71,20 @@ public: void init() { - if (m_supportsAutoHide) { - for (auto location : { SideBarLocation::North, SideBarLocation::East, - SideBarLocation::West, SideBarLocation::South }) { - m_sideBars.insert(location, new Controllers::SideBar(location, m_controller)); - } - } m_layout->setSpacing(0); updateMargins(); if (m_supportsAutoHide) { - m_layout->addWidget(View_qtwidgets::asQWidget(q->sideBar(SideBarLocation::West)->view())); + m_layout->addWidget(View_qtwidgets::asQWidget(m_controller->sideBar(SideBarLocation::West)->view())); auto innerVLayout = new QVBoxLayout(); innerVLayout->setSpacing(0); innerVLayout->setContentsMargins(0, 0, 0, 0); - innerVLayout->addWidget(View_qtwidgets::asQWidget(q->sideBar(SideBarLocation::North))); + innerVLayout->addWidget(View_qtwidgets::asQWidget(m_controller->sideBar(SideBarLocation::North))); innerVLayout->addWidget(View_qtwidgets::asQWidget(m_controller->layout())); - innerVLayout->addWidget(View_qtwidgets::asQWidget(q->sideBar(SideBarLocation::South))); + innerVLayout->addWidget(View_qtwidgets::asQWidget(m_controller->sideBar(SideBarLocation::South))); m_layout->addLayout(innerVLayout); - m_layout->addWidget(View_qtwidgets::asQWidget(q->sideBar(SideBarLocation::East))); + m_layout->addWidget(View_qtwidgets::asQWidget(m_controller->sideBar(SideBarLocation::East))); } else { m_layout->addWidget(qobject_cast(m_controller->layout()->view()->asQObject())); } @@ -113,7 +107,6 @@ public: MainWindow_qtwidgets *const q; Controllers::MainWindow *const m_controller; const bool m_supportsAutoHide; - QHash m_sideBars; // TODOm3: Move to controller MyCentralWidget *const m_centralWidget; QHBoxLayout *const m_layout; KDBindings::ConnectionHandle m_connection; @@ -153,11 +146,6 @@ void MainWindow_qtwidgets::setCentralWidget(QWidget *w) QMainWindow::setCentralWidget(w); } -Controllers::SideBar *MainWindow_qtwidgets::sideBar(SideBarLocation location) const -{ - return d->m_sideBars.value(location); -} - QMargins MainWindow_qtwidgets::centerWidgetMargins() const { return d->m_centerWidgetMargins; diff --git a/src/qtwidgets/views/MainWindow_qtwidgets.h b/src/qtwidgets/views/MainWindow_qtwidgets.h index 5720ce52..dccb12e3 100644 --- a/src/qtwidgets/views/MainWindow_qtwidgets.h +++ b/src/qtwidgets/views/MainWindow_qtwidgets.h @@ -58,9 +58,6 @@ public: /// @brief Destructor ~MainWindow_qtwidgets() override; - /// @brief returns the sidebar for the specified location - Controllers::SideBar *sideBar(SideBarLocation) const override; - /// @brief returns the margins for the contents widget QMargins centerWidgetMargins() const override; diff --git a/src/views/MainWindowViewInterface.h b/src/views/MainWindowViewInterface.h index 8d2994f7..92b05048 100644 --- a/src/views/MainWindowViewInterface.h +++ b/src/views/MainWindowViewInterface.h @@ -35,7 +35,6 @@ 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; /// @brief Returns the main window controller Controllers::MainWindow *mainWindow() const;