aboutsummaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/kcoreconfigskeleton.cpp45
-rw-r--r--src/core/kcoreconfigskeleton.h37
-rw-r--r--src/core/kcoreconfigskeleton_p.h4
3 files changed, 86 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()
diff --git a/src/core/kcoreconfigskeleton.h b/src/core/kcoreconfigskeleton.h
index 771d8cc9..6e792efd 100644
--- a/src/core/kcoreconfigskeleton.h
+++ b/src/core/kcoreconfigskeleton.h
@@ -210,6 +210,21 @@ public:
*/
bool isImmutable() const;
+ /**
+ * Indicates if the item is set to its default value.
+ *
+ * @since 5.64
+ */
+ bool isDefault() const;
+
+ /**
+ * Indicates if the item has a different value than the
+ * previously loaded value.
+ *
+ * @since 5.64
+ */
+ bool isSaveNeeded() const;
+
protected:
/**
* sets mIsImmutable to true if mKey in config is immutable
@@ -221,6 +236,11 @@ protected:
QString mKey; ///< The config key for this item
QString mName; ///< The name of this item
+ // HACK: Necessary to avoid introducing new virtuals in KConfigSkeletonItem
+ // KF6: Use proper pure virtuals in KConfigSkeletonItem
+ void setIsDefaultImpl(const std::function<bool()> &impl);
+ void setIsSaveNeededImpl(const std::function<bool()> &impl);
+
private:
KConfigSkeletonItemPrivate *const d;
};
@@ -240,6 +260,8 @@ public:
: KConfigSkeletonItem(_group, _key), mReference(reference),
mDefault(defaultValue), mLoadedValue(defaultValue)
{
+ setIsDefaultImpl([this] { return mReference == mDefault; });
+ setIsSaveNeededImpl([this] { return mReference != mLoadedValue; });
}
/**
@@ -1078,6 +1100,21 @@ public:
void read();
/**
+ * Indicates if all the registered items are set to their default value.
+ *
+ * @since 5.64
+ */
+ bool isDefaults() const;
+
+ /**
+ * Indicates if any registered item has a different value than the
+ * previously loaded value.
+ *
+ * @since 5.64
+ */
+ bool isSaveNeeded() const;
+
+ /**
* Set the config file group for subsequent addItem() calls. It is valid
* until setCurrentGroup() is called with a new argument. Call this before
* you add any items. The default value is "No Group".
diff --git a/src/core/kcoreconfigskeleton_p.h b/src/core/kcoreconfigskeleton_p.h
index 41005c6f..623bfa03 100644
--- a/src/core/kcoreconfigskeleton_p.h
+++ b/src/core/kcoreconfigskeleton_p.h
@@ -60,6 +60,10 @@ public:
QString mLabel; ///< The label for this item
QString mToolTip; ///< The ToolTip text for this item
QString mWhatsThis; ///< The What's This text for this item
+
+ // HACK: Necessary to avoid introducing new virtuals in KConfigSkeletonItem
+ std::function<bool()> mIsDefaultImpl;
+ std::function<bool()> mIsSaveNeededImpl;
};
#endif