From 6b82af5990a006dbff851f95c000badb10297f55 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 31 Mar 2021 12:37:34 +0200 Subject: [PATCH] Utils: Make AspectContainer a QObject ... and add a 'void applied()' signal. I actually wanted to avoid that, but it seems to be a recurring pattern of usage to do something on top of plain apply for all children, like triggering IVersionControl::configurationChanged in the VCS plugins. Change-Id: Ib64c3147c6ba30b178237e51a3a377a291c550f2 Reviewed-by: Christian Kandeler --- src/libs/utils/aspects.cpp | 6 ++++-- src/libs/utils/aspects.h | 9 +++++++-- src/plugins/docker/dockersettings.h | 2 +- src/plugins/qmakeprojectmanager/qmakesettings.h | 2 +- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/libs/utils/aspects.cpp b/src/libs/utils/aspects.cpp index 4c1403c2d06..07918f5e8b4 100644 --- a/src/libs/utils/aspects.cpp +++ b/src/libs/utils/aspects.cpp @@ -2089,8 +2089,8 @@ public: } // Internal -AspectContainer::AspectContainer() - : d(new Internal::AspectContainerPrivate) +AspectContainer::AspectContainer(QObject *parent) + : QObject(parent), d(new Internal::AspectContainerPrivate) {} /*! @@ -2192,6 +2192,8 @@ void AspectContainer::apply() { for (BaseAspect *aspect : qAsConst(d->m_items)) aspect->apply(); + + emit applied(); } void AspectContainer::cancel() diff --git a/src/libs/utils/aspects.h b/src/libs/utils/aspects.h index 0ed2c3b4796..7ee6f54bfc6 100644 --- a/src/libs/utils/aspects.h +++ b/src/libs/utils/aspects.h @@ -483,10 +483,12 @@ private: std::unique_ptr d; }; -class QTCREATOR_UTILS_EXPORT AspectContainer +class QTCREATOR_UTILS_EXPORT AspectContainer : public QObject { + Q_OBJECT + public: - AspectContainer(); + AspectContainer(QObject *parent = nullptr); ~AspectContainer(); AspectContainer(const AspectContainer &) = delete; @@ -547,6 +549,9 @@ public: const_iterator begin() const; const_iterator end() const; +signals: + void applied(); + private: std::unique_ptr d; }; diff --git a/src/plugins/docker/dockersettings.h b/src/plugins/docker/dockersettings.h index 8a0df8f4adb..42470427cb0 100644 --- a/src/plugins/docker/dockersettings.h +++ b/src/plugins/docker/dockersettings.h @@ -33,7 +33,7 @@ namespace Docker { namespace Internal { -class DockerSettings : public QObject, public Utils::AspectContainer +class DockerSettings : public Utils::AspectContainer { public: DockerSettings(); diff --git a/src/plugins/qmakeprojectmanager/qmakesettings.h b/src/plugins/qmakeprojectmanager/qmakesettings.h index c131472fba6..6287dc57049 100644 --- a/src/plugins/qmakeprojectmanager/qmakesettings.h +++ b/src/plugins/qmakeprojectmanager/qmakesettings.h @@ -32,7 +32,7 @@ namespace QmakeProjectManager { namespace Internal { -class QmakeSettings : public QObject, public Utils::AspectContainer +class QmakeSettings : public Utils::AspectContainer { Q_OBJECT