From 2252b22b10eab8a0d853674db34f431121e40d34 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 1 Mar 2021 16:33:57 +0100 Subject: [PATCH] Utils: Introduce a few AspectContainer convenience functions Change-Id: I89832ab1971d263e4db9b8be5e89d581fd598b41 Reviewed-by: David Schulz --- src/libs/utils/aspects.cpp | 34 ++++++++++++++++++++++++++++++++++ src/libs/utils/aspects.h | 6 ++++++ 2 files changed, 40 insertions(+) diff --git a/src/libs/utils/aspects.cpp b/src/libs/utils/aspects.cpp index 0892a3af0f2..319e80b3cd8 100644 --- a/src/libs/utils/aspects.cpp +++ b/src/libs/utils/aspects.cpp @@ -2078,6 +2078,40 @@ void AspectContainer::finish() aspect->finish(); } +void AspectContainer::reset() +{ + for (BaseAspect *aspect : qAsConst(d->m_items)) + aspect->setValueQuietly(aspect->defaultValue()); +} + +void AspectContainer::fromMap(const QString &prefix, const QVariantMap &map) +{ + for (BaseAspect *aspect : qAsConst(d->m_items)) + aspect->setValue(map.value(prefix + aspect->settingsKey())); +} + +void AspectContainer::toMap(const QString &prefix, QVariantMap &map) const +{ + for (BaseAspect *aspect : qAsConst(d->m_items)) + map.insert(prefix + aspect->settingsKey(), aspect->value()); +} + +bool AspectContainer::equals(const AspectContainer &other) const +{ + // FIXME: Expensive, but should not really be needed in a fully aspectified world. + QVariantMap thisMap, thatMap; + toMap(thisMap); + other.toMap(thatMap); + return thisMap == thatMap; +} + +void AspectContainer::copyFrom(const AspectContainer &other) +{ + QVariantMap map; + other.toMap(map); + fromMap(map); +} + void AspectContainer::forEachAspect(const std::function &run) const { for (BaseAspect *aspect : qAsConst(d->m_items)) { diff --git a/src/libs/utils/aspects.h b/src/libs/utils/aspects.h index 3f7db9ebf52..747fcbf4916 100644 --- a/src/libs/utils/aspects.h +++ b/src/libs/utils/aspects.h @@ -533,6 +533,12 @@ public: void cancel() override; void finish() override; + void reset(); + void fromMap(const QString &prefix, const QVariantMap &map); + void toMap(const QString &prefix, QVariantMap &map) const; + bool equals(const AspectContainer &other) const; + void copyFrom(const AspectContainer &other); + void forEachAspect(const std::function &run) const; private: