diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 57aa422d..491d8fa2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -127,6 +127,8 @@ set(DOCKSLIBS_SRCS qtwidgets/views/Frame_qtwidgets.h qtwidgets/views/MainWindow_qtwidgets.cpp qtwidgets/views/MainWindow_qtwidgets.h + qtwidgets/views/RubberBand_qtwidgets.cpp + qtwidgets/views/RubberBand_qtwidgets.h qtwidgets/views/Separator_qtwidgets.cpp qtwidgets/views/Separator_qtwidgets.h qtwidgets/views/TitleBar_qtwidgets.cpp diff --git a/src/Controller.h b/src/Controller.h index a8a72bfd..e06d9900 100644 --- a/src/Controller.h +++ b/src/Controller.h @@ -43,8 +43,9 @@ enum class Type ViewWrapper = 4096, DropArea = 8192, MDILayout = 0x4000, + RubberBand = 0x8000, - LAST = MDILayout // Keep last + LAST = RubberBand // Keep last }; class DOCKS_EXPORT Controller : public QObject // TODOv2 remove QObject diff --git a/src/FrameworkWidgetFactory.h b/src/FrameworkWidgetFactory.h index 330ed827..c25e4d7b 100644 --- a/src/FrameworkWidgetFactory.h +++ b/src/FrameworkWidgetFactory.h @@ -122,7 +122,7 @@ public: ///@brief Called internally by the framework to create a RubberBand to show as drop zone /// Returns a rubber band - virtual QWidgetOrQuick *createRubberBand(View *parent) const = 0; + virtual View *createRubberBand(View *parent) const = 0; ///@brief Called internally by the framework to create a SideBar ///@param loc The side-bar location without the main window. Just forward into your SideBar sub-class ctor. diff --git a/src/private/indicators/ClassicIndicators_p.h b/src/private/indicators/ClassicIndicators_p.h index 443c0f9d..89761030 100644 --- a/src/private/indicators/ClassicIndicators_p.h +++ b/src/private/indicators/ClassicIndicators_p.h @@ -68,7 +68,7 @@ private: void setDropLocation(DropLocation); void updateWindowPosition(); - QWidgetOrQuick *const m_rubberBand; + View *const m_rubberBand; IndicatorWindow *const m_indicatorWindow; }; diff --git a/src/qtquick/FrameworkWidgetFactory_qtquick.cpp b/src/qtquick/FrameworkWidgetFactory_qtquick.cpp index 2f9042f5..fa9b1921 100644 --- a/src/qtquick/FrameworkWidgetFactory_qtquick.cpp +++ b/src/qtquick/FrameworkWidgetFactory_qtquick.cpp @@ -122,7 +122,7 @@ DropIndicatorOverlayInterface *DefaultWidgetFactory_qtquick::createDropIndicator return new ClassicIndicators(dropArea); } -QWidgetOrQuick *DefaultWidgetFactory_qtquick::createRubberBand(View *) const +View *DefaultWidgetFactory_qtquick::createRubberBand(View *) const { return {}; // return new QRubberBand(QRubberBand::Rectangle, parent ? qobject_cast(parent->asQObject()) : nullptr); diff --git a/src/qtquick/FrameworkWidgetFactory_qtquick.h b/src/qtquick/FrameworkWidgetFactory_qtquick.h index 35509c6d..418c1478 100644 --- a/src/qtquick/FrameworkWidgetFactory_qtquick.h +++ b/src/qtquick/FrameworkWidgetFactory_qtquick.h @@ -66,7 +66,7 @@ public: Controllers::MainWindow *parent = nullptr, Qt::WindowFlags windowFlags = {}) const override; DropIndicatorOverlayInterface *createDropIndicatorOverlay(Controllers::DropArea *) const override; - QWidgetOrQuick *createRubberBand(View *parent) const override; + View *createRubberBand(View *parent) const override; View *createSideBar(Controllers::SideBar *, Controllers::MainWindow *parent) const override; View *createDropArea(Controllers::DropArea *, View *parent) const override; View *createMDILayout(MDILayoutWidget *, View *parent) const override; diff --git a/src/qtwidgets/FrameworkWidgetFactory_qtwidgets.cpp b/src/qtwidgets/FrameworkWidgetFactory_qtwidgets.cpp index 220b7e00..f0726d2d 100644 --- a/src/qtwidgets/FrameworkWidgetFactory_qtwidgets.cpp +++ b/src/qtwidgets/FrameworkWidgetFactory_qtwidgets.cpp @@ -34,8 +34,8 @@ #include "qtwidgets/views/Stack_qtwidgets.h" #include "qtwidgets/views/MainWindow_qtwidgets.h" #include "qtwidgets/views/MDILayout_qtwidgets.h" +#include "qtwidgets/views/RubberBand_qtwidgets.h" -#include #include @@ -116,9 +116,9 @@ DropIndicatorOverlayInterface *DefaultWidgetFactory_qtwidgets::createDropIndicat return new ClassicIndicators(dropArea); } -QWidgetOrQuick *DefaultWidgetFactory_qtwidgets::createRubberBand(View *parent) const +View *DefaultWidgetFactory_qtwidgets::createRubberBand(View *parent) const { - return new QRubberBand(QRubberBand::Rectangle, parent ? qobject_cast(parent->asQObject()) : nullptr); + return new Views::RubberBand_qtwidgets(parent ? qobject_cast(parent->asQObject()) : nullptr); } View *DefaultWidgetFactory_qtwidgets::createSideBar(Controllers::SideBar *controller, diff --git a/src/qtwidgets/FrameworkWidgetFactory_qtwidgets.h b/src/qtwidgets/FrameworkWidgetFactory_qtwidgets.h index 178183e2..7d2181be 100644 --- a/src/qtwidgets/FrameworkWidgetFactory_qtwidgets.h +++ b/src/qtwidgets/FrameworkWidgetFactory_qtwidgets.h @@ -66,7 +66,7 @@ public: Controllers::MainWindow *parent = nullptr, Qt::WindowFlags windowFlags = {}) const override; DropIndicatorOverlayInterface *createDropIndicatorOverlay(Controllers::DropArea *) const override; - QWidgetOrQuick *createRubberBand(View *parent) const override; + View *createRubberBand(View *parent) const override; View *createSideBar(Controllers::SideBar *, Controllers::MainWindow *parent) const override; View *createDropArea(Controllers::DropArea *, View *parent) const override; View *createMDILayout(MDILayoutWidget *, View *parent) const override; diff --git a/src/qtwidgets/views/RubberBand_qtwidgets.cpp b/src/qtwidgets/views/RubberBand_qtwidgets.cpp new file mode 100644 index 00000000..e71cb798 --- /dev/null +++ b/src/qtwidgets/views/RubberBand_qtwidgets.cpp @@ -0,0 +1,24 @@ +/* + This file is part of KDDockWidgets. + + SPDX-FileCopyrightText: 2019-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 "RubberBand_qtwidgets.h" + +using namespace KDDockWidgets; +using namespace KDDockWidgets::Views; + +RubberBand_qtwidgets::RubberBand_qtwidgets(QWidget *parent) + : View_qtwidgets(nullptr, Type::RubberBand, parent) +{ +} + +RubberBand_qtwidgets::~RubberBand_qtwidgets() +{ +} diff --git a/src/qtwidgets/views/RubberBand_qtwidgets.h b/src/qtwidgets/views/RubberBand_qtwidgets.h new file mode 100644 index 00000000..38c3b7df --- /dev/null +++ b/src/qtwidgets/views/RubberBand_qtwidgets.h @@ -0,0 +1,30 @@ +/* + This file is part of KDDockWidgets. + + SPDX-FileCopyrightText: 2019-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_qtwidgets.h" + +#include + +namespace KDDockWidgets { + +namespace Views { + +class DOCKS_EXPORT RubberBand_qtwidgets : public View_qtwidgets +{ + Q_OBJECT +public: + explicit RubberBand_qtwidgets(QWidget *parent = nullptr); + ~RubberBand_qtwidgets() override; +}; + +} + +} diff --git a/src/qtwidgets/views/ViewWrapper_qtwidgets.cpp b/src/qtwidgets/views/ViewWrapper_qtwidgets.cpp index e13b0732..e2a216d7 100644 --- a/src/qtwidgets/views/ViewWrapper_qtwidgets.cpp +++ b/src/qtwidgets/views/ViewWrapper_qtwidgets.cpp @@ -21,6 +21,7 @@ #include "qtwidgets/views/Stack_qtwidgets.h" #include "qtwidgets/views/TabBar_qtwidgets.h" #include "qtwidgets/views/TitleBar_qtwidgets.h" +#include "qtwidgets/views/RubberBand_qtwidgets.h" #include "qtwidgets/Window_qtwidgets.h" #include "private/MDILayoutWidget_p.h" @@ -90,6 +91,7 @@ static Controller *controllerForWidget(QWidget *widget) if (auto view = qobject_cast(widget)) return view->controller(); break; + case Type::RubberBand: case Type::LayoutItem: case Type::DropIndicatorOverlayInterface: case Type::ViewWrapper: @@ -220,6 +222,8 @@ bool ViewWrapper_qtwidgets::is(Type t) const return qobject_cast(m_widget); case Type::MDILayout: return qobject_cast(m_widget); + case Type::RubberBand: + return qobject_cast(m_widget); case Type::MDIArea: return qobject_cast(m_widget); case Type::LayoutItem: diff --git a/src/qtwidgets/views/View_qtwidgets.cpp b/src/qtwidgets/views/View_qtwidgets.cpp index c2e5c515..916613fd 100644 --- a/src/qtwidgets/views/View_qtwidgets.cpp +++ b/src/qtwidgets/views/View_qtwidgets.cpp @@ -14,6 +14,7 @@ #include #include #include +#include using namespace KDDockWidgets::Views; @@ -44,3 +45,10 @@ View_qtwidgets::View_qtwidgets(KDDockWidgets::Controller *controlle , View(controller, type, this) { } + +template<> +View_qtwidgets::View_qtwidgets(KDDockWidgets::Controller *controller, Type type, QWidget *parent, Qt::WindowFlags) + : QRubberBand(QRubberBand::Rectangle, parent) + , View(controller, type, this) +{ +}