diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/kcoreconfigskeleton.cpp | 45 | ||||
| -rw-r--r-- | src/core/kcoreconfigskeleton.h | 37 | ||||
| -rw-r--r-- | src/core/kcoreconfigskeleton_p.h | 4 | 
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 | 
