From 44d7cc05889de5ae5a39d3f62faa32f469be6e83 Mon Sep 17 00:00:00 2001 From: Sergio Martins Date: Tue, 12 Jan 2021 22:42:38 +0000 Subject: [PATCH] Add FloatingWindow::allDockWidgetsHave(option) and the any* variant --- dev-qtwidgets.code-workspace | 3 ++- src/private/FloatingWindow.cpp | 16 ++++++++++++++++ src/private/FloatingWindow_p.h | 6 ++++++ src/private/Frame.cpp | 18 ++++++++++++++++++ src/private/Frame_p.h | 7 +++++++ 5 files changed, 49 insertions(+), 1 deletion(-) diff --git a/dev-qtwidgets.code-workspace b/dev-qtwidgets.code-workspace index 7efffeaa..91b87f6d 100644 --- a/dev-qtwidgets.code-workspace +++ b/dev-qtwidgets.code-workspace @@ -11,7 +11,8 @@ }, "C_Cpp.default.compileCommands" : "${workspaceFolder}/build-dev-qtwidgets/compile_commands.json", "C_Cpp.default.cStandard": "c17", - "C_Cpp.default.intelliSenseMode": "gcc-x64" + "C_Cpp.default.intelliSenseMode": "gcc-x64", + "files.trimTrailingWhitespace": true }, "tasks": { "version": "2.0.0", diff --git a/src/private/FloatingWindow.cpp b/src/private/FloatingWindow.cpp index 36679963..4ab3f82c 100644 --- a/src/private/FloatingWindow.cpp +++ b/src/private/FloatingWindow.cpp @@ -501,3 +501,19 @@ bool FloatingWindow::event(QEvent *ev) return QWidgetAdapter::event(ev); } + +bool FloatingWindow::allDockWidgetsHave(DockWidgetBase::Option option) const +{ + const Frame::List frames = this->frames(); + return std::all_of(frames.begin(), frames.end(), [option] (Frame *frame) { + return frame->allDockWidgetsHave(option); + }); +} + +bool FloatingWindow::anyDockWidgetsHave(DockWidgetBase::Option option) const +{ + const Frame::List frames = this->frames(); + return std::any_of(frames.begin(), frames.end(), [option] (Frame *frame) { + return frame->anyDockWidgetsHave(option); + }); +} diff --git a/src/private/FloatingWindow_p.h b/src/private/FloatingWindow_p.h index a7e420d4..b893195a 100644 --- a/src/private/FloatingWindow_p.h +++ b/src/private/FloatingWindow_p.h @@ -131,6 +131,12 @@ public: */ QRect dragRect() const; + ///@brief Returns whether all dock widgets have the specified option set + bool allDockWidgetsHave(DockWidgetBase::Option) const; + + ///@brief Returns whether at least one dock widget has the specified option set + bool anyDockWidgetsHave(DockWidgetBase::Option) const; + Q_SIGNALS: void activatedChanged(); void numFramesChanged(); diff --git a/src/private/Frame.cpp b/src/private/Frame.cpp index 758e6d17..a46567d0 100644 --- a/src/private/Frame.cpp +++ b/src/private/Frame.cpp @@ -720,3 +720,21 @@ TabWidget *Frame::tabWidget() const { return m_tabWidget; } + +///@brief Returns whether all dock widgets have the specified option set +bool Frame::allDockWidgetsHave(DockWidgetBase::Option option) const +{ + const DockWidgetBase::List docks = dockWidgets(); + return std::all_of(docks.cbegin(), docks.cend(), [option] (DockWidgetBase *dw) { + return dw->options() & option; + }); +} + +///@brief Returns whether at least one dock widget has the specified option set +bool Frame::anyDockWidgetsHave(DockWidgetBase::Option option) const +{ + const DockWidgetBase::List docks = dockWidgets(); + return std::any_of(docks.cbegin(), docks.cend(), [option] (DockWidgetBase *dw) { + return dw->options() & option; + }); +} diff --git a/src/private/Frame_p.h b/src/private/Frame_p.h index 8532fa89..3f590a48 100644 --- a/src/private/Frame_p.h +++ b/src/private/Frame_p.h @@ -22,6 +22,7 @@ #include "kddockwidgets/docks_export.h" #include "kddockwidgets/QWidgetAdapter.h" #include "kddockwidgets/FocusScope.h" +#include "kddockwidgets/DockWidgetBase.h" #include "../LayoutSaver_p.h" #include "multisplitter/Widget.h" @@ -239,6 +240,12 @@ public: */ virtual QRect dragRect() const; + ///@brief Returns whether all dock widgets have the specified option set + bool allDockWidgetsHave(DockWidgetBase::Option) const; + + ///@brief Returns whether at least one dock widget has the specified option set + bool anyDockWidgetsHave(DockWidgetBase::Option) const; + Q_SIGNALS: void currentDockWidgetChanged(KDDockWidgets::DockWidgetBase *); void numDockWidgetsChanged();