diff options
author | Kevin Ottens <kevin.ottens@enioka.com> | 2019-11-12 11:41:01 +0100 |
---|---|---|
committer | Kevin Ottens <kevin.ottens@enioka.com> | 2019-11-12 13:33:19 +0100 |
commit | d63955cfe547b00aaf5e4c8bf669f50f45f484a9 (patch) | |
tree | 31fd51f152cac8c3e7e25ed8f2d992e575e4cac9 /src/core/kcoreconfigskeleton.cpp | |
parent | 44cfa0631d25a1b558640e6122fa6b755bb8c7ad (diff) | |
download | kconfig-d63955cfe547b00aaf5e4c8bf669f50f45f484a9.tar.gz kconfig-d63955cfe547b00aaf5e4c8bf669f50f45f484a9.tar.bz2 |
Add KPropertySkeletonItem
Summary:
This new item allows to use a QObject property as a source for a
setting. This is especially convenient for using with KCMs present in
systemsettings which tend to store information outside of KConfig (for
interfacing deeper with the system).
Reviewers: #frameworks, dfaure, davidedmundson, bport, crossi
Subscribers: kde-frameworks-devel
Tags: #frameworks
Differential Revision: https://phabricator.kde.org/D25211
Diffstat (limited to 'src/core/kcoreconfigskeleton.cpp')
-rw-r--r-- | src/core/kcoreconfigskeleton.cpp | 63 |
1 files changed, 63 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, |