From fb59a39a786789f3e44e9a7165a5920e60694a6a Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Fri, 31 Aug 2012 17:01:15 +0200 Subject: [PATCH] Fix saving of XML configuration files ... when removing settings Change-Id: If85061321082a8cd0e35752f71d2498fd4693dfd Reviewed-by: Daniel Teske --- src/libs/utils/persistentsettings.cpp | 20 ++++++------------- src/libs/utils/persistentsettings.h | 6 ++---- .../devicesupport/devicemanager.cpp | 5 +++-- .../projectexplorer/profilemanager.cpp | 13 ++++++------ src/plugins/projectexplorer/session.cpp | 18 ++++++++--------- .../projectexplorer/settingsaccessor.cpp | 12 ++++++----- .../projectexplorer/toolchainmanager.cpp | 9 +++++---- src/plugins/qtsupport/qtversionmanager.cpp | 8 +++++--- src/plugins/texteditor/codestylepool.cpp | 8 +++++--- 9 files changed, 49 insertions(+), 50 deletions(-) diff --git a/src/libs/utils/persistentsettings.cpp b/src/libs/utils/persistentsettings.cpp index 7134158869a..733ebef39d5 100644 --- a/src/libs/utils/persistentsettings.cpp +++ b/src/libs/utils/persistentsettings.cpp @@ -373,20 +373,12 @@ static void writeVariantValue(QXmlStreamWriter &w, const Context &ctx, } PersistentSettingsWriter::PersistentSettingsWriter(const FileName &fileName, const QString &docType) : - m_fileName(fileName), m_docType(docType), m_mustSave(false) + m_fileName(fileName), m_docType(docType) { } -void PersistentSettingsWriter::saveValue(const QString &variable, const QVariant &value) +bool PersistentSettingsWriter::save(const QVariantMap &data, QWidget *parent) const { - if (m_valueMap.contains(variable) && m_valueMap.value(variable) == value) - return; - m_mustSave = true; - m_valueMap.insert(variable, value); -} - -bool PersistentSettingsWriter::save(QWidget *parent) const -{ - if (!m_mustSave) + if (data == m_savedData) return true; QDir tmp; @@ -403,8 +395,8 @@ bool PersistentSettingsWriter::save(QWidget *parent) const arg(QLatin1String(Core::Constants::IDE_VERSION_LONG), QDateTime::currentDateTime().toString(Qt::ISODate))); w.writeStartElement(ctx.qtCreatorElement); - const QVariantMap::const_iterator cend = m_valueMap.constEnd(); - for (QVariantMap::const_iterator it = m_valueMap.constBegin(); it != cend; ++it) { + const QVariantMap::const_iterator cend = data.constEnd(); + for (QVariantMap::const_iterator it = data.constBegin(); it != cend; ++it) { w.writeStartElement(ctx.dataElement); w.writeTextElement(ctx.variableElement, it.key()); writeVariantValue(w, ctx, it.value()); @@ -416,7 +408,7 @@ bool PersistentSettingsWriter::save(QWidget *parent) const } bool ok = saver.finalize(parent); if (ok) - m_mustSave = false; + m_savedData = data; return ok; } diff --git a/src/libs/utils/persistentsettings.h b/src/libs/utils/persistentsettings.h index ec0d3cb0e9f..c5547f4a99f 100644 --- a/src/libs/utils/persistentsettings.h +++ b/src/libs/utils/persistentsettings.h @@ -60,16 +60,14 @@ class QTCREATOR_UTILS_EXPORT PersistentSettingsWriter { public: PersistentSettingsWriter(const FileName &fileName, const QString &docType); - void saveValue(const QString &variable, const QVariant &value); - bool save(QWidget *parent) const; + bool save(const QVariantMap &data, QWidget *parent) const; Utils::FileName fileName() const; private: - QMap m_valueMap; const Utils::FileName m_fileName; const QString m_docType; - mutable bool m_mustSave; + mutable QMap m_savedData; }; } // namespace Utils diff --git a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp index 3616d7c538b..b63cc813dc9 100644 --- a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp +++ b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp @@ -136,8 +136,9 @@ void DeviceManager::copy(const DeviceManager *source, DeviceManager *target, boo void DeviceManager::save() { - d->writer->saveValue(QLatin1String(DeviceManagerKey), toMap()); - d->writer->save(Core::ICore::mainWindow()); + QVariantMap data; + data.insert(QLatin1String(DeviceManagerKey), toMap()); + d->writer->save(data, Core::ICore::mainWindow()); } void DeviceManager::load() diff --git a/src/plugins/projectexplorer/profilemanager.cpp b/src/plugins/projectexplorer/profilemanager.cpp index e91878a42ce..61cfea49e28 100644 --- a/src/plugins/projectexplorer/profilemanager.cpp +++ b/src/plugins/projectexplorer/profilemanager.cpp @@ -227,20 +227,21 @@ void ProfileManager::saveProfiles() if (!d->m_initialized) // ignore save requests while we are not initialized. return; - d->m_writer->saveValue(QLatin1String(PROFILE_FILE_VERSION_KEY), 1); + QVariantMap data; + data.insert(QLatin1String(PROFILE_FILE_VERSION_KEY), 1); int count = 0; foreach (Profile *p, profiles()) { QVariantMap tmp = p->toMap(); if (tmp.isEmpty()) continue; - d->m_writer->saveValue(QString::fromLatin1(PROFILE_DATA_KEY) + QString::number(count), tmp); + data.insert(QString::fromLatin1(PROFILE_DATA_KEY) + QString::number(count), tmp); ++count; } - d->m_writer->saveValue(QLatin1String(PROFILE_COUNT_KEY), count); - d->m_writer->saveValue(QLatin1String(PROFILE_DEFAULT_KEY), - d->m_defaultProfile ? QString::fromLatin1(d->m_defaultProfile->id().name()) : QString()); - d->m_writer->save(Core::ICore::mainWindow()); + data.insert(QLatin1String(PROFILE_COUNT_KEY), count); + data.insert(QLatin1String(PROFILE_DEFAULT_KEY), + d->m_defaultProfile ? QString::fromLatin1(d->m_defaultProfile->id().name()) : QString()); + d->m_writer->save(data, Core::ICore::mainWindow()); } bool greaterPriority(ProfileInformation *a, ProfileInformation *b) diff --git a/src/plugins/projectexplorer/session.cpp b/src/plugins/projectexplorer/session.cpp index 79e3ae6fc27..257a647879a 100644 --- a/src/plugins/projectexplorer/session.cpp +++ b/src/plugins/projectexplorer/session.cpp @@ -312,9 +312,10 @@ bool SessionManager::save() QLatin1String("QtCreatorSession")); } + QVariantMap data; // save the startup project if (m_startupProject) - m_writer->saveValue(QLatin1String("StartupProject"), m_startupProject->document()->fileName()); + data.insert(QLatin1String("StartupProject"), m_startupProject->document()->fileName()); QStringList projectFiles; foreach (Project *pro, m_projects) @@ -326,7 +327,7 @@ bool SessionManager::save() if (!projectFiles.contains(failed)) projectFiles << failed; - m_writer->saveValue(QLatin1String("ProjectList"), projectFiles); + data.insert(QLatin1String("ProjectList"), projectFiles); QMap depMap; QMap::const_iterator i = m_depMap.constBegin(); @@ -339,7 +340,7 @@ bool SessionManager::save() depMap.insert(key, values); ++i; } - m_writer->saveValue(QLatin1String("ProjectDependencies"), QVariant(depMap)); + data.insert(QLatin1String("ProjectDependencies"), QVariant(depMap)); int editorCount = 0; QList editors = ICore::editorManager()->openedEditors(); @@ -348,21 +349,20 @@ bool SessionManager::save() if (!editor->isTemporary()) ++editorCount; } - m_writer->saveValue(QLatin1String("OpenEditors"), editorCount); - m_writer->saveValue(QLatin1String("EditorSettings"), - ICore::editorManager()->saveState().toBase64()); + data.insert(QLatin1String("OpenEditors"), editorCount); + data.insert(QLatin1String("EditorSettings"), ICore::editorManager()->saveState().toBase64()); QMap::const_iterator it, end; end = m_values.constEnd(); QStringList keys; for (it = m_values.constBegin(); it != end; ++it) { - m_writer->saveValue(QLatin1String("value-") + it.key(), it.value()); + data.insert(QLatin1String("value-") + it.key(), it.value()); keys << it.key(); } - m_writer->saveValue(QLatin1String("valueKeys"), keys); + data.insert(QLatin1String("valueKeys"), keys); - bool result = m_writer->save(Core::ICore::mainWindow()); + bool result = m_writer->save(data, Core::ICore::mainWindow()); if (!result) { QMessageBox::warning(0, tr("Error while saving session"), tr("Could not save session to file %1").arg(m_writer->fileName().toUserOutput())); diff --git a/src/plugins/projectexplorer/settingsaccessor.cpp b/src/plugins/projectexplorer/settingsaccessor.cpp index 9beb42d014d..d78191a4fd0 100644 --- a/src/plugins/projectexplorer/settingsaccessor.cpp +++ b/src/plugins/projectexplorer/settingsaccessor.cpp @@ -936,18 +936,20 @@ bool SettingsAccessor::FileAccessor::writeFile(const SettingsData *settings) con m_writer = new Utils::PersistentSettingsWriter(settings->m_fileName, QLatin1String("QtCreatorProject")); } + QVariantMap data; + for (QVariantMap::const_iterator i = settings->m_map.constBegin(); i != settings->m_map.constEnd(); ++i) { - m_writer->saveValue(i.key(), i.value()); + data.insert(i.key(), i.value()); } - m_writer->saveValue(QLatin1String(VERSION_KEY), m_accessor->m_lastVersion + 1); + data.insert(QLatin1String(VERSION_KEY), m_accessor->m_lastVersion + 1); if (m_environmentSpecific) - m_writer->saveValue(QLatin1String(ENVIRONMENT_ID_KEY), - ProjectExplorerPlugin::instance()->projectExplorerSettings().environmentId.toString()); - return m_writer->save(Core::ICore::mainWindow()); + data.insert(QLatin1String(ENVIRONMENT_ID_KEY), + ProjectExplorerPlugin::instance()->projectExplorerSettings().environmentId.toString()); + return m_writer->save(data, Core::ICore::mainWindow()); } // ------------------------------------------------------------------------- diff --git a/src/plugins/projectexplorer/toolchainmanager.cpp b/src/plugins/projectexplorer/toolchainmanager.cpp index b286c9db534..59f482f88c3 100644 --- a/src/plugins/projectexplorer/toolchainmanager.cpp +++ b/src/plugins/projectexplorer/toolchainmanager.cpp @@ -209,7 +209,8 @@ ToolChainManager::~ToolChainManager() void ToolChainManager::saveToolChains() { - d->m_writer->saveValue(QLatin1String(TOOLCHAIN_FILE_VERSION_KEY), 1); + QVariantMap data; + data.insert(QLatin1String(TOOLCHAIN_FILE_VERSION_KEY), 1); int count = 0; foreach (ToolChain *tc, d->toolChains()) { @@ -217,12 +218,12 @@ void ToolChainManager::saveToolChains() QVariantMap tmp = tc->toMap(); if (tmp.isEmpty()) continue; - d->m_writer->saveValue(QString::fromLatin1(TOOLCHAIN_DATA_KEY) + QString::number(count), tmp); + data.insert(QString::fromLatin1(TOOLCHAIN_DATA_KEY) + QString::number(count), tmp); ++count; } } - d->m_writer->saveValue(QLatin1String(TOOLCHAIN_COUNT_KEY), count); - d->m_writer->save(Core::ICore::mainWindow()); + data.insert(QLatin1String(TOOLCHAIN_COUNT_KEY), count); + d->m_writer->save(data, Core::ICore::mainWindow()); // Do not save default debuggers! Those are set by the SDK! } diff --git a/src/plugins/qtsupport/qtversionmanager.cpp b/src/plugins/qtsupport/qtversionmanager.cpp index 7d93a1d04be..086fbcf4013 100644 --- a/src/plugins/qtsupport/qtversionmanager.cpp +++ b/src/plugins/qtsupport/qtversionmanager.cpp @@ -364,7 +364,9 @@ void QtVersionManager::saveQtVersions() if (!m_writer) m_writer = new Utils::PersistentSettingsWriter(settingsFileName(QLatin1String(QTVERSION_FILENAME)), QLatin1String("QtCreatorQtVersions")); - m_writer->saveValue(QLatin1String(QTVERSION_FILE_VERSION_KEY), 1); + + QVariantMap data; + data.insert(QLatin1String(QTVERSION_FILE_VERSION_KEY), 1); int count = 0; foreach (BaseQtVersion *qtv, m_versions) { @@ -372,11 +374,11 @@ void QtVersionManager::saveQtVersions() if (tmp.isEmpty()) continue; tmp.insert(QLatin1String(QTVERSION_TYPE_KEY), qtv->type()); - m_writer->saveValue(QString::fromLatin1(QTVERSION_DATA_KEY) + QString::number(count), tmp); + data.insert(QString::fromLatin1(QTVERSION_DATA_KEY) + QString::number(count), tmp); ++count; } - m_writer->save(Core::ICore::mainWindow()); + m_writer->save(data, Core::ICore::mainWindow()); } void QtVersionManager::findSystemQt() diff --git a/src/plugins/texteditor/codestylepool.cpp b/src/plugins/texteditor/codestylepool.cpp index e2707f4c111..8dfd5a2bcd1 100644 --- a/src/plugins/texteditor/codestylepool.cpp +++ b/src/plugins/texteditor/codestylepool.cpp @@ -286,9 +286,11 @@ void CodeStylePool::exportCodeStyle(const Utils::FileName &fileName, ICodeStyleP { QVariantMap map; codeStyle->toMap(QString::null, &map); + + QVariantMap tmp; + tmp.insert(QLatin1String(displayNameKey), codeStyle->displayName()); + tmp.insert(QLatin1String(codeStyleDataKey), map); Utils::PersistentSettingsWriter writer(fileName, QLatin1String(codeStyleDocKey)); - writer.saveValue(QLatin1String(displayNameKey), codeStyle->displayName()); - writer.saveValue(QLatin1String(codeStyleDataKey), map); - writer.save(0); + writer.save(map, 0); }