From e1ca7cf53f47034063d0571d648bf9b97e39149b Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 10 Jul 2023 17:27:47 +0200 Subject: [PATCH] Utils: Let registered aspects know about their containers Will help to set up macroexpanders with less boiler plate. Change-Id: I521af3dc9d49524cf855e82eecc0132d1bcc40db Reviewed-by: Christian Stenger --- src/libs/utils/aspects.cpp | 10 +++++++++- src/libs/utils/aspects.h | 2 ++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/libs/utils/aspects.cpp b/src/libs/utils/aspects.cpp index bc3f4beb233..32c7a2ec6c6 100644 --- a/src/libs/utils/aspects.cpp +++ b/src/libs/utils/aspects.cpp @@ -52,6 +52,8 @@ namespace Internal { class BaseAspectPrivate { public: + explicit BaseAspectPrivate(AspectContainer *container) : m_container(container) {} + Id m_id; std::function m_toSettings; std::function m_fromSettings; @@ -64,6 +66,7 @@ public: QIcon m_icon; QPointer m_label; // Owned by configuration widget QPointer m_action; // Owned by us. + AspectContainer *m_container = nullptr; // Not owned by us. bool m_visible = true; bool m_enabled = true; @@ -106,7 +109,7 @@ public: If \a container is non-null, the aspect is made known to the container. */ BaseAspect::BaseAspect(AspectContainer *container) - : d(new Internal::BaseAspectPrivate) + : d(new Internal::BaseAspectPrivate(container)) { if (container) container->registerAspect(this); @@ -438,6 +441,11 @@ QAction *BaseAspect::action() return d->m_action; } +AspectContainer *BaseAspect::container() const +{ + return d->m_container; +} + /*! Adds the visual representation of this aspect to the layout with the specified \a parent using a layout builder. diff --git a/src/libs/utils/aspects.h b/src/libs/utils/aspects.h index f6faac16b4c..c23375e1132 100644 --- a/src/libs/utils/aspects.h +++ b/src/libs/utils/aspects.h @@ -94,6 +94,8 @@ public: virtual QAction *action(); + AspectContainer *container() const; + virtual void fromMap(const QVariantMap &map); virtual void toMap(QVariantMap &map) const; virtual void toActiveMap(QVariantMap &map) const { toMap(map); }