diff --git a/src/libs/utils/aspects.cpp b/src/libs/utils/aspects.cpp index 1f039fa22a9..7461b378f24 100644 --- a/src/libs/utils/aspects.cpp +++ b/src/libs/utils/aspects.cpp @@ -2739,5 +2739,4 @@ SettingsGroupNester::~SettingsGroupNester() theSettings->endGroup(); } - } // namespace Utils diff --git a/src/libs/utils/aspects.h b/src/libs/utils/aspects.h index 2e20f75800a..0622c6a66f3 100644 --- a/src/libs/utils/aspects.h +++ b/src/libs/utils/aspects.h @@ -222,7 +222,7 @@ protected: protected: template - bool updateStorage(Value &target, const Value &val) + static bool updateStorage(Value &target, const Value &val) { if (target == val) return false; @@ -354,6 +354,55 @@ protected: ValueType m_buffer{}; }; +template +class FlexibleTypedAspect : public TypedAspect +{ +public: + using Base = TypedAspect; + using Updater = std::function; + + using Base::Base; + + void setInternalToBuffer(const Updater &updater) { m_internalToBuffer = updater; } + void setBufferToInternal(const Updater &updater) { m_bufferToInternal = updater; } + void setInternalToExternal(const Updater &updater) { m_internalToExternal = updater; } + void setExternalToInternal(const Updater &updater) { m_externalToInternal = updater; } + +protected: + bool internalToBuffer() override + { + if (m_internalToBuffer) + return m_internalToBuffer(Base::m_buffer, Base::m_internal); + return Base::internalToBuffer(); + } + + bool bufferToInternal() override + { + if (m_bufferToInternal) + return m_bufferToInternal(Base::m_internal, Base::m_buffer); + return Base::bufferToInternal(); + } + + bool internalToExternal() override + { + if (m_internalToExternal) + return m_internalToExternal(Base::m_external, Base::m_internal); + return Base::internalToExternal(); + } + + bool externalToInternal() override + { + if (m_externalToInternal) + return m_externalToInternal(Base::m_internal, Base::m_external); + return Base::externalToInternal(); + } + + Updater m_internalToBuffer; + Updater m_bufferToInternal; + Updater m_internalToExternal; + Updater m_externalToInternal; +}; + class QTCREATOR_UTILS_EXPORT BoolAspect : public TypedAspect { Q_OBJECT