diff --git a/examples/dockwidgets/main.cpp b/examples/dockwidgets/main.cpp index 79ee4a6c..b4b68483 100644 --- a/examples/dockwidgets/main.cpp +++ b/examples/dockwidgets/main.cpp @@ -168,7 +168,7 @@ int main(int argc, char **argv) // } if (parser.isSet(segmentedIndicators)) - KDDockWidgets::DefaultWidgetFactory::s_dropIndicatorType = KDDockWidgets::DropIndicatorType::Segmented; + KDDockWidgets::FrameworkWidgetFactory::s_dropIndicatorType = KDDockWidgets::DropIndicatorType::Segmented; MainWindowOptions options = MainWindowOption_None; auto flags = KDDockWidgets::Config::self().flags(); @@ -194,7 +194,7 @@ int main(int argc, char **argv) flags |= KDDockWidgets::Config::Flag_NativeTitleBar; if (parser.isSet(noDropIndicators)) - KDDockWidgets::DefaultWidgetFactory::s_dropIndicatorType = KDDockWidgets::DropIndicatorType::None; + KDDockWidgets::FrameworkWidgetFactory::s_dropIndicatorType = KDDockWidgets::DropIndicatorType::None; #if defined(Q_OS_WIN) if (parser.isSet(noAeroSnap)) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index be11f2d6..8ae535ee 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -138,6 +138,8 @@ set(DOCKSLIBS_SRCS qtwidgets/views/Stack_qtwidgets.h qtwidgets/views/SideBar_qtwidgets.cpp qtwidgets/views/SideBar_qtwidgets.h + qtwidgets/FrameworkWidgetFactory_qtwidgets.cpp + qtwidgets/FrameworkWidgetFactory_qtwidgets.h qtwidgets/DebugWindow.cpp qtwidgets/DebugWindow_p.h qtwidgets/ObjectViewer.cpp diff --git a/src/Config.cpp b/src/Config.cpp index c4290292..38e3c8d5 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -26,6 +26,8 @@ #include "FrameworkWidgetFactory.h" #include "controllers/Separator.h" +#include "qtwidgets/FrameworkWidgetFactory_qtwidgets.h" + #include #include @@ -41,7 +43,7 @@ class Config::Private { public: Private() - : m_frameworkWidgetFactory(new DefaultWidgetFactory()) + : m_frameworkWidgetFactory(new DefaultWidgetFactory_qtwidgets()) { } diff --git a/src/FrameworkWidgetFactory.cpp b/src/FrameworkWidgetFactory.cpp index 94499624..2951b236 100644 --- a/src/FrameworkWidgetFactory.cpp +++ b/src/FrameworkWidgetFactory.cpp @@ -10,289 +10,11 @@ */ #include "FrameworkWidgetFactory.h" -#include "Config.h" - -#include "private/indicators/ClassicIndicators_p.h" -#include "private/indicators/NullIndicators_p.h" -#include "private/Utils_p.h" - -#include "controllers/TabBar.h" -#include "controllers/Stack.h" -#include "controllers/FloatingWindow.h" - -#ifdef KDDOCKWIDGETS_QTWIDGETS -#include "private/indicators/SegmentedIndicators_p.h" - -#include "qtwidgets/views/FloatingWindow_qtwidgets.h" -#include "qtwidgets/views/DockWidget_qtwidgets.h" -#include "qtwidgets/views/Frame_qtwidgets.h" -#include "qtwidgets/views/MainWindow_qtwidgets.h" -#include "qtwidgets/views/View_qtwidgets.h" -#include "qtwidgets/views/Separator_qtwidgets.h" -#include "qtwidgets/views/TitleBar_qtwidgets.h" -#include "qtwidgets/views/TabBar_qtwidgets.h" -#include "qtwidgets/views/SideBar_qtwidgets.h" -#include "qtwidgets/views/Stack_qtwidgets.h" -#include "qtwidgets/views/MainWindow_qtwidgets.h" - -#include -#include -#else -#include "DockWidgetQuick.h" -#include "private/quick/FrameQuick_p.h" -#include "private/quick/TitleBarQuick_p.h" -#include "private/quick/TabWidgetQuick_p.h" -#include "private/quick/TabBarQuick_p.h" -#include "private/quick/FloatingWindowQuick_p.h" -#include "private/quick/RubberBandQuick.h" -#include "private/multisplitter/Separator_quick.h" -#endif - -// clazy:excludeall=ctor-missing-parent-argument using namespace KDDockWidgets; -DropIndicatorType DefaultWidgetFactory::s_dropIndicatorType = DropIndicatorType::Classic; +DropIndicatorType FrameworkWidgetFactory::s_dropIndicatorType = DropIndicatorType::Classic; FrameworkWidgetFactory::~FrameworkWidgetFactory() { } - -#ifdef KDDOCKWIDGETS_QTWIDGETS - -View *DefaultWidgetFactory::createMainWindow(Controllers::MainWindow *mainWindow, View *parent, Qt::WindowFlags flags) const -{ - return new Views::MainWindow_qtwidgets(mainWindow, parent ? static_cast *>(parent) : nullptr, flags); -} - -View *DefaultWidgetFactory::createDockWidget(Controllers::DockWidget *dw, Qt::WindowFlags flags) const -{ - return new Views::DockWidget_qtwidgets(dw, flags); -} - -View *DefaultWidgetFactory::createFrame(Controllers::Frame *controller, View *parent = nullptr, - FrameOptions) const -{ - // TODOv2: Remove options - return new Views::Frame_qtwidgets(controller, parent ? parent->asQWidget() : nullptr); -} - -View *DefaultWidgetFactory::createTitleBar(Controllers::TitleBar *titleBar, Controllers::Frame *frame) const -{ - return new Views::TitleBar_qtwidgets(titleBar, frame->view()->asQWidget()); -} - -View *DefaultWidgetFactory::createTitleBar(Controllers::TitleBar *titleBar, Controllers::FloatingWindow *fw) const -{ - return new Views::TitleBar_qtwidgets(titleBar, fw ? fw->view()->asQWidget() : nullptr); -} - -View *DefaultWidgetFactory::createTabBar(Controllers::TabBar *tabBar, View *parent) const -{ - return new Views::TabBar_qtwidgets(tabBar, parent->asQWidget()); -} - -View *DefaultWidgetFactory::createTabWidget(Controllers::Stack *controller, Controllers::Frame *parent) const -{ - return new Views::Stack_qtwidgets(controller, parent); -} - -View *DefaultWidgetFactory::createSeparator(Controllers::Separator *controller, View *parent) const -{ - return new Views::Separator_qtwidgets(controller, parent ? static_cast *>(parent) : nullptr); -} - -View *DefaultWidgetFactory::createFloatingWindow(Controllers::FloatingWindow *controller, - Controllers::MainWindow *parent, Qt::WindowFlags windowFlags) const -{ - auto mainwindow = qobject_cast(parent ? parent->view()->asQWidget() : nullptr); - return new Views::FloatingWindow_qtwidgets(controller, mainwindow, windowFlags); -} - -DropIndicatorOverlayInterface *DefaultWidgetFactory::createDropIndicatorOverlay(DropArea *dropArea) const -{ -#ifdef Q_OS_WASM - // On WASM windows don't support translucency, which is required for the classic indicators. - return new SegmentedIndicators(dropArea); -#endif - - switch (s_dropIndicatorType) { - case DropIndicatorType::Classic: - return new ClassicIndicators(dropArea); - case DropIndicatorType::Segmented: - return new SegmentedIndicators(dropArea); - case DropIndicatorType::None: - return new NullIndicators(dropArea); - } - - return new ClassicIndicators(dropArea); -} - -QWidgetOrQuick *DefaultWidgetFactory::createRubberBand(QWidgetOrQuick *parent) const -{ - return new QRubberBand(QRubberBand::Rectangle, parent); -} - -View *DefaultWidgetFactory::createSideBar(Controllers::SideBar *controller, - Controllers::MainWindow *parent) const -{ - return new Views::SideBar_qtwidgets(controller, parent->view()->asQWidget()); -} - -QAbstractButton *DefaultWidgetFactory::createTitleBarButton(QWidget *parent, TitleBarButtonType type) const -{ - if (!parent) { - qWarning() << Q_FUNC_INFO << "Parent not provided"; - return nullptr; - } - - auto button = new Views::Button(parent); - button->setIcon(iconForButtonType(type, parent->devicePixelRatioF())); - - return button; -} - -#else - -Frame *DefaultWidgetFactory::createFrame(QWidgetOrQuick *parent, FrameOptions options) const -{ - return new FrameQuick(parent, options); -} - -TitleBar *DefaultWidgetFactory::createTitleBar(Frame *frame) const -{ - return new TitleBarQuick(frame); -} - -TitleBar *DefaultWidgetFactory::createTitleBar(FloatingWindow *fw) const -{ - return new TitleBarQuick(fw); -} - -/*Separator *DefaultWidgetFactory::createSeparator(QWidgetAdapter *parent) const -{ - return new SeparatorQuick(parent); -}*/ - -FloatingWindow *DefaultWidgetFactory::createFloatingWindow(MainWindowBase *parent) const -{ - return new FloatingWindowQuick(parent); -} - -FloatingWindow *DefaultWidgetFactory::createFloatingWindow(Frame *frame, MainWindowBase *parent, QRect suggestedGeometry) const -{ - return new FloatingWindowQuick(frame, suggestedGeometry, parent); -} - -DropIndicatorOverlayInterface *DefaultWidgetFactory::createDropIndicatorOverlay(DropArea *dropArea) const -{ - switch (s_dropIndicatorType) { - case DropIndicatorType::Classic: - return new ClassicIndicators(dropArea); - case DropIndicatorType::Segmented: - qWarning() << "Segmented indicators not supported for QtQuick yet"; - return new NullIndicators(dropArea); - case DropIndicatorType::None: - return new NullIndicators(dropArea); - } - - return new ClassicIndicators(dropArea); -} - -TabBar *DefaultWidgetFactory::createTabBar(TabWidget *parent) const -{ - return new TabBarQuick(parent); -} - -TabWidget *DefaultWidgetFactory::createTabWidget(Frame *parent, TabWidgetOptions) const -{ - return new TabWidgetQuick(parent); -} - -Layouting::Separator *DefaultWidgetFactory::createSeparator(Layouting::Widget *parent) const -{ - return new Layouting::SeparatorQuick(parent); -} - -QWidgetOrQuick *DefaultWidgetFactory::createRubberBand(QWidgetOrQuick *parent) const -{ - return new RubberBandQuick(parent); -} - -SideBar *DefaultWidgetFactory::createSideBar(SideBarLocation loc, MainWindowBase *parent) const -{ - Q_UNUSED(loc); - Q_UNUSED(parent); - - qWarning() << Q_FUNC_INFO << "Not implemented yet"; - return nullptr; -} - -QUrl DefaultWidgetFactory::titleBarFilename() const -{ - return QUrl(QStringLiteral("qrc:/kddockwidgets/private/quick/qml/TitleBar.qml")); -} - -QUrl DefaultWidgetFactory::dockwidgetFilename() const -{ - return QUrl(QStringLiteral("qrc:/kddockwidgets/private/quick/qml/DockWidget.qml")); -} - -QUrl DefaultWidgetFactory::frameFilename() const -{ - return QUrl(QStringLiteral("qrc:/kddockwidgets/private/quick/qml/Frame.qml")); -} - -QUrl DefaultWidgetFactory::floatingWindowFilename() const -{ - return QUrl(QStringLiteral("qrc:/kddockwidgets/private/quick/qml/FloatingWindow.qml")); -} - -#endif // QtQuick - -// iconForButtonType impl is the same for QtQuick and QtWidgets -QIcon DefaultWidgetFactory::iconForButtonType(TitleBarButtonType type, qreal dpr) const -{ - QString iconName; - switch (type) { - case TitleBarButtonType::AutoHide: - iconName = QStringLiteral("auto-hide"); - break; - case TitleBarButtonType::UnautoHide: - iconName = QStringLiteral("unauto-hide"); - break; - case TitleBarButtonType::Close: - iconName = QStringLiteral("close"); - break; - case TitleBarButtonType::Minimize: - iconName = QStringLiteral("min"); - break; - case TitleBarButtonType::Maximize: - iconName = QStringLiteral("max"); - break; - case TitleBarButtonType::Normal: - // We're using the same icon as dock/float - iconName = QStringLiteral("dock-float"); - break; - case TitleBarButtonType::Float: - iconName = QStringLiteral("dock-float"); - break; - } - - if (iconName.isEmpty()) - return {}; - - QIcon icon(QStringLiteral(":/img/%1.png").arg(iconName)); - if (!scalingFactorIsSupported(dpr)) - return icon; - - // Not using Qt's sugar syntax, which doesn't support 1.5x anyway when we need it. - // Simply add the high-res files and Qt will pick them when needed - - if (scalingFactorIsSupported(1.5)) - icon.addFile(QStringLiteral(":/img/%1-1.5x.png").arg(iconName)); - - icon.addFile(QStringLiteral(":/img/%1-2x.png").arg(iconName)); - - return icon; -} diff --git a/src/FrameworkWidgetFactory.h b/src/FrameworkWidgetFactory.h index 03c171da..1b0c2cab 100644 --- a/src/FrameworkWidgetFactory.h +++ b/src/FrameworkWidgetFactory.h @@ -14,34 +14,19 @@ #include "docks_export.h" #include "KDDockWidgets.h" -#include "View.h" // TODO +#include "View.h" #include "controllers/Stack.h" #include "controllers/TitleBar.h" -// clazy:excludeall=ctor-missing-parent-argument - -/** - * @file - * @brief A factory class for allowing the user to customize some internal widgets. - * - * @author Sérgio Martins \ - */ QT_BEGIN_NAMESPACE class QAbstractButton; QT_END_NAMESPACE -namespace Layouting { -class Widget; -} - namespace KDDockWidgets { class DropIndicatorOverlayInterface; -class TabWidget; class DropArea; -class TabBar; -class TabWidgetQuick; namespace Controllers { class Separator; @@ -155,48 +140,11 @@ public: /// @param dpr the device pixel ratio of the button virtual QIcon iconForButtonType(TitleBarButtonType type, qreal dpr) const = 0; -private: - Q_DISABLE_COPY(FrameworkWidgetFactory) -}; - -/** - * @brief The FrameworkWidgetFactory that's used if none is specified. - */ -class DOCKS_EXPORT DefaultWidgetFactory : public FrameworkWidgetFactory -{ - Q_OBJECT -public: - DefaultWidgetFactory() = default; - View *createMainWindow(Controllers::MainWindow *, View *, Qt::WindowFlags) const override; - View *createDockWidget(Controllers::DockWidget *, Qt::WindowFlags) const override; - View *createFrame(Controllers::Frame *, View *parent, FrameOptions options = FrameOption_None) const override; - View *createTitleBar(Controllers::TitleBar *, Controllers::Frame *) const override; - View *createTitleBar(Controllers::TitleBar *, Controllers::FloatingWindow *) const override; - View *createTabWidget(Controllers::Stack *, Controllers::Frame *parent) const override; - View *createTabBar(Controllers::TabBar *tabBar, View *parent) const override; - View *createSeparator(Controllers::Separator *, View *parent = nullptr) const override; - View *createFloatingWindow(Controllers::FloatingWindow *, - Controllers::MainWindow *parent = nullptr, - Qt::WindowFlags windowFlags = {}) const override; - DropIndicatorOverlayInterface *createDropIndicatorOverlay(DropArea *) const override; - QWidgetOrQuick *createRubberBand(QWidgetOrQuick *parent) const override; - View *createSideBar(Controllers::SideBar *, Controllers::MainWindow *parent) const override; - -#ifdef KDDOCKWIDGETS_QTWIDGETS - QAbstractButton *createTitleBarButton(QWidget *parent, TitleBarButtonType) const override; -#else - Q_INVOKABLE QUrl titleBarFilename() const override; - QUrl dockwidgetFilename() const override; - QUrl frameFilename() const override; - QUrl floatingWindowFilename() const override; -#endif - - QIcon iconForButtonType(TitleBarButtonType type, qreal dpr) const override; - + /// @ The drop indicator type static DropIndicatorType s_dropIndicatorType; private: - Q_DISABLE_COPY(DefaultWidgetFactory) + Q_DISABLE_COPY(FrameworkWidgetFactory) }; } diff --git a/src/qtwidgets/FrameworkWidgetFactory_qtwidgets.cpp b/src/qtwidgets/FrameworkWidgetFactory_qtwidgets.cpp new file mode 100644 index 00000000..c56bbf2f --- /dev/null +++ b/src/qtwidgets/FrameworkWidgetFactory_qtwidgets.cpp @@ -0,0 +1,187 @@ +/* + 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 "FrameworkWidgetFactory_qtwidgets.h" +#include "Config.h" + +#include "private/indicators/ClassicIndicators_p.h" +#include "private/indicators/NullIndicators_p.h" +#include "private/Utils_p.h" + +#include "controllers/TabBar.h" +#include "controllers/Stack.h" +#include "controllers/FloatingWindow.h" + +#include "private/indicators/SegmentedIndicators_p.h" + +#include "qtwidgets/views/FloatingWindow_qtwidgets.h" +#include "qtwidgets/views/DockWidget_qtwidgets.h" +#include "qtwidgets/views/Frame_qtwidgets.h" +#include "qtwidgets/views/MainWindow_qtwidgets.h" +#include "qtwidgets/views/View_qtwidgets.h" +#include "qtwidgets/views/Separator_qtwidgets.h" +#include "qtwidgets/views/TitleBar_qtwidgets.h" +#include "qtwidgets/views/TabBar_qtwidgets.h" +#include "qtwidgets/views/SideBar_qtwidgets.h" +#include "qtwidgets/views/Stack_qtwidgets.h" +#include "qtwidgets/views/MainWindow_qtwidgets.h" + +#include +#include + + +// clazy:excludeall=ctor-missing-parent-argument + +using namespace KDDockWidgets; + + +DefaultWidgetFactory_qtwidgets::~DefaultWidgetFactory_qtwidgets() +{ +} + +View *DefaultWidgetFactory_qtwidgets::createMainWindow(Controllers::MainWindow *mainWindow, View *parent, Qt::WindowFlags flags) const +{ + return new Views::MainWindow_qtwidgets(mainWindow, parent ? static_cast *>(parent) : nullptr, flags); +} + +View *DefaultWidgetFactory_qtwidgets::createDockWidget(Controllers::DockWidget *dw, Qt::WindowFlags flags) const +{ + return new Views::DockWidget_qtwidgets(dw, flags); +} + +View *DefaultWidgetFactory_qtwidgets::createFrame(Controllers::Frame *controller, View *parent = nullptr, + FrameOptions) const +{ + // TODOv2: Remove options + return new Views::Frame_qtwidgets(controller, parent ? parent->asQWidget() : nullptr); +} + +View *DefaultWidgetFactory_qtwidgets::createTitleBar(Controllers::TitleBar *titleBar, Controllers::Frame *frame) const +{ + return new Views::TitleBar_qtwidgets(titleBar, frame->view()->asQWidget()); +} + +View *DefaultWidgetFactory_qtwidgets::createTitleBar(Controllers::TitleBar *titleBar, Controllers::FloatingWindow *fw) const +{ + return new Views::TitleBar_qtwidgets(titleBar, fw ? fw->view()->asQWidget() : nullptr); +} + +View *DefaultWidgetFactory_qtwidgets::createTabBar(Controllers::TabBar *tabBar, View *parent) const +{ + return new Views::TabBar_qtwidgets(tabBar, parent->asQWidget()); +} + +View *DefaultWidgetFactory_qtwidgets::createTabWidget(Controllers::Stack *controller, Controllers::Frame *parent) const +{ + return new Views::Stack_qtwidgets(controller, parent); +} + +View *DefaultWidgetFactory_qtwidgets::createSeparator(Controllers::Separator *controller, View *parent) const +{ + return new Views::Separator_qtwidgets(controller, parent ? static_cast *>(parent) : nullptr); +} + +View *DefaultWidgetFactory_qtwidgets::createFloatingWindow(Controllers::FloatingWindow *controller, + Controllers::MainWindow *parent, Qt::WindowFlags windowFlags) const +{ + auto mainwindow = qobject_cast(parent ? parent->view()->asQWidget() : nullptr); + return new Views::FloatingWindow_qtwidgets(controller, mainwindow, windowFlags); +} + +DropIndicatorOverlayInterface *DefaultWidgetFactory_qtwidgets::createDropIndicatorOverlay(DropArea *dropArea) const +{ +#ifdef Q_OS_WASM + // On WASM windows don't support translucency, which is required for the classic indicators. + return new SegmentedIndicators(dropArea); +#endif + + switch (s_dropIndicatorType) { + case DropIndicatorType::Classic: + return new ClassicIndicators(dropArea); + case DropIndicatorType::Segmented: + return new SegmentedIndicators(dropArea); + case DropIndicatorType::None: + return new NullIndicators(dropArea); + } + + return new ClassicIndicators(dropArea); +} + +QWidgetOrQuick *DefaultWidgetFactory_qtwidgets::createRubberBand(QWidgetOrQuick *parent) const +{ + return new QRubberBand(QRubberBand::Rectangle, parent); +} + +View *DefaultWidgetFactory_qtwidgets::createSideBar(Controllers::SideBar *controller, + Controllers::MainWindow *parent) const +{ + return new Views::SideBar_qtwidgets(controller, parent->view()->asQWidget()); +} + +QAbstractButton *DefaultWidgetFactory_qtwidgets::createTitleBarButton(QWidget *parent, TitleBarButtonType type) const +{ + if (!parent) { + qWarning() << Q_FUNC_INFO << "Parent not provided"; + return nullptr; + } + + auto button = new Views::Button(parent); + button->setIcon(iconForButtonType(type, parent->devicePixelRatioF())); + + return button; +} + +// iconForButtonType impl is the same for QtQuick and QtWidgets +QIcon DefaultWidgetFactory_qtwidgets::iconForButtonType(TitleBarButtonType type, qreal dpr) const +{ + QString iconName; + switch (type) { + case TitleBarButtonType::AutoHide: + iconName = QStringLiteral("auto-hide"); + break; + case TitleBarButtonType::UnautoHide: + iconName = QStringLiteral("unauto-hide"); + break; + case TitleBarButtonType::Close: + iconName = QStringLiteral("close"); + break; + case TitleBarButtonType::Minimize: + iconName = QStringLiteral("min"); + break; + case TitleBarButtonType::Maximize: + iconName = QStringLiteral("max"); + break; + case TitleBarButtonType::Normal: + // We're using the same icon as dock/float + iconName = QStringLiteral("dock-float"); + break; + case TitleBarButtonType::Float: + iconName = QStringLiteral("dock-float"); + break; + } + + if (iconName.isEmpty()) + return {}; + + QIcon icon(QStringLiteral(":/img/%1.png").arg(iconName)); + if (!scalingFactorIsSupported(dpr)) + return icon; + + // Not using Qt's sugar syntax, which doesn't support 1.5x anyway when we need it. + // Simply add the high-res files and Qt will pick them when needed + + if (scalingFactorIsSupported(1.5)) + icon.addFile(QStringLiteral(":/img/%1-1.5x.png").arg(iconName)); + + icon.addFile(QStringLiteral(":/img/%1-2x.png").arg(iconName)); + + return icon; +} diff --git a/src/qtwidgets/FrameworkWidgetFactory_qtwidgets.h b/src/qtwidgets/FrameworkWidgetFactory_qtwidgets.h new file mode 100644 index 00000000..ac82c25b --- /dev/null +++ b/src/qtwidgets/FrameworkWidgetFactory_qtwidgets.h @@ -0,0 +1,88 @@ +/* + 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. +*/ + +#ifndef KDDOCKWIDGETS_FRAMEWORKWIDGETFACTORY_QTWIDGETS_H +#define KDDOCKWIDGETS_FRAMEWORKWIDGETFACTORY_QTWIDGETS_H + +#include "FrameworkWidgetFactory.h" + +// clazy:excludeall=ctor-missing-parent-argument + +/** + * @file + * @brief A factory class for allowing the user to customize some internal widgets. + * + * @author Sérgio Martins \ + */ + +QT_BEGIN_NAMESPACE +class QAbstractButton; +QT_END_NAMESPACE + +namespace Layouting { +class Widget; +} + +namespace KDDockWidgets { + +class DropIndicatorOverlayInterface; +class DropArea; + +namespace Controllers { +class Separator; +class TabBar; +class SideBar; +class FloatingWindow; +class MainWindow; +} + +/** + * @brief The FrameworkWidgetFactory that's used if none is specified. + */ +class DOCKS_EXPORT DefaultWidgetFactory_qtwidgets : public FrameworkWidgetFactory +{ + Q_OBJECT +public: + DefaultWidgetFactory_qtwidgets() = default; + ~DefaultWidgetFactory_qtwidgets() override; + View *createMainWindow(Controllers::MainWindow *, View *, Qt::WindowFlags) const override; + View *createDockWidget(Controllers::DockWidget *, Qt::WindowFlags) const override; + View *createFrame(Controllers::Frame *, View *parent, FrameOptions options = FrameOption_None) const override; + View *createTitleBar(Controllers::TitleBar *, Controllers::Frame *) const override; + View *createTitleBar(Controllers::TitleBar *, Controllers::FloatingWindow *) const override; + View *createTabWidget(Controllers::Stack *, Controllers::Frame *parent) const override; + View *createTabBar(Controllers::TabBar *tabBar, View *parent) const override; + View *createSeparator(Controllers::Separator *, View *parent = nullptr) const override; + View *createFloatingWindow(Controllers::FloatingWindow *, + Controllers::MainWindow *parent = nullptr, + Qt::WindowFlags windowFlags = {}) const override; + DropIndicatorOverlayInterface *createDropIndicatorOverlay(DropArea *) const override; + QWidgetOrQuick *createRubberBand(QWidgetOrQuick *parent) const override; + View *createSideBar(Controllers::SideBar *, Controllers::MainWindow *parent) const override; + +#ifdef KDDOCKWIDGETS_QTWIDGETS + QAbstractButton *createTitleBarButton(QWidget *parent, TitleBarButtonType) const override; +#else + Q_INVOKABLE QUrl titleBarFilename() const override; + QUrl dockwidgetFilename() const override; + QUrl frameFilename() const override; + QUrl floatingWindowFilename() const override; +#endif + + QIcon iconForButtonType(TitleBarButtonType type, qreal dpr) const override; + +private: + Q_DISABLE_COPY(DefaultWidgetFactory_qtwidgets) +}; + +} + +#endif