diff options
author | Kevin Ottens <kevin.ottens@enioka.com> | 2019-10-10 13:25:44 +0200 |
---|---|---|
committer | Kevin Ottens <kevin.ottens@enioka.com> | 2019-10-10 13:26:21 +0200 |
commit | 4c3d3751968422ff5cba56b5da2036a1bceba314 (patch) | |
tree | 50ab07c230acd982a94eee7e8c750c2900946578 /src/core/kcoreconfigskeleton.cpp | |
parent | 5fa1a3312ab24908d870ce2a2399695ac98d828d (diff) | |
download | kconfig-4c3d3751968422ff5cba56b5da2036a1bceba314.tar.gz kconfig-4c3d3751968422ff5cba56b5da2036a1bceba314.tar.bz2 |
Add convenience for defaults/dirty states to KCoreConfigSkeleton
Summary:
It allows to verify if all the items of the skeleton are in their
default values or if they hold any value deviating from the latest
loaded values from KConfig.
We didn't really need this during the KCModule/QtWidgets time since we
could write KConfigDialogManager just fine without it. But for use with
QML and aiming at having similar magic in KQuickAddons::ConfigModule
such convenience functions will be needed.
Reviewers: #plasma, #frameworks, dfaure, mart
Subscribers: apol, kossebau, davidedmundson, kde-frameworks-devel
Tags: #frameworks
Differential Revision: https://phabricator.kde.org/D24494
Diffstat (limited to 'src/core/kcoreconfigskeleton.cpp')
-rw-r--r-- | src/core/kcoreconfigskeleton.cpp | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/core/kcoreconfigskeleton.cpp b/src/core/kcoreconfigskeleton.cpp index b3eb0019..34c58ff6 100644 --- a/src/core/kcoreconfigskeleton.cpp +++ b/src/core/kcoreconfigskeleton.cpp @@ -135,11 +135,31 @@ bool KConfigSkeletonItem::isImmutable() const return d->mIsImmutable; } +bool KConfigSkeletonItem::isDefault() const +{ + return d->mIsDefaultImpl(); +} + +bool KConfigSkeletonItem::isSaveNeeded() const +{ + return d->mIsSaveNeededImpl(); +} + void KConfigSkeletonItem::readImmutability(const KConfigGroup &group) { d->mIsImmutable = group.isEntryImmutable(mKey); } +void KConfigSkeletonItem::setIsDefaultImpl(const std::function<bool ()> &impl) +{ + d->mIsDefaultImpl = impl; +} + +void KConfigSkeletonItem::setIsSaveNeededImpl(const std::function<bool ()> &impl) +{ + d->mIsSaveNeededImpl = impl; +} + KCoreConfigSkeleton::ItemString::ItemString(const QString &_group, const QString &_key, QString &reference, const QString &defaultValue, @@ -1091,6 +1111,28 @@ void KCoreConfigSkeleton::read() usrRead(); } +bool KCoreConfigSkeleton::isDefaults() const +{ + KConfigSkeletonItem::List::ConstIterator it; + for (it = d->mItems.constBegin(); it != d->mItems.constEnd(); ++it) { + if (!(*it)->isDefault()) { + return false; + } + } + return true; +} + +bool KCoreConfigSkeleton::isSaveNeeded() const +{ + KConfigSkeletonItem::List::ConstIterator it; + for (it = d->mItems.constBegin(); it != d->mItems.constEnd(); ++it) { + if ((*it)->isSaveNeeded()) { + return true; + } + } + return false; +} + bool KCoreConfigSkeleton::save() { //qDebug(); @@ -1394,6 +1436,9 @@ KConfigCompilerSignallingItem::KConfigCompilerSignallingItem(KConfigSkeletonItem Q_ASSERT(mTargetFunction); Q_ASSERT(mItem); Q_ASSERT(mObject); + + setIsDefaultImpl([this] { return mItem->isDefault(); }); + setIsSaveNeededImpl([this] { return mItem->isSaveNeeded(); }); } KConfigCompilerSignallingItem::~KConfigCompilerSignallingItem() |