forked from qt-creator/qt-creator
Utils: Write Key/Store to settings
We claim that we still store QVariantMap to keep the format unchanged. Change-Id: Ie7b0a83febfeb2cb3cfc9ee42b8423453cf3b1c4 Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
@@ -360,22 +360,21 @@ FilePath PersistentSettingsReader::filePath()
|
||||
static void writeVariantValue(QXmlStreamWriter &w, const Context &ctx,
|
||||
const QVariant &variant, const Key &key = {})
|
||||
{
|
||||
switch (static_cast<int>(variant.type())) {
|
||||
case static_cast<int>(QVariant::StringList):
|
||||
case static_cast<int>(QVariant::List): {
|
||||
static const int storeId = qMetaTypeId<Store>();
|
||||
|
||||
const int variantType = variant.typeId();
|
||||
if (variantType == QMetaType::QStringList || variantType == QMetaType::QVariantList) {
|
||||
w.writeStartElement(ctx.valueListElement);
|
||||
w.writeAttribute(ctx.typeAttribute, QLatin1String(QVariant::typeToName(QVariant::List)));
|
||||
w.writeAttribute(ctx.typeAttribute, "QVariantList");
|
||||
if (!key.isEmpty())
|
||||
w.writeAttribute(ctx.keyAttribute, key);
|
||||
const QList<QVariant> list = variant.toList();
|
||||
for (const QVariant &var : list)
|
||||
writeVariantValue(w, ctx, var);
|
||||
w.writeEndElement();
|
||||
break;
|
||||
}
|
||||
case static_cast<int>(QVariant::Map): {
|
||||
} else if (variantType == storeId || variantType == QMetaType::QVariantMap) {
|
||||
w.writeStartElement(ctx.valueMapElement);
|
||||
w.writeAttribute(ctx.typeAttribute, QLatin1String(QVariant::typeToName(QVariant::Map)));
|
||||
w.writeAttribute(ctx.typeAttribute, "QVariantMap");
|
||||
if (!key.isEmpty())
|
||||
w.writeAttribute(ctx.keyAttribute, key);
|
||||
const Store varMap = storeFromVariant(variant);
|
||||
@@ -383,12 +382,11 @@ static void writeVariantValue(QXmlStreamWriter &w, const Context &ctx,
|
||||
for (Store::const_iterator i = varMap.constBegin(); i != cend; ++i)
|
||||
writeVariantValue(w, ctx, i.value(), i.key());
|
||||
w.writeEndElement();
|
||||
}
|
||||
break;
|
||||
case static_cast<int>(QMetaType::QObjectStar): // ignore QObjects!
|
||||
case static_cast<int>(QMetaType::VoidStar): // ignore void pointers!
|
||||
break;
|
||||
default:
|
||||
} else if (variantType == QMetaType::QObjectStar) {
|
||||
// ignore QObjects
|
||||
} else if (variantType == QMetaType::VoidStar) {
|
||||
// ignore void pointers
|
||||
} else {
|
||||
w.writeStartElement(ctx.valueElement);
|
||||
w.writeAttribute(ctx.typeAttribute, QLatin1String(variant.typeName()));
|
||||
if (!key.isEmpty())
|
||||
@@ -402,7 +400,6 @@ static void writeVariantValue(QXmlStreamWriter &w, const Context &ctx,
|
||||
break;
|
||||
}
|
||||
w.writeEndElement();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -387,7 +387,7 @@ Store VersionUpgrader::renameKeys(const QList<Change> &changes, Store map) const
|
||||
Store::iterator i = map.begin();
|
||||
while (i != map.end()) {
|
||||
QVariant v = i.value();
|
||||
if (v.type() == QVariant::Map)
|
||||
if (Utils::isStore(v))
|
||||
i.value() = variantFromStore(renameKeys(changes, storeFromVariant(v)));
|
||||
|
||||
++i;
|
||||
@@ -717,7 +717,7 @@ static QVariant mergeQVariantMapsRecursion(const Store &mainTree, const Store &s
|
||||
|
||||
QPair<Key, QVariant> kv = mergeResult.value();
|
||||
|
||||
if (kv.second.type() == QVariant::Map) {
|
||||
if (Utils::isStore(kv.second)) {
|
||||
const Key newKeyPrefix = keyPrefix + kv.first + '/';
|
||||
kv.second = mergeQVariantMapsRecursion(mainTree, secondaryTree, newKeyPrefix,
|
||||
storeFromVariant(kv.second),
|
||||
|
@@ -4,6 +4,7 @@
|
||||
#include "store.h"
|
||||
|
||||
#include "algorithm.h"
|
||||
#include "qtcassert.h"
|
||||
|
||||
namespace Utils {
|
||||
|
||||
@@ -24,7 +25,14 @@ QVariant variantFromStore(const Store &store)
|
||||
|
||||
Store storeFromVariant(const QVariant &value)
|
||||
{
|
||||
return value.value<Store>();
|
||||
if (value.typeId() == qMetaTypeId<Store>())
|
||||
return value.value<Store>();
|
||||
|
||||
if (value.typeId() == QMetaType::QVariantMap)
|
||||
return storeFromMap(value.toMap());
|
||||
|
||||
QTC_CHECK(false);
|
||||
return Store();
|
||||
}
|
||||
|
||||
#ifdef QTC_USE_STORE
|
||||
@@ -99,4 +107,10 @@ QVariantMap mapFromStore(const Store &store)
|
||||
#endif
|
||||
}
|
||||
|
||||
bool isStore(const QVariant &value)
|
||||
{
|
||||
const int typeId = value.typeId();
|
||||
return typeId == QMetaType::QVariantMap || typeId == qMetaTypeId<Store>();
|
||||
}
|
||||
|
||||
} // Utils
|
||||
|
@@ -27,6 +27,8 @@ QTCREATOR_UTILS_EXPORT Store storeFromVariant(const QVariant &value);
|
||||
QTCREATOR_UTILS_EXPORT Store storeFromMap(const QVariantMap &map);
|
||||
QTCREATOR_UTILS_EXPORT QVariantMap mapFromStore(const Store &store);
|
||||
|
||||
QTCREATOR_UTILS_EXPORT bool isStore(const QVariant &value);
|
||||
|
||||
} // Utils
|
||||
|
||||
#ifdef QTC_USE_STORE
|
||||
|
Reference in New Issue
Block a user