diff options
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/kcoreconfigskeleton.cpp | 18 | ||||
-rw-r--r-- | src/core/kcoreconfigskeleton.h | 11 | ||||
-rw-r--r-- | src/core/kcoreconfigskeleton_p.h | 1 |
3 files changed, 28 insertions, 2 deletions
diff --git a/src/core/kcoreconfigskeleton.cpp b/src/core/kcoreconfigskeleton.cpp index 5672a850..575ee721 100644 --- a/src/core/kcoreconfigskeleton.cpp +++ b/src/core/kcoreconfigskeleton.cpp @@ -590,6 +590,19 @@ void KCoreConfigSkeleton::ItemLongLong::setMaxValue(qint64 v) mMax = v; } +QString KCoreConfigSkeleton::ItemEnum::valueForChoice(const QString &name) const +{ + // HACK for BC concerns + // TODO KF6: remove KConfigSkeletonItemPrivate::mValues and add a value field to KCoreConfigSkeleton::ItemEnum::Choice + const auto inHash = d_ptr->mValues.value(name); + return !inHash.isEmpty() ? inHash : name; +} + +void KCoreConfigSkeleton::ItemEnum::setValueForChoice(const QString &name, const QString &value) +{ + d_ptr->mValues.insert(name, value); +} + KCoreConfigSkeleton::ItemEnum::ItemEnum(const QString &_group, const QString &_key, qint32 &reference, const QList<Choice> &choices, @@ -609,7 +622,8 @@ void KCoreConfigSkeleton::ItemEnum::readConfig(KConfig *config) QString tmp = cg.readEntry(mKey, QString()).toLower(); for (QList<Choice>::ConstIterator it = mChoices.constBegin(); it != mChoices.constEnd(); ++it, ++i) { - if ((*it).name.toLower() == tmp) { + QString choiceName = (*it).name; + if (valueForChoice(choiceName).toLower() == tmp) { mReference = i; break; } @@ -630,7 +644,7 @@ void KCoreConfigSkeleton::ItemEnum::writeConfig(KConfig *config) if ((mDefault == mReference) && !cg.hasDefault(mKey)) { cg.revertToDefault(mKey, writeFlags()); } else if ((mReference >= 0) && (mReference < mChoices.count())) { - cg.writeEntry(mKey, mChoices[mReference].name, writeFlags()); + cg.writeEntry(mKey, valueForChoice(mChoices.at(mReference).name), writeFlags()); } else { cg.writeEntry(mKey, mReference, writeFlags()); } diff --git a/src/core/kcoreconfigskeleton.h b/src/core/kcoreconfigskeleton.h index 02473fb4..9d84583e 100644 --- a/src/core/kcoreconfigskeleton.h +++ b/src/core/kcoreconfigskeleton.h @@ -802,9 +802,20 @@ public: void writeConfig(KConfig *config) override; // Source compatibility with 4.x + // TODO KF6 remove typedef Choice Choice2; QList<Choice> choices2() const; + /** + * Returns the value for for the choice with the given name + */ + QString valueForChoice(const QString &name) const; + + /** + * Stores a choice value for name + */ + void setValueForChoice(const QString &name, const QString &valueForChoice); + private: QList<Choice> mChoices; }; diff --git a/src/core/kcoreconfigskeleton_p.h b/src/core/kcoreconfigskeleton_p.h index 8ba64db7..fcc9bc13 100644 --- a/src/core/kcoreconfigskeleton_p.h +++ b/src/core/kcoreconfigskeleton_p.h @@ -62,6 +62,7 @@ public: 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 + QHash<QString, QString> mValues; /// The values used for ItemEnum's choices, name -> value (if set) // HACK: Necessary to avoid introducing new virtuals in KConfigSkeletonItem std::function<bool()> mIsDefaultImpl; |