forked from qt-creator/qt-creator
Utils/TextEditor: More use of Store and Key
Change-Id: I2feb47b2e6af7a299912b0c73a0c5d8a0e18a8aa Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
@@ -110,21 +110,21 @@ struct Context // Basic context containing element name string constants.
|
|||||||
|
|
||||||
struct ParseValueStackEntry
|
struct ParseValueStackEntry
|
||||||
{
|
{
|
||||||
explicit ParseValueStackEntry(QVariant::Type t = QVariant::Invalid, const QString &k = QString()) : type(t), key(k) {}
|
explicit ParseValueStackEntry(QVariant::Type t = QVariant::Invalid, const Key &k = {}) : type(t), key(k) {}
|
||||||
explicit ParseValueStackEntry(const QVariant &aSimpleValue, const QString &k);
|
explicit ParseValueStackEntry(const QVariant &aSimpleValue, const Key &k);
|
||||||
|
|
||||||
QVariant value() const;
|
QVariant value() const;
|
||||||
void addChild(const QString &key, const QVariant &v);
|
void addChild(const Key &key, const QVariant &v);
|
||||||
|
|
||||||
QVariant::Type type;
|
QVariant::Type type;
|
||||||
QString key;
|
Key key;
|
||||||
QVariant simpleValue;
|
QVariant simpleValue;
|
||||||
QVariantList listValue;
|
QVariantList listValue;
|
||||||
QVariantMap mapValue;
|
Store mapValue;
|
||||||
};
|
};
|
||||||
|
|
||||||
ParseValueStackEntry::ParseValueStackEntry(const QVariant &aSimpleValue, const QString &k) :
|
ParseValueStackEntry::ParseValueStackEntry(const QVariant &aSimpleValue, const Key &k)
|
||||||
type(aSimpleValue.type()), key(k), simpleValue(aSimpleValue)
|
: type(aSimpleValue.type()), key(k), simpleValue(aSimpleValue)
|
||||||
{
|
{
|
||||||
QTC_ASSERT(simpleValue.isValid(), return);
|
QTC_ASSERT(simpleValue.isValid(), return);
|
||||||
}
|
}
|
||||||
@@ -135,7 +135,7 @@ QVariant ParseValueStackEntry::value() const
|
|||||||
case QVariant::Invalid:
|
case QVariant::Invalid:
|
||||||
return QVariant();
|
return QVariant();
|
||||||
case QVariant::Map:
|
case QVariant::Map:
|
||||||
return QVariant(mapValue);
|
return QVariant::fromValue(mapValue);
|
||||||
case QVariant::List:
|
case QVariant::List:
|
||||||
return QVariant(listValue);
|
return QVariant(listValue);
|
||||||
default:
|
default:
|
||||||
@@ -144,7 +144,7 @@ QVariant ParseValueStackEntry::value() const
|
|||||||
return simpleValue;
|
return simpleValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ParseValueStackEntry::addChild(const QString &key, const QVariant &v)
|
void ParseValueStackEntry::addChild(const Key &key, const QVariant &v)
|
||||||
{
|
{
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case QVariant::Map:
|
case QVariant::Map:
|
||||||
@@ -163,7 +163,7 @@ void ParseValueStackEntry::addChild(const QString &key, const QVariant &v)
|
|||||||
class ParseContext : public Context
|
class ParseContext : public Context
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
QVariantMap parse(const FilePath &file);
|
Store parse(const FilePath &file);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum Element { QtCreatorElement, DataElement, VariableElement,
|
enum Element { QtCreatorElement, DataElement, VariableElement,
|
||||||
@@ -180,11 +180,11 @@ private:
|
|||||||
static QString formatWarning(const QXmlStreamReader &r, const QString &message);
|
static QString formatWarning(const QXmlStreamReader &r, const QString &message);
|
||||||
|
|
||||||
QStack<ParseValueStackEntry> m_valueStack;
|
QStack<ParseValueStackEntry> m_valueStack;
|
||||||
QVariantMap m_result;
|
Store m_result;
|
||||||
QString m_currentVariableName;
|
Key m_currentVariableName;
|
||||||
};
|
};
|
||||||
|
|
||||||
QVariantMap ParseContext::parse(const FilePath &file)
|
Store ParseContext::parse(const FilePath &file)
|
||||||
{
|
{
|
||||||
QXmlStreamReader r(file.fileContents().value_or(QByteArray()));
|
QXmlStreamReader r(file.fileContents().value_or(QByteArray()));
|
||||||
|
|
||||||
@@ -204,7 +204,7 @@ QVariantMap ParseContext::parse(const FilePath &file)
|
|||||||
case QXmlStreamReader::Invalid:
|
case QXmlStreamReader::Invalid:
|
||||||
qWarning("Error reading %s:%d: %s", qPrintable(file.fileName()),
|
qWarning("Error reading %s:%d: %s", qPrintable(file.fileName()),
|
||||||
int(r.lineNumber()), qPrintable(r.errorString()));
|
int(r.lineNumber()), qPrintable(r.errorString()));
|
||||||
return QVariantMap();
|
return Store();
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
} // switch token
|
} // switch token
|
||||||
@@ -224,8 +224,8 @@ bool ParseContext::handleStartElement(QXmlStreamReader &r)
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
const QXmlStreamAttributes attributes = r.attributes();
|
const QXmlStreamAttributes attributes = r.attributes();
|
||||||
const QString key = attributes.hasAttribute(keyAttribute) ?
|
const Key key = attributes.hasAttribute(keyAttribute) ?
|
||||||
attributes.value(keyAttribute).toString() : QString();
|
attributes.value(keyAttribute).toString() : Key();
|
||||||
switch (e) {
|
switch (e) {
|
||||||
case SimpleValueElement: {
|
case SimpleValueElement: {
|
||||||
// This reads away the end element, so, handle end element right here.
|
// This reads away the end element, so, handle end element right here.
|
||||||
@@ -318,14 +318,14 @@ QVariant ParseContext::readSimpleValue(QXmlStreamReader &r, const QXmlStreamAttr
|
|||||||
|
|
||||||
PersistentSettingsReader::PersistentSettingsReader() = default;
|
PersistentSettingsReader::PersistentSettingsReader() = default;
|
||||||
|
|
||||||
QVariant PersistentSettingsReader::restoreValue(const QString &variable, const QVariant &defaultValue) const
|
QVariant PersistentSettingsReader::restoreValue(const Key &variable, const QVariant &defaultValue) const
|
||||||
{
|
{
|
||||||
if (m_valueMap.contains(variable))
|
if (m_valueMap.contains(variable))
|
||||||
return m_valueMap.value(variable);
|
return m_valueMap.value(variable);
|
||||||
return defaultValue;
|
return defaultValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariantMap PersistentSettingsReader::restoreValues() const
|
Store PersistentSettingsReader::restoreValues() const
|
||||||
{
|
{
|
||||||
return m_valueMap;
|
return m_valueMap;
|
||||||
}
|
}
|
||||||
@@ -352,13 +352,13 @@ FilePath PersistentSettingsReader::filePath()
|
|||||||
\class Utils::PersistentSettingsWriter
|
\class Utils::PersistentSettingsWriter
|
||||||
\inmodule QtCreator
|
\inmodule QtCreator
|
||||||
|
|
||||||
\brief The PersistentSettingsWriter class serializes a QVariantMap of
|
\brief The PersistentSettingsWriter class serializes a Store of
|
||||||
arbitrary, nested data structures to an XML file.
|
arbitrary, nested data structures to an XML file.
|
||||||
\sa Utils::PersistentSettingsReader
|
\sa Utils::PersistentSettingsReader
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void writeVariantValue(QXmlStreamWriter &w, const Context &ctx,
|
static void writeVariantValue(QXmlStreamWriter &w, const Context &ctx,
|
||||||
const QVariant &variant, const QString &key = QString())
|
const QVariant &variant, const Key &key = {})
|
||||||
{
|
{
|
||||||
switch (static_cast<int>(variant.type())) {
|
switch (static_cast<int>(variant.type())) {
|
||||||
case static_cast<int>(QVariant::StringList):
|
case static_cast<int>(QVariant::StringList):
|
||||||
@@ -378,9 +378,9 @@ static void writeVariantValue(QXmlStreamWriter &w, const Context &ctx,
|
|||||||
w.writeAttribute(ctx.typeAttribute, QLatin1String(QVariant::typeToName(QVariant::Map)));
|
w.writeAttribute(ctx.typeAttribute, QLatin1String(QVariant::typeToName(QVariant::Map)));
|
||||||
if (!key.isEmpty())
|
if (!key.isEmpty())
|
||||||
w.writeAttribute(ctx.keyAttribute, key);
|
w.writeAttribute(ctx.keyAttribute, key);
|
||||||
const QVariantMap varMap = variant.toMap();
|
const Store varMap = variant.value<Store>();
|
||||||
const QVariantMap::const_iterator cend = varMap.constEnd();
|
const Store::const_iterator cend = varMap.constEnd();
|
||||||
for (QVariantMap::const_iterator i = varMap.constBegin(); i != cend; ++i)
|
for (Store::const_iterator i = varMap.constBegin(); i != cend; ++i)
|
||||||
writeVariantValue(w, ctx, i.value(), i.key());
|
writeVariantValue(w, ctx, i.value(), i.key());
|
||||||
w.writeEndElement();
|
w.writeEndElement();
|
||||||
}
|
}
|
||||||
@@ -410,7 +410,7 @@ PersistentSettingsWriter::PersistentSettingsWriter(const FilePath &fileName, con
|
|||||||
m_fileName(fileName), m_docType(docType)
|
m_fileName(fileName), m_docType(docType)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
bool PersistentSettingsWriter::save(const QVariantMap &data, QString *errorString) const
|
bool PersistentSettingsWriter::save(const Store &data, QString *errorString) const
|
||||||
{
|
{
|
||||||
if (data == m_savedData)
|
if (data == m_savedData)
|
||||||
return true;
|
return true;
|
||||||
@@ -418,7 +418,7 @@ bool PersistentSettingsWriter::save(const QVariantMap &data, QString *errorStrin
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef QT_GUI_LIB
|
#ifdef QT_GUI_LIB
|
||||||
bool PersistentSettingsWriter::save(const QVariantMap &data, QWidget *parent) const
|
bool PersistentSettingsWriter::save(const Store &data, QWidget *parent) const
|
||||||
{
|
{
|
||||||
QString errorString;
|
QString errorString;
|
||||||
const bool success = save(data, &errorString);
|
const bool success = save(data, &errorString);
|
||||||
@@ -432,12 +432,12 @@ FilePath PersistentSettingsWriter::fileName() const
|
|||||||
{ return m_fileName; }
|
{ return m_fileName; }
|
||||||
|
|
||||||
//** * @brief Set contents of file (e.g. from data read from it). */
|
//** * @brief Set contents of file (e.g. from data read from it). */
|
||||||
void PersistentSettingsWriter::setContents(const QVariantMap &data)
|
void PersistentSettingsWriter::setContents(const Store &data)
|
||||||
{
|
{
|
||||||
m_savedData = data;
|
m_savedData = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PersistentSettingsWriter::write(const QVariantMap &data, QString *errorString) const
|
bool PersistentSettingsWriter::write(const Store &data, QString *errorString) const
|
||||||
{
|
{
|
||||||
m_fileName.parentDir().ensureWritableDir();
|
m_fileName.parentDir().ensureWritableDir();
|
||||||
FileSaver saver(m_fileName, QIODevice::Text);
|
FileSaver saver(m_fileName, QIODevice::Text);
|
||||||
@@ -453,8 +453,8 @@ bool PersistentSettingsWriter::write(const QVariantMap &data, QString *errorStri
|
|||||||
QCoreApplication::applicationVersion(),
|
QCoreApplication::applicationVersion(),
|
||||||
QDateTime::currentDateTime().toString(Qt::ISODate)));
|
QDateTime::currentDateTime().toString(Qt::ISODate)));
|
||||||
w.writeStartElement(ctx.qtCreatorElement);
|
w.writeStartElement(ctx.qtCreatorElement);
|
||||||
const QVariantMap::const_iterator cend = data.constEnd();
|
const Store::const_iterator cend = data.constEnd();
|
||||||
for (QVariantMap::const_iterator it = data.constBegin(); it != cend; ++it) {
|
for (Store::const_iterator it = data.constBegin(); it != cend; ++it) {
|
||||||
w.writeStartElement(ctx.dataElement);
|
w.writeStartElement(ctx.dataElement);
|
||||||
w.writeTextElement(ctx.variableElement, it.key());
|
w.writeTextElement(ctx.variableElement, it.key());
|
||||||
writeVariantValue(w, ctx, it.value());
|
writeVariantValue(w, ctx, it.value());
|
||||||
|
@@ -6,6 +6,7 @@
|
|||||||
#include "utils_global.h"
|
#include "utils_global.h"
|
||||||
|
|
||||||
#include "filepath.h"
|
#include "filepath.h"
|
||||||
|
#include "store.h"
|
||||||
|
|
||||||
#include <QVariant>
|
#include <QVariant>
|
||||||
|
|
||||||
@@ -19,13 +20,13 @@ class QTCREATOR_UTILS_EXPORT PersistentSettingsReader
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PersistentSettingsReader();
|
PersistentSettingsReader();
|
||||||
QVariant restoreValue(const QString &variable, const QVariant &defaultValue = QVariant()) const;
|
QVariant restoreValue(const Key &variable, const QVariant &defaultValue = {}) const;
|
||||||
QVariantMap restoreValues() const;
|
Store restoreValues() const;
|
||||||
bool load(const FilePath &fileName);
|
bool load(const FilePath &fileName);
|
||||||
FilePath filePath();
|
FilePath filePath();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QMap<QString, QVariant> m_valueMap;
|
Store m_valueMap;
|
||||||
FilePath m_filePath;
|
FilePath m_filePath;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -34,21 +35,21 @@ class QTCREATOR_UTILS_EXPORT PersistentSettingsWriter
|
|||||||
public:
|
public:
|
||||||
PersistentSettingsWriter(const FilePath &fileName, const QString &docType);
|
PersistentSettingsWriter(const FilePath &fileName, const QString &docType);
|
||||||
|
|
||||||
bool save(const QVariantMap &data, QString *errorString) const;
|
bool save(const Store &data, QString *errorString) const;
|
||||||
#ifdef QT_GUI_LIB
|
#ifdef QT_GUI_LIB
|
||||||
bool save(const QVariantMap &data, QWidget *parent) const;
|
bool save(const Store &data, QWidget *parent) const;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
FilePath fileName() const;
|
FilePath fileName() const;
|
||||||
|
|
||||||
void setContents(const QVariantMap &data);
|
void setContents(const Store &data);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool write(const QVariantMap &data, QString *errorString) const;
|
bool write(const Store &data, QString *errorString) const;
|
||||||
|
|
||||||
const FilePath m_fileName;
|
const FilePath m_fileName;
|
||||||
const QString m_docType;
|
const QString m_docType;
|
||||||
mutable QMap<QString, QVariant> m_savedData;
|
mutable Store m_savedData;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Utils
|
} // namespace Utils
|
||||||
|
@@ -46,9 +46,9 @@ SettingsAccessor::~SettingsAccessor() = default;
|
|||||||
/*!
|
/*!
|
||||||
* Restore settings from disk and report any issues in a message box centered on \a parent.
|
* Restore settings from disk and report any issues in a message box centered on \a parent.
|
||||||
*/
|
*/
|
||||||
QVariantMap SettingsAccessor::restoreSettings(QWidget *parent) const
|
Store SettingsAccessor::restoreSettings(QWidget *parent) const
|
||||||
{
|
{
|
||||||
QTC_ASSERT(!m_baseFilePath.isEmpty(), return QVariantMap());
|
QTC_ASSERT(!m_baseFilePath.isEmpty(), return Store());
|
||||||
|
|
||||||
return restoreSettings(m_baseFilePath, parent);
|
return restoreSettings(m_baseFilePath, parent);
|
||||||
}
|
}
|
||||||
@@ -56,7 +56,7 @@ QVariantMap SettingsAccessor::restoreSettings(QWidget *parent) const
|
|||||||
/*!
|
/*!
|
||||||
* Save \a data to disk and report any issues in a message box centered on \a parent.
|
* Save \a data to disk and report any issues in a message box centered on \a parent.
|
||||||
*/
|
*/
|
||||||
bool SettingsAccessor::saveSettings(const QVariantMap &data, QWidget *parent) const
|
bool SettingsAccessor::saveSettings(const Store &data, QWidget *parent) const
|
||||||
{
|
{
|
||||||
QTC_CHECK(!m_docType.isEmpty());
|
QTC_CHECK(!m_docType.isEmpty());
|
||||||
QTC_CHECK(!m_applicationDisplayName.isEmpty());
|
QTC_CHECK(!m_applicationDisplayName.isEmpty());
|
||||||
@@ -83,14 +83,14 @@ SettingsAccessor::RestoreData SettingsAccessor::readData(const FilePath &path, Q
|
|||||||
* Store the \a data in \a path on disk. Do all the necessary preprocessing of the data.
|
* Store the \a data in \a path on disk. Do all the necessary preprocessing of the data.
|
||||||
*/
|
*/
|
||||||
std::optional<SettingsAccessor::Issue> SettingsAccessor::writeData(const FilePath &path,
|
std::optional<SettingsAccessor::Issue> SettingsAccessor::writeData(const FilePath &path,
|
||||||
const QVariantMap &data,
|
const Store &data,
|
||||||
QWidget *parent) const
|
QWidget *parent) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(parent)
|
Q_UNUSED(parent)
|
||||||
return writeFile(path, prepareToWriteSettings(data));
|
return writeFile(path, prepareToWriteSettings(data));
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariantMap SettingsAccessor::restoreSettings(const FilePath &settingsPath, QWidget *parent) const
|
Store SettingsAccessor::restoreSettings(const FilePath &settingsPath, QWidget *parent) const
|
||||||
{
|
{
|
||||||
QTC_CHECK(!m_docType.isEmpty());
|
QTC_CHECK(!m_docType.isEmpty());
|
||||||
QTC_CHECK(!m_applicationDisplayName.isEmpty());
|
QTC_CHECK(!m_applicationDisplayName.isEmpty());
|
||||||
@@ -99,7 +99,7 @@ QVariantMap SettingsAccessor::restoreSettings(const FilePath &settingsPath, QWid
|
|||||||
|
|
||||||
const ProceedInfo pi = result.hasIssue() ? reportIssues(result.issue.value(), result.path, parent)
|
const ProceedInfo pi = result.hasIssue() ? reportIssues(result.issue.value(), result.path, parent)
|
||||||
: ProceedInfo::Continue;
|
: ProceedInfo::Continue;
|
||||||
return pi == ProceedInfo::DiscardAndContinue ? QVariantMap() : result.data;
|
return pi == ProceedInfo::DiscardAndContinue ? Store() : result.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -116,7 +116,7 @@ SettingsAccessor::RestoreData SettingsAccessor::readFile(const FilePath &path) c
|
|||||||
.arg(path.toUserOutput()), Issue::Type::ERROR));
|
.arg(path.toUserOutput()), Issue::Type::ERROR));
|
||||||
}
|
}
|
||||||
|
|
||||||
const QVariantMap data = reader.restoreValues();
|
const Store data = reader.restoreValues();
|
||||||
if (!m_readOnly && path == m_baseFilePath) {
|
if (!m_readOnly && path == m_baseFilePath) {
|
||||||
if (!m_writer)
|
if (!m_writer)
|
||||||
m_writer = std::make_unique<PersistentSettingsWriter>(m_baseFilePath, m_docType);
|
m_writer = std::make_unique<PersistentSettingsWriter>(m_baseFilePath, m_docType);
|
||||||
@@ -132,7 +132,7 @@ SettingsAccessor::RestoreData SettingsAccessor::readFile(const FilePath &path) c
|
|||||||
* This method does not do *any* processing of the file contents.
|
* This method does not do *any* processing of the file contents.
|
||||||
*/
|
*/
|
||||||
std::optional<SettingsAccessor::Issue> SettingsAccessor::writeFile(const FilePath &path,
|
std::optional<SettingsAccessor::Issue> SettingsAccessor::writeFile(const FilePath &path,
|
||||||
const QVariantMap &data) const
|
const Store &data) const
|
||||||
{
|
{
|
||||||
if (data.isEmpty()) {
|
if (data.isEmpty()) {
|
||||||
return Issue(Tr::tr("Failed to Write File"),
|
return Issue(Tr::tr("Failed to Write File"),
|
||||||
@@ -175,7 +175,7 @@ SettingsAccessor::reportIssues(const Issue &issue, const FilePath &path, QWidget
|
|||||||
/*!
|
/*!
|
||||||
* This method is called right after reading data from disk and modifies \a data.
|
* This method is called right after reading data from disk and modifies \a data.
|
||||||
*/
|
*/
|
||||||
QVariantMap SettingsAccessor::preprocessReadSettings(const QVariantMap &data) const
|
Store SettingsAccessor::preprocessReadSettings(const Store &data) const
|
||||||
{
|
{
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
@@ -183,7 +183,7 @@ QVariantMap SettingsAccessor::preprocessReadSettings(const QVariantMap &data) co
|
|||||||
/*!
|
/*!
|
||||||
* This method is called right before writing data to disk and modifies \a data.
|
* This method is called right before writing data to disk and modifies \a data.
|
||||||
*/
|
*/
|
||||||
QVariantMap SettingsAccessor::prepareToWriteSettings(const QVariantMap &data) const
|
Store SettingsAccessor::prepareToWriteSettings(const Store &data) const
|
||||||
{
|
{
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
@@ -212,9 +212,9 @@ int BackUpStrategy::compare(const SettingsAccessor::RestoreData &data1,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<FilePath> BackUpStrategy::backupName(const QVariantMap &oldData,
|
std::optional<FilePath> BackUpStrategy::backupName(const Store &oldData,
|
||||||
const FilePath &path,
|
const FilePath &path,
|
||||||
const QVariantMap &data) const
|
const Store &data) const
|
||||||
{
|
{
|
||||||
if (oldData == data)
|
if (oldData == data)
|
||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
@@ -230,7 +230,7 @@ BackingUpSettingsAccessor::readData(const FilePath &path, QWidget *parent) const
|
|||||||
{
|
{
|
||||||
const FilePaths fileList = readFileCandidates(path);
|
const FilePaths fileList = readFileCandidates(path);
|
||||||
if (fileList.isEmpty()) // No settings found at all.
|
if (fileList.isEmpty()) // No settings found at all.
|
||||||
return RestoreData(path, QVariantMap());
|
return RestoreData(path, Store());
|
||||||
|
|
||||||
RestoreData result = bestReadFileData(fileList, parent);
|
RestoreData result = bestReadFileData(fileList, parent);
|
||||||
if (result.path.isEmpty())
|
if (result.path.isEmpty())
|
||||||
@@ -253,7 +253,7 @@ BackingUpSettingsAccessor::readData(const FilePath &path, QWidget *parent) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::optional<SettingsAccessor::Issue> BackingUpSettingsAccessor::writeData(const FilePath &path,
|
std::optional<SettingsAccessor::Issue> BackingUpSettingsAccessor::writeData(const FilePath &path,
|
||||||
const QVariantMap &data,
|
const Store &data,
|
||||||
QWidget *parent) const
|
QWidget *parent) const
|
||||||
{
|
{
|
||||||
if (data.isEmpty())
|
if (data.isEmpty())
|
||||||
@@ -290,7 +290,7 @@ BackingUpSettingsAccessor::bestReadFileData(const FilePaths &candidates, QWidget
|
|||||||
return bestMatch;
|
return bestMatch;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BackingUpSettingsAccessor::backupFile(const FilePath &path, const QVariantMap &data,
|
void BackingUpSettingsAccessor::backupFile(const FilePath &path, const Store &data,
|
||||||
QWidget *parent) const
|
QWidget *parent) const
|
||||||
{
|
{
|
||||||
RestoreData oldSettings = SettingsAccessor::readData(path, parent);
|
RestoreData oldSettings = SettingsAccessor::readData(path, parent);
|
||||||
@@ -331,9 +331,9 @@ int VersionedBackUpStrategy::compare(const SettingsAccessor::RestoreData &data1,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<FilePath> VersionedBackUpStrategy::backupName(const QVariantMap &oldData,
|
std::optional<FilePath> VersionedBackUpStrategy::backupName(const Store &oldData,
|
||||||
const FilePath &path,
|
const FilePath &path,
|
||||||
const QVariantMap &data) const
|
const Store &data) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(data)
|
Q_UNUSED(data)
|
||||||
FilePath backupName = path;
|
FilePath backupName = path;
|
||||||
@@ -374,7 +374,7 @@ QString VersionUpgrader::backupExtension() const
|
|||||||
/*!
|
/*!
|
||||||
* Performs a simple renaming of the listed keys in \a changes recursively on \a map.
|
* Performs a simple renaming of the listed keys in \a changes recursively on \a map.
|
||||||
*/
|
*/
|
||||||
QVariantMap VersionUpgrader::renameKeys(const QList<Change> &changes, QVariantMap map) const
|
Store VersionUpgrader::renameKeys(const QList<Change> &changes, Store map) const
|
||||||
{
|
{
|
||||||
for (const Change &change : changes) {
|
for (const Change &change : changes) {
|
||||||
const auto oldSetting = map.constFind(change.first);
|
const auto oldSetting = map.constFind(change.first);
|
||||||
@@ -384,11 +384,11 @@ QVariantMap VersionUpgrader::renameKeys(const QList<Change> &changes, QVariantMa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariantMap::iterator i = map.begin();
|
Store::iterator i = map.begin();
|
||||||
while (i != map.end()) {
|
while (i != map.end()) {
|
||||||
QVariant v = i.value();
|
QVariant v = i.value();
|
||||||
if (v.type() == QVariant::Map)
|
if (v.type() == QVariant::Map)
|
||||||
i.value() = renameKeys(changes, v.toMap());
|
i.value() = renameKeys(changes, v.value<Store>());
|
||||||
|
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
@@ -433,9 +433,9 @@ SettingsAccessor::RestoreData UpgradingSettingsAccessor::readData(const FilePath
|
|||||||
return upgradeSettings(BackingUpSettingsAccessor::readData(path, parent), currentVersion());
|
return upgradeSettings(BackingUpSettingsAccessor::readData(path, parent), currentVersion());
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariantMap UpgradingSettingsAccessor::prepareToWriteSettings(const QVariantMap &data) const
|
Store UpgradingSettingsAccessor::prepareToWriteSettings(const Store &data) const
|
||||||
{
|
{
|
||||||
QVariantMap tmp = BackingUpSettingsAccessor::prepareToWriteSettings(data);
|
Store tmp = BackingUpSettingsAccessor::prepareToWriteSettings(data);
|
||||||
|
|
||||||
setVersionInMap(tmp,currentVersion());
|
setVersionInMap(tmp,currentVersion());
|
||||||
if (!m_id.isEmpty())
|
if (!m_id.isEmpty())
|
||||||
@@ -639,7 +639,7 @@ MergingSettingsAccessor::mergeSettings(const SettingsAccessor::RestoreData &main
|
|||||||
= [this](const SettingsMergeData &global, const SettingsMergeData &local) {
|
= [this](const SettingsMergeData &global, const SettingsMergeData &local) {
|
||||||
return merge(global, local);
|
return merge(global, local);
|
||||||
};
|
};
|
||||||
const QVariantMap result = mergeQVariantMaps(main.data, secondary.data, mergeFunction).toMap();
|
const Store result = mergeQVariantMaps(main.data, secondary.data, mergeFunction).value<Store>();
|
||||||
|
|
||||||
// Update from the base version to Creator's version.
|
// Update from the base version to Creator's version.
|
||||||
return RestoreData(main.path, postprocessMerge(main.data, secondary.data, result));
|
return RestoreData(main.path, postprocessMerge(main.data, secondary.data, result));
|
||||||
@@ -653,9 +653,9 @@ bool MergingSettingsAccessor::isHouseKeepingKey(const QString &key)
|
|||||||
return key == VERSION_KEY || key == ORIGINAL_VERSION_KEY || key == SETTINGS_ID_KEY;
|
return key == VERSION_KEY || key == ORIGINAL_VERSION_KEY || key == SETTINGS_ID_KEY;
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariantMap MergingSettingsAccessor::postprocessMerge(const QVariantMap &main,
|
Store MergingSettingsAccessor::postprocessMerge(const Store &main,
|
||||||
const QVariantMap &secondary,
|
const Store &secondary,
|
||||||
const QVariantMap &result) const
|
const Store &result) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(main)
|
Q_UNUSED(main)
|
||||||
Q_UNUSED(secondary)
|
Q_UNUSED(secondary)
|
||||||
@@ -666,56 +666,56 @@ QVariantMap MergingSettingsAccessor::postprocessMerge(const QVariantMap &main,
|
|||||||
// Helper functions:
|
// Helper functions:
|
||||||
// --------------------------------------------------------------------
|
// --------------------------------------------------------------------
|
||||||
|
|
||||||
int versionFromMap(const QVariantMap &data)
|
int versionFromMap(const Store &data)
|
||||||
{
|
{
|
||||||
return data.value(VERSION_KEY, -1).toInt();
|
return data.value(VERSION_KEY, -1).toInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
int originalVersionFromMap(const QVariantMap &data)
|
int originalVersionFromMap(const Store &data)
|
||||||
{
|
{
|
||||||
return data.value(ORIGINAL_VERSION_KEY, versionFromMap(data)).toInt();
|
return data.value(ORIGINAL_VERSION_KEY, versionFromMap(data)).toInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray settingsIdFromMap(const QVariantMap &data)
|
QByteArray settingsIdFromMap(const Store &data)
|
||||||
{
|
{
|
||||||
return data.value(SETTINGS_ID_KEY).toByteArray();
|
return data.value(SETTINGS_ID_KEY).toByteArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
void setOriginalVersionInMap(QVariantMap &data, int version)
|
void setOriginalVersionInMap(Store &data, int version)
|
||||||
{
|
{
|
||||||
data.insert(ORIGINAL_VERSION_KEY, version);
|
data.insert(ORIGINAL_VERSION_KEY, version);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setVersionInMap(QVariantMap &data, int version)
|
void setVersionInMap(Store &data, int version)
|
||||||
{
|
{
|
||||||
data.insert(VERSION_KEY, version);
|
data.insert(VERSION_KEY, version);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setSettingsIdInMap(QVariantMap &data, const QByteArray &id)
|
void setSettingsIdInMap(Store &data, const QByteArray &id)
|
||||||
{
|
{
|
||||||
data.insert(SETTINGS_ID_KEY, id);
|
data.insert(SETTINGS_ID_KEY, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
static QVariant mergeQVariantMapsRecursion(const QVariantMap &mainTree, const QVariantMap &secondaryTree,
|
static QVariant mergeQVariantMapsRecursion(const Store &mainTree, const Store &secondaryTree,
|
||||||
const QString &keyPrefix,
|
const QString &keyPrefix,
|
||||||
const QVariantMap &mainSubtree, const QVariantMap &secondarySubtree,
|
const Store &mainSubtree, const Store &secondarySubtree,
|
||||||
const SettingsMergeFunction &merge)
|
const SettingsMergeFunction &merge)
|
||||||
{
|
{
|
||||||
QVariantMap result;
|
Store result;
|
||||||
const QList<QString> allKeys = filteredUnique(mainSubtree.keys() + secondarySubtree.keys());
|
const QList<Key> allKeys = filteredUnique(mainSubtree.keys() + secondarySubtree.keys());
|
||||||
|
|
||||||
MergingSettingsAccessor::SettingsMergeData global = {mainTree, secondaryTree, QString()};
|
MergingSettingsAccessor::SettingsMergeData global = {mainTree, secondaryTree, Key()};
|
||||||
MergingSettingsAccessor::SettingsMergeData local = {mainSubtree, secondarySubtree, QString()};
|
MergingSettingsAccessor::SettingsMergeData local = {mainSubtree, secondarySubtree, Key()};
|
||||||
|
|
||||||
for (const QString &key : allKeys) {
|
for (const Key &key : allKeys) {
|
||||||
global.key = keyPrefix + key;
|
global.key = keyPrefix + key;
|
||||||
local.key = key;
|
local.key = key;
|
||||||
|
|
||||||
std::optional<QPair<QString, QVariant>> mergeResult = merge(global, local);
|
std::optional<QPair<Key, QVariant>> mergeResult = merge(global, local);
|
||||||
if (!mergeResult)
|
if (!mergeResult)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
QPair<QString, QVariant> kv = mergeResult.value();
|
QPair<Key, QVariant> kv = mergeResult.value();
|
||||||
|
|
||||||
if (kv.second.type() == QVariant::Map) {
|
if (kv.second.type() == QVariant::Map) {
|
||||||
const QString newKeyPrefix = keyPrefix + kv.first + '/';
|
const QString newKeyPrefix = keyPrefix + kv.first + '/';
|
||||||
@@ -727,10 +727,10 @@ static QVariant mergeQVariantMapsRecursion(const QVariantMap &mainTree, const QV
|
|||||||
result.insert(kv.first, kv.second);
|
result.insert(kv.first, kv.second);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return QVariant::fromValue(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant mergeQVariantMaps(const QVariantMap &mainTree, const QVariantMap &secondaryTree,
|
QVariant mergeQVariantMaps(const Store &mainTree, const Store &secondaryTree,
|
||||||
const SettingsMergeFunction &merge)
|
const SettingsMergeFunction &merge)
|
||||||
{
|
{
|
||||||
return mergeQVariantMapsRecursion(mainTree, secondaryTree, QString(),
|
return mergeQVariantMapsRecursion(mainTree, secondaryTree, QString(),
|
||||||
|
@@ -6,10 +6,10 @@
|
|||||||
#include "utils_global.h"
|
#include "utils_global.h"
|
||||||
|
|
||||||
#include "filepath.h"
|
#include "filepath.h"
|
||||||
|
#include "store.h"
|
||||||
|
|
||||||
#include <QHash>
|
#include <QHash>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QVariantMap>
|
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
@@ -20,25 +20,25 @@ namespace Utils {
|
|||||||
// Helper:
|
// Helper:
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
QTCREATOR_UTILS_EXPORT int versionFromMap(const QVariantMap &data);
|
QTCREATOR_UTILS_EXPORT int versionFromMap(const Store &data);
|
||||||
QTCREATOR_UTILS_EXPORT int originalVersionFromMap(const QVariantMap &data);
|
QTCREATOR_UTILS_EXPORT int originalVersionFromMap(const Store &data);
|
||||||
QTCREATOR_UTILS_EXPORT QByteArray settingsIdFromMap(const QVariantMap &data);
|
QTCREATOR_UTILS_EXPORT QByteArray settingsIdFromMap(const Store &data);
|
||||||
|
|
||||||
QTCREATOR_UTILS_EXPORT void setVersionInMap(QVariantMap &data, int version);
|
QTCREATOR_UTILS_EXPORT void setVersionInMap(Store &data, int version);
|
||||||
QTCREATOR_UTILS_EXPORT void setOriginalVersionInMap(QVariantMap &data, int version);
|
QTCREATOR_UTILS_EXPORT void setOriginalVersionInMap(Store &data, int version);
|
||||||
QTCREATOR_UTILS_EXPORT void setSettingsIdInMap(QVariantMap &data, const QByteArray &id);
|
QTCREATOR_UTILS_EXPORT void setSettingsIdInMap(Store &data, const QByteArray &id);
|
||||||
|
|
||||||
// --------------------------------------------------------------------
|
// --------------------------------------------------------------------
|
||||||
// Helpers:
|
// Helpers:
|
||||||
// --------------------------------------------------------------------
|
// --------------------------------------------------------------------
|
||||||
|
|
||||||
QTCREATOR_UTILS_EXPORT int versionFromMap(const QVariantMap &data);
|
QTCREATOR_UTILS_EXPORT int versionFromMap(const Store &data);
|
||||||
QTCREATOR_UTILS_EXPORT int originalVersionFromMap(const QVariantMap &data);
|
QTCREATOR_UTILS_EXPORT int originalVersionFromMap(const Store &data);
|
||||||
QTCREATOR_UTILS_EXPORT QByteArray settingsIdFromMap(const QVariantMap &data);
|
QTCREATOR_UTILS_EXPORT QByteArray settingsIdFromMap(const Store &data);
|
||||||
|
|
||||||
QTCREATOR_UTILS_EXPORT void setVersionInMap(QVariantMap &data, int version);
|
QTCREATOR_UTILS_EXPORT void setVersionInMap(Store &data, int version);
|
||||||
QTCREATOR_UTILS_EXPORT void setOriginalVersionInMap(QVariantMap &data, int version);
|
QTCREATOR_UTILS_EXPORT void setOriginalVersionInMap(Store &data, int version);
|
||||||
QTCREATOR_UTILS_EXPORT void setSettingsIdInMap(QVariantMap &data, const QByteArray &id);
|
QTCREATOR_UTILS_EXPORT void setSettingsIdInMap(Store &data, const QByteArray &id);
|
||||||
|
|
||||||
class PersistentSettingsWriter;
|
class PersistentSettingsWriter;
|
||||||
using SettingsMergeResult = std::optional<QPair<QString, QVariant>>;
|
using SettingsMergeResult = std::optional<QPair<QString, QVariant>>;
|
||||||
@@ -76,7 +76,7 @@ public:
|
|||||||
class RestoreData {
|
class RestoreData {
|
||||||
public:
|
public:
|
||||||
RestoreData() = default;
|
RestoreData() = default;
|
||||||
RestoreData(const FilePath &path, const QVariantMap &data) : path{path}, data{data} { }
|
RestoreData(const FilePath &path, const Store &data) : path{path}, data{data} { }
|
||||||
RestoreData(const QString &title, const QString &message, const Issue::Type type) :
|
RestoreData(const QString &title, const QString &message, const Issue::Type type) :
|
||||||
RestoreData(Issue(title, message, type))
|
RestoreData(Issue(title, message, type))
|
||||||
{ }
|
{ }
|
||||||
@@ -87,12 +87,12 @@ public:
|
|||||||
bool hasWarning() const { return hasIssue() && issue.value().type == Issue::Type::WARNING; }
|
bool hasWarning() const { return hasIssue() && issue.value().type == Issue::Type::WARNING; }
|
||||||
|
|
||||||
FilePath path;
|
FilePath path;
|
||||||
QVariantMap data;
|
Store data;
|
||||||
std::optional<Issue> issue;
|
std::optional<Issue> issue;
|
||||||
};
|
};
|
||||||
|
|
||||||
QVariantMap restoreSettings(QWidget *parent) const;
|
Store restoreSettings(QWidget *parent) const;
|
||||||
bool saveSettings(const QVariantMap &data, QWidget *parent) const;
|
bool saveSettings(const Store &data, QWidget *parent) const;
|
||||||
|
|
||||||
void setBaseFilePath(const FilePath &baseFilePath) { m_baseFilePath = baseFilePath; }
|
void setBaseFilePath(const FilePath &baseFilePath) { m_baseFilePath = baseFilePath; }
|
||||||
void setReadOnly() { m_readOnly = true; }
|
void setReadOnly() { m_readOnly = true; }
|
||||||
@@ -100,7 +100,7 @@ public:
|
|||||||
|
|
||||||
virtual RestoreData readData(const FilePath &path, QWidget *parent) const;
|
virtual RestoreData readData(const FilePath &path, QWidget *parent) const;
|
||||||
virtual std::optional<Issue> writeData(const FilePath &path,
|
virtual std::optional<Issue> writeData(const FilePath &path,
|
||||||
const QVariantMap &data,
|
const Store &data,
|
||||||
QWidget *parent) const;
|
QWidget *parent) const;
|
||||||
|
|
||||||
void setDocType(const QString &docType) { m_docType = docType; }
|
void setDocType(const QString &docType) { m_docType = docType; }
|
||||||
@@ -108,14 +108,14 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Report errors:
|
// Report errors:
|
||||||
QVariantMap restoreSettings(const FilePath &settingsPath, QWidget *parent) const;
|
Store restoreSettings(const FilePath &settingsPath, QWidget *parent) const;
|
||||||
static ProceedInfo reportIssues(const Issue &issue, const FilePath &path, QWidget *parent);
|
static ProceedInfo reportIssues(const Issue &issue, const FilePath &path, QWidget *parent);
|
||||||
|
|
||||||
virtual QVariantMap preprocessReadSettings(const QVariantMap &data) const;
|
virtual Store preprocessReadSettings(const Store &data) const;
|
||||||
virtual QVariantMap prepareToWriteSettings(const QVariantMap &data) const;
|
virtual Store prepareToWriteSettings(const Store &data) const;
|
||||||
|
|
||||||
virtual RestoreData readFile(const FilePath &path) const;
|
virtual RestoreData readFile(const FilePath &path) const;
|
||||||
virtual std::optional<Issue> writeFile(const FilePath &path, const QVariantMap &data) const;
|
virtual std::optional<Issue> writeFile(const FilePath &path, const Store &data) const;
|
||||||
|
|
||||||
QString m_docType;
|
QString m_docType;
|
||||||
QString m_applicationDisplayName;
|
QString m_applicationDisplayName;
|
||||||
@@ -141,9 +141,9 @@ public:
|
|||||||
virtual int compare(const SettingsAccessor::RestoreData &data1,
|
virtual int compare(const SettingsAccessor::RestoreData &data1,
|
||||||
const SettingsAccessor::RestoreData &data2) const;
|
const SettingsAccessor::RestoreData &data2) const;
|
||||||
|
|
||||||
virtual std::optional<FilePath> backupName(const QVariantMap &oldData,
|
virtual std::optional<FilePath> backupName(const Store &oldData,
|
||||||
const FilePath &path,
|
const FilePath &path,
|
||||||
const QVariantMap &data) const;
|
const Store &data) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
class QTCREATOR_UTILS_EXPORT BackingUpSettingsAccessor : public SettingsAccessor
|
class QTCREATOR_UTILS_EXPORT BackingUpSettingsAccessor : public SettingsAccessor
|
||||||
@@ -153,7 +153,7 @@ public:
|
|||||||
|
|
||||||
RestoreData readData(const FilePath &path, QWidget *parent) const override;
|
RestoreData readData(const FilePath &path, QWidget *parent) const override;
|
||||||
std::optional<Issue> writeData(const FilePath &path,
|
std::optional<Issue> writeData(const FilePath &path,
|
||||||
const QVariantMap &data,
|
const Store &data,
|
||||||
QWidget *parent) const override;
|
QWidget *parent) const override;
|
||||||
|
|
||||||
BackUpStrategy *strategy() const { return m_strategy.get(); }
|
BackUpStrategy *strategy() const { return m_strategy.get(); }
|
||||||
@@ -162,7 +162,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
FilePaths readFileCandidates(const FilePath &path) const;
|
FilePaths readFileCandidates(const FilePath &path) const;
|
||||||
RestoreData bestReadFileData(const FilePaths &candidates, QWidget *parent) const;
|
RestoreData bestReadFileData(const FilePaths &candidates, QWidget *parent) const;
|
||||||
void backupFile(const FilePath &path, const QVariantMap &data, QWidget *parent) const;
|
void backupFile(const FilePath &path, const Store &data, QWidget *parent) const;
|
||||||
|
|
||||||
std::unique_ptr<BackUpStrategy> m_strategy;
|
std::unique_ptr<BackUpStrategy> m_strategy;
|
||||||
};
|
};
|
||||||
@@ -183,9 +183,9 @@ public:
|
|||||||
int compare(const SettingsAccessor::RestoreData &data1,
|
int compare(const SettingsAccessor::RestoreData &data1,
|
||||||
const SettingsAccessor::RestoreData &data2) const override;
|
const SettingsAccessor::RestoreData &data2) const override;
|
||||||
|
|
||||||
std::optional<FilePath> backupName(const QVariantMap &oldData,
|
std::optional<FilePath> backupName(const Store &oldData,
|
||||||
const FilePath &path,
|
const FilePath &path,
|
||||||
const QVariantMap &data) const override;
|
const Store &data) const override;
|
||||||
|
|
||||||
const UpgradingSettingsAccessor *accessor() const { return m_accessor; }
|
const UpgradingSettingsAccessor *accessor() const { return m_accessor; }
|
||||||
|
|
||||||
@@ -193,7 +193,7 @@ protected:
|
|||||||
const UpgradingSettingsAccessor *m_accessor = nullptr;
|
const UpgradingSettingsAccessor *m_accessor = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Handles updating a QVariantMap from version() to version() + 1
|
// Handles updating a Store from version() to version() + 1
|
||||||
class QTCREATOR_UTILS_EXPORT VersionUpgrader
|
class QTCREATOR_UTILS_EXPORT VersionUpgrader
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -203,11 +203,11 @@ public:
|
|||||||
int version() const;
|
int version() const;
|
||||||
QString backupExtension() const;
|
QString backupExtension() const;
|
||||||
|
|
||||||
virtual QVariantMap upgrade(const QVariantMap &data) = 0;
|
virtual Store upgrade(const Store &data) = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
using Change = QPair<QLatin1String, QLatin1String>;
|
using Change = QPair<QLatin1String, QLatin1String>;
|
||||||
QVariantMap renameKeys(const QList<Change> &changes, QVariantMap map) const;
|
Store renameKeys(const QList<Change> &changes, Store map) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const int m_version;
|
const int m_version;
|
||||||
@@ -233,7 +233,7 @@ public:
|
|||||||
RestoreData readData(const FilePath &path, QWidget *parent) const override;
|
RestoreData readData(const FilePath &path, QWidget *parent) const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QVariantMap prepareToWriteSettings(const QVariantMap &data) const override;
|
Store prepareToWriteSettings(const Store &data) const override;
|
||||||
|
|
||||||
void setSettingsId(const QByteArray &id) { m_id = id; }
|
void setSettingsId(const QByteArray &id) { m_id = id; }
|
||||||
|
|
||||||
@@ -254,9 +254,9 @@ class QTCREATOR_UTILS_EXPORT MergingSettingsAccessor : public UpgradingSettingsA
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
struct SettingsMergeData {
|
struct SettingsMergeData {
|
||||||
QVariantMap main;
|
Store main;
|
||||||
QVariantMap secondary;
|
Store secondary;
|
||||||
QString key;
|
Key key;
|
||||||
};
|
};
|
||||||
|
|
||||||
MergingSettingsAccessor();
|
MergingSettingsAccessor();
|
||||||
@@ -273,8 +273,8 @@ protected:
|
|||||||
const SettingsMergeData &local) const = 0;
|
const SettingsMergeData &local) const = 0;
|
||||||
static bool isHouseKeepingKey(const QString &key);
|
static bool isHouseKeepingKey(const QString &key);
|
||||||
|
|
||||||
virtual QVariantMap postprocessMerge(const QVariantMap &main, const QVariantMap &secondary,
|
virtual Store postprocessMerge(const Store &main, const Store &secondary,
|
||||||
const QVariantMap &result) const;
|
const Store &result) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<SettingsAccessor> m_secondaryAccessor;
|
std::unique_ptr<SettingsAccessor> m_secondaryAccessor;
|
||||||
@@ -282,7 +282,7 @@ private:
|
|||||||
|
|
||||||
using SettingsMergeFunction = std::function<SettingsMergeResult(const MergingSettingsAccessor::SettingsMergeData &,
|
using SettingsMergeFunction = std::function<SettingsMergeResult(const MergingSettingsAccessor::SettingsMergeData &,
|
||||||
const MergingSettingsAccessor::SettingsMergeData &)>;
|
const MergingSettingsAccessor::SettingsMergeData &)>;
|
||||||
QTCREATOR_UTILS_EXPORT QVariant mergeQVariantMaps(const QVariantMap &mainTree, const QVariantMap &secondaryTree,
|
QTCREATOR_UTILS_EXPORT QVariant mergeQVariantMaps(const Store &mainTree, const Store &secondaryTree,
|
||||||
const SettingsMergeFunction &merge);
|
const SettingsMergeFunction &merge);
|
||||||
|
|
||||||
} // namespace Utils
|
} // namespace Utils
|
||||||
|
@@ -208,7 +208,7 @@ ICodeStylePreferences *CodeStylePool::loadCodeStyle(const FilePath &fileName)
|
|||||||
if (m.contains(QLatin1String(codeStyleDataKey))) {
|
if (m.contains(QLatin1String(codeStyleDataKey))) {
|
||||||
const QByteArray id = fileName.completeBaseName().toUtf8();
|
const QByteArray id = fileName.completeBaseName().toUtf8();
|
||||||
const QString displayName = reader.restoreValue(QLatin1String(displayNameKey)).toString();
|
const QString displayName = reader.restoreValue(QLatin1String(displayNameKey)).toString();
|
||||||
const QVariantMap map = reader.restoreValue(QLatin1String(codeStyleDataKey)).toMap();
|
const Store map = reader.restoreValue(codeStyleDataKey).value<Store>();
|
||||||
if (d->m_factory) {
|
if (d->m_factory) {
|
||||||
codeStyle = d->m_factory->createCodeStyle();
|
codeStyle = d->m_factory->createCodeStyle();
|
||||||
codeStyle->setId(id);
|
codeStyle->setId(id);
|
||||||
@@ -242,10 +242,10 @@ void CodeStylePool::saveCodeStyle(ICodeStylePreferences *codeStyle) const
|
|||||||
|
|
||||||
void CodeStylePool::exportCodeStyle(const FilePath &fileName, ICodeStylePreferences *codeStyle) const
|
void CodeStylePool::exportCodeStyle(const FilePath &fileName, ICodeStylePreferences *codeStyle) const
|
||||||
{
|
{
|
||||||
const QVariantMap map = codeStyle->toMap();
|
const Store map = codeStyle->toMap();
|
||||||
const QVariantMap tmp = {
|
const Store tmp = {
|
||||||
{displayNameKey, codeStyle->displayName()},
|
{displayNameKey, codeStyle->displayName()},
|
||||||
{codeStyleDataKey, map}
|
{codeStyleDataKey, QVariant::fromValue(map)}
|
||||||
};
|
};
|
||||||
PersistentSettingsWriter writer(fileName, QLatin1String(codeStyleDocKey));
|
PersistentSettingsWriter writer(fileName, QLatin1String(codeStyleDocKey));
|
||||||
writer.save(tmp, Core::ICore::dialogParent());
|
writer.save(tmp, Core::ICore::dialogParent());
|
||||||
|
@@ -38,7 +38,7 @@ void ExtraEncodingSettings::fromSettings(const Key &category)
|
|||||||
Utils::fromSettings(kGroupPostfix, Key(), Core::ICore::settings(), this);
|
Utils::fromSettings(kGroupPostfix, Key(), Core::ICore::settings(), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariantMap ExtraEncodingSettings::toMap() const
|
Store ExtraEncodingSettings::toMap() const
|
||||||
{
|
{
|
||||||
return {
|
return {
|
||||||
{kUtf8BomBehaviorKey, m_utf8BomSetting}
|
{kUtf8BomBehaviorKey, m_utf8BomSetting}
|
||||||
|
@@ -15,7 +15,7 @@ public:
|
|||||||
ExtraEncodingSettings();
|
ExtraEncodingSettings();
|
||||||
~ExtraEncodingSettings();
|
~ExtraEncodingSettings();
|
||||||
|
|
||||||
void toSettings(const QString &category) const;
|
void toSettings(const Utils::Key &category) const;
|
||||||
void fromSettings(const Utils::Key &category);
|
void fromSettings(const Utils::Key &category);
|
||||||
|
|
||||||
Utils::Store toMap() const;
|
Utils::Store toMap() const;
|
||||||
|
@@ -65,7 +65,7 @@ public:
|
|||||||
void setCurrentDelegate(const QByteArray &id);
|
void setCurrentDelegate(const QByteArray &id);
|
||||||
|
|
||||||
void setSettingsSuffix(const Utils::Key &suffix);
|
void setSettingsSuffix(const Utils::Key &suffix);
|
||||||
void toSettings(const QString &category) const;
|
void toSettings(const Utils::Key &category) const;
|
||||||
void fromSettings(const Utils::Key &category);
|
void fromSettings(const Utils::Key &category);
|
||||||
|
|
||||||
// make below 2 protected?
|
// make below 2 protected?
|
||||||
|
Reference in New Issue
Block a user