aboutsummaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/kcoreconfigskeleton.cpp74
-rw-r--r--src/core/kcoreconfigskeleton.h51
2 files changed, 125 insertions, 0 deletions
diff --git a/src/core/kcoreconfigskeleton.cpp b/src/core/kcoreconfigskeleton.cpp
index d9b95b4b..98d9cdcc 100644
--- a/src/core/kcoreconfigskeleton.cpp
+++ b/src/core/kcoreconfigskeleton.cpp
@@ -1339,3 +1339,77 @@ KConfigSkeletonItem *KCoreConfigSkeleton::findItem(const QString &name) const
return d->mItemDict.value(name);
}
+KConfigCompilerSignallingItem::KConfigCompilerSignallingItem(KConfigSkeletonItem* item, QObject* object,
+ KConfigCompilerSignallingItem::NotifyFunction targetFunction, quint64 userData)
+ : KConfigSkeletonItem(item->group(), item->key()), mItem(item), mTargetFunction(targetFunction),
+ mObject(object), mUserData(userData)
+{
+ Q_ASSERT(mTargetFunction);
+ Q_ASSERT(mItem);
+ Q_ASSERT(mObject);
+}
+
+KConfigCompilerSignallingItem::~KConfigCompilerSignallingItem()
+{
+}
+
+bool KConfigCompilerSignallingItem::isEqual(const QVariant& p) const
+{
+ return mItem->isEqual(p);
+}
+
+QVariant KConfigCompilerSignallingItem::property() const
+{
+ return mItem->property();
+}
+
+void KConfigCompilerSignallingItem::readConfig(KConfig* c)
+{
+ QVariant oldValue = mItem->property();
+ mItem->readConfig(c);
+ //readConfig() changes mIsImmutable, update it here as well
+ KConfigGroup cg(c, mGroup );
+ readImmutability(cg);
+ if (!mItem->isEqual(oldValue)) {
+ invokeNotifyFunction();
+ }
+}
+
+void KConfigCompilerSignallingItem::readDefault(KConfig* c)
+{
+ mItem->readDefault(c);
+ //readDefault() changes mIsImmutable, update it here as well
+ KConfigGroup cg(c, mGroup );
+ readImmutability(cg);
+}
+
+void KConfigCompilerSignallingItem::writeConfig(KConfig* c)
+{
+ mItem->writeConfig(c);
+}
+
+void KConfigCompilerSignallingItem::setDefault()
+{
+ QVariant oldValue = mItem->property();
+ mItem->setDefault();
+ if (!mItem->isEqual(oldValue)) {
+ invokeNotifyFunction();
+ }
+}
+
+void KConfigCompilerSignallingItem::setProperty(const QVariant& p)
+{
+ if (!mItem->isEqual(p)) {
+ mItem->setProperty(p);
+ invokeNotifyFunction();
+ }
+}
+
+void KConfigCompilerSignallingItem::swapDefault()
+{
+ QVariant oldValue = mItem->property();
+ mItem->swapDefault();
+ if (!mItem->isEqual(oldValue)) {
+ invokeNotifyFunction();
+ }
+}
diff --git a/src/core/kcoreconfigskeleton.h b/src/core/kcoreconfigskeleton.h
index c1a15877..9cd07994 100644
--- a/src/core/kcoreconfigskeleton.h
+++ b/src/core/kcoreconfigskeleton.h
@@ -304,6 +304,57 @@ protected:
};
/**
+ * \class KConfigSkeletonChangeNotifyingItem kcoreconfigskeleton.h <KConfigSkeletonChangeNotifyingItem>
+ *
+ * @author Alex Richardson
+ * @see KConfigSkeletonItem
+ *
+ *
+ * This class wraps a @ref KConfigSkeletonItem and invokes a function whenever the value changes.
+ * That function must take one quint64 parameter. Whenever the property value of the wrapped KConfigSkeletonItem
+ * changes this function will be invoked with the stored user data passed in the constructor.
+ * It does not call a function with the new value since this class is designed solely for the kconfig_compiler generated
+ * code and is therefore probably not suited for any other usecases.
+ */
+class KCONFIGCORE_EXPORT KConfigCompilerSignallingItem : public KConfigSkeletonItem
+{
+public:
+ typedef void (QObject::* NotifyFunction)(quint64 arg);
+ /**
+ * Constructor.
+ *
+ * @param item the KConfigSkeletonItem to wrap
+ * @param targetFunction the method to invoke whenever the value of @p item changes
+ * @param object The object on which the method is invoked.
+ * @param userData This data will be passed to @p targetFunction on every property change
+ */
+ KConfigCompilerSignallingItem(KConfigSkeletonItem *item, QObject* object,
+ NotifyFunction targetFunction, quint64 userData);
+ virtual ~KConfigCompilerSignallingItem();
+
+ virtual void readConfig(KConfig *) Q_DECL_OVERRIDE;
+ virtual void writeConfig(KConfig *) Q_DECL_OVERRIDE;
+ virtual void readDefault(KConfig *) Q_DECL_OVERRIDE;
+ virtual void setProperty(const QVariant &p) Q_DECL_OVERRIDE;
+ virtual bool isEqual(const QVariant &p) const Q_DECL_OVERRIDE;
+ virtual QVariant property() const Q_DECL_OVERRIDE;
+ virtual void setDefault() Q_DECL_OVERRIDE;
+ virtual void swapDefault() Q_DECL_OVERRIDE;
+private:
+ inline void invokeNotifyFunction()
+ {
+ // call the pointer to member function using the strange ->* operator
+ (mObject->*mTargetFunction)(mUserData);
+ }
+private:
+ QScopedPointer<KConfigSkeletonItem> mItem;
+ NotifyFunction mTargetFunction;
+ QObject* mObject;
+ quint64 mUserData;
+};
+
+
+/**
* \class KCoreConfigSkeleton kcoreconfigskeleton.h <KCoreConfigSkeleton>
*
* @short Class for handling preferences settings for an application.