Add MainWindow view interface

This commit is contained in:
Sergio Martins
2022-04-03 22:25:57 +01:00
parent 6cbf7247ce
commit ad1b77f79e
4 changed files with 55 additions and 15 deletions

View File

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

39
src/views/MainWindow.h Normal file
View File

@@ -0,0 +1,39 @@
/*
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.
*/
#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;
};
}
}

View File

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

View File

@@ -21,6 +21,7 @@
#include "View_qtwidgets.h"
#include "controllers/MainWindow.h"
#include "views/MainWindow.h"
#include <QMainWindow>
@@ -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<QMainWindow>
class DOCKS_EXPORT MainWindow_qtwidgets : public View_qtwidgets<QMainWindow>, 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;