Split most widgets into a Controller and a View

Controllers don't have any GUI and don't depend on the frontend
technology.

Views are implemented in a specific GUI tech (QtWidgets, QtQuick, etc).

For now only QtWidgets work. There's still a lot to decouple.

This will make it easier to introduce non-Qt backends.
This commit is contained in:
Sergio Martins
2022-02-13 18:02:25 +00:00
parent ca3fe4070a
commit c6d95c42a8
149 changed files with 6099 additions and 5095 deletions

View File

@@ -18,8 +18,7 @@
#include <kddockwidgets/private/widgets/FrameWidget_p.h>
#include <kddockwidgets/private/widgets/TabBarWidget_p.h>
#include <kddockwidgets/private/widgets/TabWidgetWidget_p.h>
#include <kddockwidgets/private/widgets/TitleBarWidget_p.h>
#include <kddockwidgets/private/multisplitter/Separator_qwidget.h>
#include "../../src/private/multisplitter/views_qtwidgets/Separator_qtwidgets.h" // TODO
#include <QApplication>
@@ -62,18 +61,18 @@ public:
f.setPixelSize(30);
f.setBold(true);
p.setFont(f);
p.drawText(QPoint(10,40), title());
p.drawText(QPoint(10, 40), title());
}
};
MyTitleBar::~MyTitleBar() = default;
// Inheriting from SeparatorWidget instead of Separator as it handles moving and mouse cursor changing
class MySeparator : public Layouting::SeparatorWidget
class MySeparator : public KDDockWidgets::Views::Separator_qtwidgets
{
public:
explicit MySeparator(Layouting::Widget *parent)
: Layouting::SeparatorWidget(parent)
explicit MySeparator(KDDockWidgets::Controllers::Separator *controller, QWidget *parent)
: KDDockWidgets::Views::Separator_qtwidgets(controller, parent)
{
}
@@ -88,19 +87,19 @@ public:
MySeparator::~MySeparator() = default;
KDDockWidgets::TitleBar * CustomWidgetFactory::createTitleBar(KDDockWidgets::Frame *frame) const
KDDockWidgets::TitleBar *CustomWidgetFactory::createTitleBar(KDDockWidgets::Frame *frame) const
{
// Feel free to return MyTitleBar_CSS here instead, but just for education purposes!
return new MyTitleBar(frame);
}
KDDockWidgets::TitleBar * CustomWidgetFactory::createTitleBar(KDDockWidgets::FloatingWindow *fw) const
KDDockWidgets::TitleBar *CustomWidgetFactory::createTitleBar(KDDockWidgets::FloatingWindow *fw) const
{
// Feel free to return MyTitleBar_CSS here instead, but just for education purposes!
return new MyTitleBar(fw);
}
Layouting::Separator * CustomWidgetFactory::createSeparator(Layouting::Widget *parent) const
KDDockWidgets::View *CustomWidgetFactory::createSeparator(KDDockWidgets::Controllers::Separator *controller, KDDockWidgets::View *parent) const
{
return new MySeparator(parent);
return new MySeparator(controller, parent ? static_cast<KDDockWidgets::Views::View_qtwidgets *>(parent) : nullptr);
}