diff options
author | hjk <hjk@qt.io> | 2023-06-26 11:02:42 +0200 |
---|---|---|
committer | hjk <hjk@qt.io> | 2023-06-29 11:25:44 +0000 |
commit | 379e7f906e6f1dd8656364f5a2cf4feed2127d0f (patch) | |
tree | 05a457b51212749f5e0622cf79c93b88b8bb8966 /src/plugins/fakevim/fakevimactions.h | |
parent | 900ea82fd1a4a629768b71abaf9117f90b7fd951 (diff) |
Utils: Rework aspect implementation
This avoids some repetition and could be a step towards
having type storage in (or rather accessible from) the base,
so we can have aspects for more complex data (treemodels...)
that are not easily converted to QVariant.
Change-Id: I9797b3d5646195705212db1830d2b415291ac651
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/fakevim/fakevimactions.h')
-rw-r--r-- | src/plugins/fakevim/fakevimactions.h | 58 |
1 files changed, 34 insertions, 24 deletions
diff --git a/src/plugins/fakevim/fakevimactions.h b/src/plugins/fakevim/fakevimactions.h index e3b14b0d47..a3907dc117 100644 --- a/src/plugins/fakevim/fakevimactions.h +++ b/src/plugins/fakevim/fakevimactions.h @@ -19,13 +19,14 @@ namespace FakeVim::Internal { class FvBaseAspect { public: - FvBaseAspect(); - virtual ~FvBaseAspect() {} + FvBaseAspect() = default; + virtual ~FvBaseAspect() = default; + + virtual void setVariantValue(const QVariant &value) = 0; + virtual void setDefaultVariantValue(const QVariant &value) = 0; + virtual QVariant variantValue() const = 0; + virtual QVariant defaultVariantValue() const = 0; - void setValue(const QVariant &value); - QVariant value() const; - void setDefaultValue(const QVariant &value); - QVariant defaultValue() const; void setSettingsKey(const QString &group, const QString &key); QString settingsKey() const; void setCheckable(bool) {} @@ -33,32 +34,41 @@ public: void setToolTip(const QString &) {} private: - QVariant m_value; - QVariant m_defaultValue; QString m_settingsGroup; QString m_settingsKey; }; -class FvBoolAspect : public FvBaseAspect -{ -public: - bool value() const { return FvBaseAspect::value().toBool(); } - bool operator()() const { return value(); } -}; - -class FvIntegerAspect : public FvBaseAspect +template <class ValueType> +class FvTypedAspect : public FvBaseAspect { public: - qint64 value() const { return FvBaseAspect::value().toLongLong(); } - qint64 operator()() const { return value(); } + void setVariantValue(const QVariant &value) override + { + m_value = value.value<ValueType>(); + } + void setDefaultVariantValue(const QVariant &value) override + { + m_defaultValue = value.value<ValueType>(); + } + QVariant variantValue() const override + { + return QVariant::fromValue<ValueType>(m_value); + } + QVariant defaultVariantValue() const override + { + return QVariant::fromValue<ValueType>(m_defaultValue); + } + + ValueType value() const { return m_value; } + ValueType operator()() const { return m_value; } + + ValueType m_value; + ValueType m_defaultValue; }; -class FvStringAspect : public FvBaseAspect -{ -public: - QString value() const { return FvBaseAspect::value().toString(); } - QString operator()() const { return value(); } -}; +using FvBoolAspect = FvTypedAspect<bool>; +using FvIntegerAspect = FvTypedAspect<qint64>; +using FvStringAspect = FvTypedAspect<QString>; class FvAspectContainer : public FvBaseAspect { |