Move some common view code into MainWindowViewInterface

So that it's not duplicated between QtWidgets and QtQuick
This commit is contained in:
Sergio Martins
2022-06-15 12:29:14 +01:00
parent e1fe8054d0
commit 0c95550af6
11 changed files with 62 additions and 42 deletions

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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<ViewWrapper> MainWindow::persistentCentralWidget() const
void MainWindow::setContentsMargins(int left, int top, int right, int bottom)
{
auto v = dynamic_cast<Views::MainWindow *>(view());
auto v = dynamic_cast<Views::MainWindowViewInterface *>(view());
v->setContentsMargins(left, top, right, bottom);
}
QMargins MainWindow::centerWidgetMargins() const
{
auto v = dynamic_cast<Views::MainWindow *>(view());
auto v = dynamic_cast<Views::MainWindowViewInterface *>(view());
return v->centerWidgetMargins();
}
Controllers::SideBar *MainWindow::sideBar(SideBarLocation loc) const
{
auto v = dynamic_cast<Views::MainWindow *>(view());
auto v = dynamic_cast<Views::MainWindowViewInterface *>(view());
return v->sideBar(loc);
}
QRect MainWindow::centralAreaGeometry() const
{
auto v = dynamic_cast<Views::MainWindow *>(view());
auto v = dynamic_cast<Views::MainWindowViewInterface *>(view());
return v->centralAreaGeometry();
}

View File

@@ -222,8 +222,6 @@ public:
void setContentsMargins(int, int, int, int);
void onResized(QResizeEvent *);
protected:
void setUniqueName(const QString &uniqueName);
QMargins centerWidgetMargins() const;

View File

@@ -9,4 +9,4 @@
Contact KDAB at <info@kdab.com> for commercial licensing options.
*/
#include "../../../views/MainWindow.h"
#include "../../../views/MainWindowViewInterface.h"

View File

@@ -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<Controllers::MainWindow *>(controller()))
, MainWindowViewInterface(static_cast<Controllers::MainWindow *>(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;
}

View File

@@ -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;
};
}
}

View File

@@ -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<QMainWindow>(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<QMainWindow>(new Controllers::MainWindow(this, uniqueName, options),
Type::MainWindow, parent, flags)
, d(new Private(static_cast<Controllers::MainWindow *>(controller()), this))
, MainWindowViewInterface(static_cast<Controllers::MainWindow *>(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);

View File

@@ -20,7 +20,7 @@
#define KD_MAINWINDOW_H
#include "View_qtwidgets.h"
#include "kddockwidgets/views/MainWindow.h"
#include "kddockwidgets/views/MainWindowViewInterface.h"
#include <QMainWindow>
@@ -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<QMainWindow>, public MainWindow
class DOCKS_EXPORT MainWindow_qtwidgets : public View_qtwidgets<QMainWindow>, 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;

View File

@@ -0,0 +1,28 @@
/*
This file is part of KDDockWidgets.
SPDX-FileCopyrightText: 2020-2022 Klarälvdalens Datakonsult AB, a KDAB Group
company <info@kdab.com> Author: Sérgio Martins <sergio.martins@kdab.com>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
Contact KDAB at <info@kdab.com> 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;
}
}

View File

@@ -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;
};
}