diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/kcoreconfigskeleton.cpp | 63 | ||||
| -rw-r--r-- | src/core/kcoreconfigskeleton.h | 50 | ||||
| -rw-r--r-- | src/core/kcoreconfigskeleton_p.h | 22 | 
3 files changed, 135 insertions, 0 deletions
| diff --git a/src/core/kcoreconfigskeleton.cpp b/src/core/kcoreconfigskeleton.cpp index df52f587..a2b44fde 100644 --- a/src/core/kcoreconfigskeleton.cpp +++ b/src/core/kcoreconfigskeleton.cpp @@ -183,6 +183,69 @@ void KConfigSkeletonItem::setIsSaveNeededImpl(const std::function<bool ()> &impl      d->mIsSaveNeededImpl = impl;  } +KPropertySkeletonItem::KPropertySkeletonItem(QObject *object, const QByteArray &propertyName, const QVariant &defaultValue) +    : KConfigSkeletonItem(*new KPropertySkeletonItemPrivate(object, propertyName, defaultValue), {}, {}) +{ +    setIsDefaultImpl([this] { +        Q_D(const KPropertySkeletonItem); +        return d->mReference == d->mDefaultValue; +    }); +    setIsSaveNeededImpl([this] { +        Q_D(const KPropertySkeletonItem); +        return d->mReference != d->mLoadedValue; +    }); +} + +QVariant KPropertySkeletonItem::property() const +{ +    Q_D(const KPropertySkeletonItem); +    return d->mReference; +} + +void KPropertySkeletonItem::setProperty(const QVariant &p) +{ +    Q_D(KPropertySkeletonItem); +    d->mReference = p; +} + +bool KPropertySkeletonItem::isEqual(const QVariant &p) const +{ +    Q_D(const KPropertySkeletonItem); +    return d->mReference == p; +} + +void KPropertySkeletonItem::readConfig(KConfig *) +{ +    Q_D(KPropertySkeletonItem); +    d->mReference = d->mObject->property(d->mPropertyName.constData()); +    d->mLoadedValue = d->mReference; +} + +void KPropertySkeletonItem::writeConfig(KConfig *) +{ +    Q_D(KPropertySkeletonItem); +    d->mObject->setProperty(d->mPropertyName.constData(), d->mReference); +    d->mLoadedValue = d->mReference; +} + +void KPropertySkeletonItem::readDefault(KConfig *) +{ +    Q_D(KPropertySkeletonItem); +    d->mReference = d->mConstDefaultValue; +} + +void KPropertySkeletonItem::setDefault() +{ +    Q_D(KPropertySkeletonItem); +    d->mReference = d->mDefaultValue; +} + +void KPropertySkeletonItem::swapDefault() +{ +    Q_D(KPropertySkeletonItem); +    std::swap(d->mReference, d->mDefaultValue); +} +  KCoreConfigSkeleton::ItemString::ItemString(const QString &_group, const QString &_key,          QString &reference,          const QString &defaultValue, diff --git a/src/core/kcoreconfigskeleton.h b/src/core/kcoreconfigskeleton.h index ffb6d6a5..c6e49c63 100644 --- a/src/core/kcoreconfigskeleton.h +++ b/src/core/kcoreconfigskeleton.h @@ -247,6 +247,56 @@ protected:      KConfigSkeletonItemPrivate *const d_ptr;  }; +class KPropertySkeletonItemPrivate; + +/** + * \class KPropertySkeletonItem kcoreconfigskeleton.h <KCoreConfigSkeleton> + * + * @short Class for proxying a QObject property as a preferences setting + * @author Kevin Ottens + * @see KConfigSkeletonItem + * + * This class represents one preferences setting as used by @ref KCoreConfigSkeleton. + * Unlike other @ref KConfigSkeletonItem subclasses, this one won't store the preference + * in KConfig but will use a QObject property as storage. + * You will have to register instances of this class with the function KCoreConfigSkeleton::addItem(). + * + * @since 5.65 + */ +class KCONFIGCORE_EXPORT KPropertySkeletonItem : public KConfigSkeletonItem +{ +    Q_DECLARE_PRIVATE(KPropertySkeletonItem) +public: +    /** +     * Constructor +     * +     * @param object The QObject instance which we'll manage the property of +     * @param propertyName The name of the property in @p object which we'll manage +     * @param defaultValue The default value of the property +     */ +    KPropertySkeletonItem(QObject *object, const QByteArray &propertyName, const QVariant &defaultValue); + +    /** @copydoc KConfigSkeletonItem::property() */ +    QVariant property() const override; +    /** @copydoc KConfigSkeletonItem::setProperty(const QVariant &) */ +    void setProperty(const QVariant &p) override; +    /** @copydoc KConfigSkeletonItem::isEqual(const QVariant &) */ +    bool isEqual(const QVariant &p) const override; + +    /** @copydoc KConfigSkeletonItem::readConfig(KConfig *) */ +    void readConfig(KConfig *) override; +    /** @copydoc KConfigSkeletonItem::writeConfig(KConfig *) */ +    void writeConfig(KConfig *) override; + +    /** @copydoc KConfigSkeletonItem::readDefault(KConfig *) */ +    void readDefault(KConfig *) override; +    /** @copydoc KConfigSkeletonItem::setDefault() */ +    void setDefault() override; +    /** @copydoc KConfigSkeletonItem::swapDefault() */ +    void swapDefault() override; +}; + +  /**   * \class KConfigSkeletonGenericItem kcoreconfigskeleton.h <KConfigSkeletonGenericItem>   */ diff --git a/src/core/kcoreconfigskeleton_p.h b/src/core/kcoreconfigskeleton_p.h index cc997621..19f6f4bb 100644 --- a/src/core/kcoreconfigskeleton_p.h +++ b/src/core/kcoreconfigskeleton_p.h @@ -67,4 +67,26 @@ public:      std::function<bool()> mIsSaveNeededImpl;  }; +class KPropertySkeletonItemPrivate : public KConfigSkeletonItemPrivate +{ +public: +    KPropertySkeletonItemPrivate(QObject *object, const QByteArray &propertyName, const QVariant &defaultValue) +        : KConfigSkeletonItemPrivate() +        , mObject(object) +        , mPropertyName(propertyName) +        , mDefaultValue(defaultValue) +        , mConstDefaultValue(defaultValue) +    { +        mIsImmutable = false; +    } + +    QObject *mObject; +    const QByteArray mPropertyName; +    QVariant mDefaultValue; +    const QVariant mConstDefaultValue; +    QVariant mReference; +    QVariant mLoadedValue; +}; + +  #endif | 
