From a5c65ae039b8b5cf0942ac21d396abb2bf89a3dd Mon Sep 17 00:00:00 2001 From: Sergio Martins Date: Sat, 28 Nov 2020 14:06:24 +0000 Subject: [PATCH] Introduce NullIndicators and a Config option for it Mostly for debugging purposes, but also useful if anyone doesn't want to display indicators --- examples/dockwidgets/main.cpp | 5 +++ examples/qtquick/main.cpp | 5 +++ src/CMakeLists.txt | 1 + src/FrameworkWidgetFactory.cpp | 14 ++++++- src/KDDockWidgets.h | 3 +- src/private/DropIndicatorOverlayInterface_p.h | 1 + src/private/indicators/NullIndicators.cpp | 17 ++++++++ src/private/indicators/NullIndicators_p.h | 40 +++++++++++++++++++ 8 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 src/private/indicators/NullIndicators.cpp create mode 100644 src/private/indicators/NullIndicators_p.h diff --git a/examples/dockwidgets/main.cpp b/examples/dockwidgets/main.cpp index bcefd5ad..87932972 100644 --- a/examples/dockwidgets/main.cpp +++ b/examples/dockwidgets/main.cpp @@ -119,10 +119,12 @@ int main(int argc, char **argv) QCommandLineOption noQtTool("no-qttool", QCoreApplication::translate("main", "(internal) Don't use Qt::Tool")); QCommandLineOption noParentForFloating("no-parent-for-floating", QCoreApplication::translate("main", "(internal) FloatingWindows won't have a parent")); QCommandLineOption nativeTitleBar("native-title-bar", QCoreApplication::translate("main", "(internal) FloatingWindows a native title bar")); + QCommandLineOption noDropIndicators("no-drop-indicators", QCoreApplication::translate("main", "(internal) Don't use any drop indicators")); parser.addOption(noQtTool); parser.addOption(noParentForFloating); parser.addOption(nativeTitleBar); + parser.addOption(noDropIndicators); # if defined(Q_OS_WIN) QCommandLineOption noAeroSnap("no-aero-snap", QCoreApplication::translate("main", "(internal) Disable AeroSnap")); @@ -143,6 +145,9 @@ int main(int argc, char **argv) if (parser.isSet(segmentedIndicators)) KDDockWidgets::DefaultWidgetFactory::s_dropIndicatorType = KDDockWidgets::DropIndicatorType::Segmented; + else if (parser.isSet(noDropIndicators)) + KDDockWidgets::DefaultWidgetFactory::s_dropIndicatorType = KDDockWidgets::DropIndicatorType::None; + MainWindowOptions options = MainWindowOption_None; auto flags = KDDockWidgets::Config::self().flags(); diff --git a/examples/qtquick/main.cpp b/examples/qtquick/main.cpp index 739ad121..d171a39d 100644 --- a/examples/qtquick/main.cpp +++ b/examples/qtquick/main.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -33,10 +34,12 @@ int main(int argc, char *argv[]) QCommandLineOption noQtTool("no-qttool", QCoreApplication::translate("main", "(internal) Don't use Qt::Tool")); QCommandLineOption noParentForFloating("no-parent-for-floating", QCoreApplication::translate("main", "(internal) FloatingWindows won't have a parent")); QCommandLineOption nativeTitleBar("native-title-bar", QCoreApplication::translate("main", "(internal) FloatingWindows a native title bar")); + QCommandLineOption noDropIndicators("no-drop-indicators", QCoreApplication::translate("main", "(internal) Don't use any drop indicators")); parser.addOption(noQtTool); parser.addOption(noParentForFloating); parser.addOption(nativeTitleBar); + parser.addOption(noDropIndicators); # if defined(Q_OS_WIN) QCommandLineOption noAeroSnap("no-aero-snap", QCoreApplication::translate("main", "(internal) Disable AeroSnap")); @@ -59,6 +62,8 @@ int main(int argc, char *argv[]) if (parser.isSet(nativeTitleBar)) flags |= KDDockWidgets::Config::Flag_NativeTitleBar; + else if (parser.isSet(noDropIndicators)) + KDDockWidgets::DefaultWidgetFactory::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 08ed0cea..dcecd337 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -45,6 +45,7 @@ set(DOCKSLIBS_SRCS private/Frame.cpp private/DropAreaWithCentralFrame.cpp private/WidgetResizeHandler.cpp + private/indicators/NullIndicators.cpp private/indicators/ClassicIndicators.cpp private/indicators/ClassicIndicatorsWindow.cpp ) diff --git a/src/FrameworkWidgetFactory.cpp b/src/FrameworkWidgetFactory.cpp index 5e4485bf..1d49d24a 100644 --- a/src/FrameworkWidgetFactory.cpp +++ b/src/FrameworkWidgetFactory.cpp @@ -16,10 +16,10 @@ #include "FloatingWindow_p.h" #include "Config.h" #include "indicators/ClassicIndicators_p.h" +#include "indicators/NullIndicators_p.h" #include "Utils_p.h" #ifdef KDDOCKWIDGETS_QTWIDGETS -# include "indicators/ClassicIndicators_p.h" # include "widgets/TabWidget_p.h" # include "widgets/FrameWidget_p.h" # include "widgets/TitleBarWidget_p.h" @@ -101,6 +101,8 @@ DropIndicatorOverlayInterface *DefaultWidgetFactory::createDropIndicatorOverlay( return new ClassicIndicators(dropArea); case DropIndicatorType::Segmented: return new SegmentedIndicators(dropArea); + case DropIndicatorType::None: + return new NullIndicators(dropArea); } return new ClassicIndicators(dropArea); @@ -163,6 +165,16 @@ FloatingWindow *DefaultWidgetFactory::createFloatingWindow(Frame *frame, MainWin 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); } diff --git a/src/KDDockWidgets.h b/src/KDDockWidgets.h index 82469bc2..5dd23df4 100644 --- a/src/KDDockWidgets.h +++ b/src/KDDockWidgets.h @@ -76,7 +76,8 @@ namespace KDDockWidgets enum class DropIndicatorType { Classic, ///< The default - Segmented + Segmented, ///< Segmented indicators + None ///< Don't show any drop indicators while dragging }; ///@internal diff --git a/src/private/DropIndicatorOverlayInterface_p.h b/src/private/DropIndicatorOverlayInterface_p.h index 9c437731..3800fa45 100644 --- a/src/private/DropIndicatorOverlayInterface_p.h +++ b/src/private/DropIndicatorOverlayInterface_p.h @@ -81,6 +81,7 @@ protected: DropArea *const m_dropArea; bool m_draggedWindowIsHovering = false; }; + } #endif diff --git a/src/private/indicators/NullIndicators.cpp b/src/private/indicators/NullIndicators.cpp new file mode 100644 index 00000000..d97106a2 --- /dev/null +++ b/src/private/indicators/NullIndicators.cpp @@ -0,0 +1,17 @@ +/* + This file is part of KDDockWidgets. + + SPDX-FileCopyrightText: 2019-2020 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 "NullIndicators_p.h" + +namespace KDDockWidgets { + + NullIndicators::~NullIndicators() = default; +} diff --git a/src/private/indicators/NullIndicators_p.h b/src/private/indicators/NullIndicators_p.h new file mode 100644 index 00000000..0970fa2c --- /dev/null +++ b/src/private/indicators/NullIndicators_p.h @@ -0,0 +1,40 @@ +/* + This file is part of KDDockWidgets. + + SPDX-FileCopyrightText: 2019-2020 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 KD_NULL_INDICATORS_P_H +#define KD_NULL_INDICATORS_P_H + +#include "../DropIndicatorOverlayInterface_p.h" + +namespace KDDockWidgets { + +/** + * @brief A dummy DropIndicatorOverlayInterface implementation which doesn't do anything. + * + * Used for debugging purposes or if someone doesn't want the drop indicators. + */ +class DOCKS_EXPORT NullIndicators : public DropIndicatorOverlayInterface +{ + Q_OBJECT +public: + using DropIndicatorOverlayInterface::DropIndicatorOverlayInterface; + ~NullIndicators() override; + void hover_impl(QPoint) override {}; + + DropLocation dropLocationForPos(QPoint) const { return {}; } + +protected: + QPoint posForIndicator(DropLocation) const override { return {}; } +}; + +} + +#endif