aboutsummaryrefslogtreecommitdiff
path: root/src/core/kcoreconfigskeleton.cpp
diff options
context:
space:
mode:
authorKevin Ottens <kevin.ottens@enioka.com>2019-11-12 11:41:01 +0100
committerKevin Ottens <kevin.ottens@enioka.com>2019-11-12 13:33:19 +0100
commitd63955cfe547b00aaf5e4c8bf669f50f45f484a9 (patch)
tree31fd51f152cac8c3e7e25ed8f2d992e575e4cac9 /src/core/kcoreconfigskeleton.cpp
parent44cfa0631d25a1b558640e6122fa6b755bb8c7ad (diff)
downloadkconfig-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.cpp63
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,