diff --git a/src/core/kcoreconfigskeleton.h b/src/core/kcoreconfigskeleton.h --- a/src/core/kcoreconfigskeleton.h +++ b/src/core/kcoreconfigskeleton.h @@ -34,6 +34,7 @@ #include #include #include + class KCoreConfigSkeletonPrivate; class KConfigSkeletonItemPrivate; @@ -81,6 +82,20 @@ */ QString group() const; + /** + * Set config file group bu giving the KConfigGroup. + * Allow the item to be in nested groups. + */ + void setGroup(const KConfigGroup &cg); + + /** + * Return a KConfigGroup, the one provided by setGroup(KConfigGroup) if it's valid, + * or make one from @param config and item's group + * @sa setGroup(const QString &_group) + * @sa setGroup(KConfigGroup cg) + */ + KConfigGroup configGroup(KConfig* config) const; + /** * Set config file key. */ @@ -360,7 +375,7 @@ void writeConfig(KConfig *config) override { if (mReference != mLoadedValue) { // Is this needed? - KConfigGroup cg(config, mGroup); + KConfigGroup cg = configGroup(config); if ((mDefault == mReference) && !cg.hasDefault(mKey)) { cg.revertToDefault(mKey, writeFlags()); } else { @@ -434,6 +449,10 @@ // KF6 TODO - fix this void setWriteFlags(KConfigBase::WriteConfigFlags flags); KConfigBase::WriteConfigFlags writeFlags() const; + void setGroup(const KConfigGroup &cg); + KConfigGroup configGroup(KConfig* config) const; + // END TODO + private: inline void invokeNotifyFunction() { diff --git a/src/core/kcoreconfigskeleton.cpp b/src/core/kcoreconfigskeleton.cpp --- a/src/core/kcoreconfigskeleton.cpp +++ b/src/core/kcoreconfigskeleton.cpp @@ -64,6 +64,21 @@ mGroup = _group; } +void KConfigSkeletonItem::setGroup(const KConfigGroup &cg) +{ + Q_D(KConfigSkeletonItem); + d->mConfigGroup = cg; +} + +KConfigGroup KConfigSkeletonItem::configGroup(KConfig *config) const +{ + Q_D(const KConfigSkeletonItem); + if (d->mConfigGroup.isValid()) { + return d->mConfigGroup; + } + return KConfigGroup(config, mGroup); +} + QString KConfigSkeletonItem::group() const { return mGroup; @@ -258,7 +273,7 @@ void KCoreConfigSkeleton::ItemString::writeConfig(KConfig *config) { if (mReference != mLoadedValue) { // WABA: Is this test needed? - KConfigGroup cg(config, mGroup); + KConfigGroup cg = configGroup(config); if ((mDefault == mReference) && !cg.hasDefault(mKey)) { cg.revertToDefault(mKey, writeFlags()); } else if (mType == Path) { @@ -274,7 +289,7 @@ void KCoreConfigSkeleton::ItemString::readConfig(KConfig *config) { - KConfigGroup cg(config, mGroup); + KConfigGroup cg = configGroup(config); if (mType == Path) { mReference = cg.readPathEntry(mKey, mDefault); @@ -329,7 +344,7 @@ void KCoreConfigSkeleton::ItemUrl::writeConfig(KConfig *config) { if (mReference != mLoadedValue) { // WABA: Is this test needed? - KConfigGroup cg(config, mGroup); + KConfigGroup cg = configGroup(config); if ((mDefault == mReference) && !cg.hasDefault(mKey)) { cg.revertToDefault(mKey, writeFlags()); } else { @@ -341,7 +356,7 @@ void KCoreConfigSkeleton::ItemUrl::readConfig(KConfig *config) { - KConfigGroup cg(config, mGroup); + KConfigGroup cg = configGroup(config); mReference = QUrl(cg.readEntry(mKey, mDefault.toString())); mLoadedValue = mReference; @@ -374,7 +389,7 @@ void KCoreConfigSkeleton::ItemProperty::readConfig(KConfig *config) { - KConfigGroup cg(config, mGroup); + KConfigGroup cg = configGroup(config); mReference = cg.readEntry(mKey, mDefault); mLoadedValue = mReference; @@ -405,7 +420,7 @@ void KCoreConfigSkeleton::ItemBool::readConfig(KConfig *config) { - KConfigGroup cg(config, mGroup); + KConfigGroup cg = configGroup(config); mReference = cg.readEntry(mKey, mDefault); mLoadedValue = mReference; @@ -436,7 +451,7 @@ void KCoreConfigSkeleton::ItemInt::readConfig(KConfig *config) { - KConfigGroup cg(config, mGroup); + KConfigGroup cg = configGroup(config); mReference = cg.readEntry(mKey, mDefault); if (mHasMin) { mReference = qMax(mReference, mMin); @@ -501,7 +516,7 @@ void KCoreConfigSkeleton::ItemLongLong::readConfig(KConfig *config) { - KConfigGroup cg(config, mGroup); + KConfigGroup cg = configGroup(config); mReference = cg.readEntry(mKey, mDefault); if (mHasMin) { mReference = qMax(mReference, mMin); @@ -567,7 +582,7 @@ void KCoreConfigSkeleton::ItemEnum::readConfig(KConfig *config) { - KConfigGroup cg(config, mGroup); + KConfigGroup cg = configGroup(config); if (!cg.hasKey(mKey)) { mReference = mDefault; } else { @@ -593,7 +608,7 @@ void KCoreConfigSkeleton::ItemEnum::writeConfig(KConfig *config) { if (mReference != mLoadedValue) { // WABA: Is this test needed? - KConfigGroup cg(config, mGroup); + KConfigGroup cg = configGroup(config); if ((mDefault == mReference) && !cg.hasDefault(mKey)) { cg.revertToDefault(mKey, writeFlags()); } else if ((mReference >= 0) && (mReference < mChoices.count())) { @@ -625,7 +640,7 @@ void KCoreConfigSkeleton::ItemUInt::readConfig(KConfig *config) { - KConfigGroup cg(config, mGroup); + KConfigGroup cg = configGroup(config); mReference = cg.readEntry(mKey, mDefault); if (mHasMin) { mReference = qMax(mReference, mMin); @@ -690,7 +705,7 @@ void KCoreConfigSkeleton::ItemULongLong::readConfig(KConfig *config) { - KConfigGroup cg(config, mGroup); + KConfigGroup cg = configGroup(config); mReference = cg.readEntry(mKey, mDefault); if (mHasMin) { mReference = qMax(mReference, mMin); @@ -755,7 +770,7 @@ void KCoreConfigSkeleton::ItemDouble::readConfig(KConfig *config) { - KConfigGroup cg(config, mGroup); + KConfigGroup cg = configGroup(config); mReference = cg.readEntry(mKey, mDefault); if (mHasMin) { mReference = qMax(mReference, mMin); @@ -820,7 +835,7 @@ void KCoreConfigSkeleton::ItemRect::readConfig(KConfig *config) { - KConfigGroup cg(config, mGroup); + KConfigGroup cg = configGroup(config); mReference = cg.readEntry(mKey, mDefault); mLoadedValue = mReference; @@ -851,7 +866,7 @@ void KCoreConfigSkeleton::ItemPoint::readConfig(KConfig *config) { - KConfigGroup cg(config, mGroup); + KConfigGroup cg = configGroup(config); mReference = cg.readEntry(mKey, mDefault); mLoadedValue = mReference; @@ -882,7 +897,7 @@ void KCoreConfigSkeleton::ItemSize::readConfig(KConfig *config) { - KConfigGroup cg(config, mGroup); + KConfigGroup cg = configGroup(config); mReference = cg.readEntry(mKey, mDefault); mLoadedValue = mReference; @@ -913,7 +928,7 @@ void KCoreConfigSkeleton::ItemDateTime::readConfig(KConfig *config) { - KConfigGroup cg(config, mGroup); + KConfigGroup cg = configGroup(config); mReference = cg.readEntry(mKey, mDefault); mLoadedValue = mReference; @@ -944,7 +959,7 @@ void KCoreConfigSkeleton::ItemStringList::readConfig(KConfig *config) { - KConfigGroup cg(config, mGroup); + KConfigGroup cg = configGroup(config); if (!cg.hasKey(mKey)) { mReference = mDefault; } else { @@ -979,7 +994,7 @@ void KCoreConfigSkeleton::ItemPathList::readConfig(KConfig *config) { - KConfigGroup cg(config, mGroup); + KConfigGroup cg = configGroup(config); if (!cg.hasKey(mKey)) { mReference = mDefault; } else { @@ -993,7 +1008,7 @@ void KCoreConfigSkeleton::ItemPathList::writeConfig(KConfig *config) { if (mReference != mLoadedValue) { // WABA: Is this test needed? - KConfigGroup cg(config, mGroup); + KConfigGroup cg = configGroup(config); if ((mDefault == mReference) && !cg.hasDefault(mKey)) { cg.revertToDefault(mKey, writeFlags()); } else { @@ -1013,7 +1028,7 @@ void KCoreConfigSkeleton::ItemUrlList::readConfig(KConfig *config) { - KConfigGroup cg(config, mGroup); + KConfigGroup cg = configGroup(config); if (!cg.hasKey(mKey)) { mReference = mDefault; } else { @@ -1035,7 +1050,7 @@ void KCoreConfigSkeleton::ItemUrlList::writeConfig(KConfig *config) { if (mReference != mLoadedValue) { // WABA: Is this test needed? - KConfigGroup cg(config, mGroup); + KConfigGroup cg = configGroup(config); if ((mDefault == mReference) && !cg.hasDefault(mKey)) { cg.revertToDefault(mKey, writeFlags()); } else { @@ -1073,7 +1088,7 @@ void KCoreConfigSkeleton::ItemIntList::readConfig(KConfig *config) { - KConfigGroup cg(config, mGroup); + KConfigGroup cg = configGroup(config); if (!cg.hasKey(mKey)) { mReference = mDefault; } else { @@ -1542,7 +1557,7 @@ QVariant oldValue = mItem->property(); mItem->readConfig(c); //readConfig() changes mIsImmutable, update it here as well - KConfigGroup cg(c, mGroup ); + KConfigGroup cg = configGroup(c); readImmutability(cg); if (!mItem->isEqual(oldValue)) { invokeNotifyFunction(); @@ -1553,7 +1568,7 @@ { mItem->readDefault(c); //readDefault() changes mIsImmutable, update it here as well - KConfigGroup cg(c, mGroup ); + KConfigGroup cg = configGroup(c); readImmutability(cg); } @@ -1597,3 +1612,13 @@ { return mItem->writeFlags(); } + +void KConfigCompilerSignallingItem::setGroup(const KConfigGroup& cg) +{ + mItem->setGroup(cg); +} + +KConfigGroup KConfigCompilerSignallingItem::configGroup(KConfig* config) const +{ + return mItem->configGroup(config); +} diff --git a/src/core/kcoreconfigskeleton_p.h b/src/core/kcoreconfigskeleton_p.h --- a/src/core/kcoreconfigskeleton_p.h +++ b/src/core/kcoreconfigskeleton_p.h @@ -61,6 +61,7 @@ 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 + KConfigGroup mConfigGroup; ///< KConfigGroup, allow to read/write item in nested groups // HACK: Necessary to avoid introducing new virtuals in KConfigSkeletonItem std::function mIsDefaultImpl;