diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 021b1809..3f07f5b7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -102,10 +102,6 @@ set(DOCKSLIBS_SRCS ViewWrapper.h Controller.cpp Controller.h - - views/FrameView.cpp - views/FrameView.h - views_qtwidgets/View_qtwidgets.cpp views_qtwidgets/View_qtwidgets.h views_qtwidgets/ViewWrapper_qtwidgets.cpp diff --git a/src/FrameworkWidgetFactory.cpp b/src/FrameworkWidgetFactory.cpp index 90ba8d74..8a563640 100644 --- a/src/FrameworkWidgetFactory.cpp +++ b/src/FrameworkWidgetFactory.cpp @@ -58,10 +58,10 @@ FrameworkWidgetFactory::~FrameworkWidgetFactory() #ifdef KDDOCKWIDGETS_QTWIDGETS View *DefaultWidgetFactory::createFrame(Controllers::Frame *controller, View *parent = nullptr, - FrameOptions options) const + FrameOptions) const { - Q_UNUSED(options); // TODO - return new Views::Frame_qtwidgets(controller, parent->asQWidget()); + // TODOv2: Remove options + return new Views::Frame_qtwidgets(controller, parent ? parent->asQWidget() : nullptr); } View *DefaultWidgetFactory::createTitleBar(Controllers::TitleBar *titleBar, Controllers::Frame *frame) const diff --git a/src/controllers/Frame.cpp b/src/controllers/Frame.cpp index 01ef6d52..1caf59f8 100644 --- a/src/controllers/Frame.cpp +++ b/src/controllers/Frame.cpp @@ -16,6 +16,7 @@ #include "Controller.h" #include "View.h" +#include "views/Frame.h" #include "controllers/TitleBar.h" #include "controllers/Stack.h" #include "controllers/FloatingWindow.h" @@ -31,7 +32,6 @@ #include "private/DropAreaWithCentralFrame_p.h" #include "private/multisplitter/Item_p.h" -#include "views_qtwidgets/Frame_qtwidgets.h" #include "views_qtwidgets/DockWidget_qtwidgets.h" #include @@ -68,7 +68,7 @@ static StackOptions tabWidgetOptions(FrameOptions options) } Frame::Frame(View *parent, FrameOptions options, int userType) - : Controller(Type::Frame, new Views::Frame_qtwidgets(this, parent ? parent->asQWidget() : nullptr)) + : Controller(Type::Frame, Config::self().frameworkWidgetFactory()->createFrame(this, parent)) , FocusScope(static_cast *>(view()->asQWidget())) // TODO , m_tabWidget(new Controllers::Stack(this, tabWidgetOptions(options))) , m_titleBar(new Controllers::TitleBar(this)) @@ -152,63 +152,57 @@ void Frame::setLayoutWidget(LayoutWidget *dt) void Frame::renameTab(int index, const QString &title) { - // TODO - qobject_cast(view()->asQWidget())->renameTab(index, title); + dynamic_cast(view())->renameTab(index, title); } void Frame::changeTabIcon(int index, const QIcon &icon) { - // TODO - qobject_cast(view()->asQWidget())->changeTabIcon(index, icon); + dynamic_cast(view())->changeTabIcon(index, icon); } void Frame::removeWidget_impl(DockWidget *dw) { - // TODO - qobject_cast(view()->asQWidget())->removeWidget_impl(dw); + dynamic_cast(view())->removeWidget_impl(dw); } int Frame::indexOfDockWidget_impl(const DockWidget *dw) { - // TODO - return qobject_cast(view()->asQWidget())->indexOfDockWidget_impl(dw); + return dynamic_cast(view())->indexOfDockWidget_impl(dw); } int Frame::currentIndex_impl() const { - // TODO - return qobject_cast(view()->asQWidget())->currentIndex_impl(); + return dynamic_cast(view())->currentIndex_impl(); } void Frame::setCurrentTabIndex_impl(int index) { - // TODO - qobject_cast(view()->asQWidget())->setCurrentTabIndex_impl(index); + dynamic_cast(view())->setCurrentTabIndex_impl(index); } void Frame::setCurrentDockWidget_impl(DockWidget *dw) { - qobject_cast(view()->asQWidget())->setCurrentDockWidget_impl(dw); + dynamic_cast(view())->setCurrentDockWidget_impl(dw); } void Frame::insertDockWidget_impl(DockWidget *dw, int index) { - qobject_cast(view()->asQWidget())->insertDockWidget_impl(dw, index); + dynamic_cast(view())->insertDockWidget_impl(dw, index); } DockWidgetBase *Frame::dockWidgetAt_impl(int index) const { - return qobject_cast(view()->asQWidget())->dockWidgetAt_impl(index); + return dynamic_cast(view())->dockWidgetAt_impl(index); } DockWidgetBase *Frame::currentDockWidget_impl() const { - return qobject_cast(view()->asQWidget())->currentDockWidget_impl(); + return dynamic_cast(view())->currentDockWidget_impl(); } int Frame::nonContentsHeight() const { - return qobject_cast(view()->asQWidget())->nonContentsHeight(); + return dynamic_cast(view())->nonContentsHeight(); } Controllers::Stack *Frame::tabWidget() const @@ -858,7 +852,7 @@ QRect Frame::dragRect() const if (rect.isValid()) return rect; - return qobject_cast(view()->asQWidget())->dragRect(); + return dynamic_cast(view())->dragRect(); } MainWindow *Frame::mainWindow() const diff --git a/src/controllers/Frame.h b/src/controllers/Frame.h index f3868c27..a3cfda92 100644 --- a/src/controllers/Frame.h +++ b/src/controllers/Frame.h @@ -337,15 +337,15 @@ public: */ QSize biggestDockWidgetMaxSize() const; - virtual void removeWidget_impl(DockWidget *); - virtual int indexOfDockWidget_impl(const DockWidget *); - virtual int currentIndex_impl() const; - virtual void setCurrentTabIndex_impl(int index); - virtual void setCurrentDockWidget_impl(DockWidget *); - virtual void insertDockWidget_impl(DockWidget *, int index); - virtual DockWidget *dockWidgetAt_impl(int index) const; - virtual DockWidget *currentDockWidget_impl() const; - virtual int nonContentsHeight() const; + void removeWidget_impl(DockWidget *); + int indexOfDockWidget_impl(const DockWidget *); + int currentIndex_impl() const; + void setCurrentTabIndex_impl(int index); + void setCurrentDockWidget_impl(DockWidget *); + void insertDockWidget_impl(DockWidget *, int index); + DockWidget *dockWidgetAt_impl(int index) const; + DockWidget *currentDockWidget_impl() const; + int nonContentsHeight() const; private: bool m_inCtor = true; // Needs to be initialized early, as pointed out by UBSAN diff --git a/src/views/Frame.h b/src/views/Frame.h new file mode 100644 index 00000000..6c21524e --- /dev/null +++ b/src/views/Frame.h @@ -0,0 +1,46 @@ +/* + 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. +*/ + +#pragma once + +class QString; +class QIcon; +class QRect; + +namespace KDDockWidgets { + +namespace Controllers { +class DockWidget; +} + +namespace Views { + +/// @brief The interface that Frame views should implement +class Frame +{ +public: + virtual void renameTab(int index, const QString &) = 0; + virtual void changeTabIcon(int index, const QIcon &) = 0; + virtual void removeWidget_impl(Controllers::DockWidget *) = 0; + virtual int indexOfDockWidget_impl(const Controllers::DockWidget *) = 0; + virtual int currentIndex_impl() const = 0; + virtual void setCurrentTabIndex_impl(int index) = 0; + virtual void setCurrentDockWidget_impl(Controllers::DockWidget *) = 0; + virtual void insertDockWidget_impl(Controllers::DockWidget *, int index) = 0; + virtual Controllers::DockWidget *dockWidgetAt_impl(int index) const = 0; + virtual Controllers::DockWidget *currentDockWidget_impl() const = 0; + virtual int nonContentsHeight() const = 0; + virtual QRect dragRect() const = 0; +}; + +} + +} diff --git a/src/views/FrameView.cpp b/src/views/FrameView.cpp deleted file mode 100644 index 80b3e8df..00000000 --- a/src/views/FrameView.cpp +++ /dev/null @@ -1,22 +0,0 @@ -/* - 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 "FrameView.h" -#include "controllers/Frame.h" - -using namespace KDDockWidgets; -using namespace KDDockWidgets::Views; - -FrameView::FrameView(Controllers::Frame *controller, QObject *thisObj) - : View(controller, Type::Frame, thisObj) -{ -} diff --git a/src/views/FrameView.h b/src/views/FrameView.h deleted file mode 100644 index caeb9f0e..00000000 --- a/src/views/FrameView.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - 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 "../View.h" - -namespace KDDockWidgets { - -namespace Controllers { -class Frame; -} - -namespace Views { - -class DOCKS_EXPORT FrameView : public View -{ -public: - explicit FrameView(Controllers::Frame *, QObject *thisObj); -}; -} - -} diff --git a/src/views_qtwidgets/Frame_qtwidgets.h b/src/views_qtwidgets/Frame_qtwidgets.h index 32bc714e..4ac43b95 100644 --- a/src/views_qtwidgets/Frame_qtwidgets.h +++ b/src/views_qtwidgets/Frame_qtwidgets.h @@ -12,6 +12,7 @@ #pragma once #include "View_qtwidgets.h" +#include "views/Frame.h" namespace KDDockWidgets::Controllers { class Frame; @@ -19,7 +20,7 @@ class Frame; namespace KDDockWidgets::Views { -class DOCKS_EXPORT Frame_qtwidgets : public View_qtwidgets +class DOCKS_EXPORT Frame_qtwidgets : public View_qtwidgets, public Frame { Q_OBJECT public: @@ -28,20 +29,20 @@ public: void setLayoutItem(Layouting::Item *item) override; - void renameTab(int index, const QString &); - void changeTabIcon(int index, const QIcon &); - void removeWidget_impl(Controllers::DockWidget *); - int indexOfDockWidget_impl(const Controllers::DockWidget *); - int currentIndex_impl() const; - void setCurrentTabIndex_impl(int index); - void setCurrentDockWidget_impl(Controllers::DockWidget *); - void insertDockWidget_impl(Controllers::DockWidget *, int index); - Controllers::DockWidget *dockWidgetAt_impl(int index) const; - Controllers::DockWidget *currentDockWidget_impl() const; - int nonContentsHeight() const; + void renameTab(int index, const QString &) override; + void changeTabIcon(int index, const QIcon &) override; + void removeWidget_impl(Controllers::DockWidget *) override; + int indexOfDockWidget_impl(const Controllers::DockWidget *) override; + int currentIndex_impl() const override; + void setCurrentTabIndex_impl(int index) override; + void setCurrentDockWidget_impl(Controllers::DockWidget *) override; + void insertDockWidget_impl(Controllers::DockWidget *, int index) override; + Controllers::DockWidget *dockWidgetAt_impl(int index) const override; + Controllers::DockWidget *currentDockWidget_impl() const override; + int nonContentsHeight() const override; Controllers::Frame *frame() const; - QRect dragRect() const; + QRect dragRect() const override; Q_SIGNALS: void layoutInvalidated();