aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@nokia.com>2012-08-17 13:18:31 +0200
committerTobias Hunger <tobias.hunger@nokia.com>2012-08-24 15:48:40 +0200
commit96d80096937dee90f7566538245daa9b0c4aa08a (patch)
tree4079dd3e3d207f9dde540f88f77359361c6757af /src
parent29ec32a531912df1008ba12db99df8a3cd9afefe (diff)
Fix saving of xml files
Do not save XML config files (profiles.xml, toolchains.xml, etc.) if the file has not changed. Change-Id: I5f0dea374b33a05e7c428f4031d53c83d92de595 Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/libs/utils/persistentsettings.cpp32
-rw-r--r--src/libs/utils/persistentsettings.h9
-rw-r--r--src/plugins/android/androidconfigurations.cpp2
-rw-r--r--src/plugins/projectexplorer/devicesupport/devicemanager.cpp11
-rw-r--r--src/plugins/projectexplorer/devicesupport/devicemanager.h2
-rw-r--r--src/plugins/projectexplorer/profilemanager.cpp20
-rw-r--r--src/plugins/projectexplorer/project.cpp23
-rw-r--r--src/plugins/projectexplorer/session.cpp34
-rw-r--r--src/plugins/projectexplorer/session.h1
-rw-r--r--src/plugins/projectexplorer/settingsaccessor.cpp113
-rw-r--r--src/plugins/projectexplorer/settingsaccessor.h26
-rw-r--r--src/plugins/projectexplorer/toolchainmanager.cpp17
-rw-r--r--src/plugins/qtsupport/qtversionmanager.cpp16
-rw-r--r--src/plugins/qtsupport/qtversionmanager.h7
-rw-r--r--src/plugins/texteditor/codestylepool.cpp25
-rw-r--r--src/plugins/texteditor/codestylepool.h11
-rw-r--r--src/plugins/texteditor/codestyleselectorwidget.cpp9
17 files changed, 214 insertions, 144 deletions
diff --git a/src/libs/utils/persistentsettings.cpp b/src/libs/utils/persistentsettings.cpp
index a9fdded9a6..7134158869 100644
--- a/src/libs/utils/persistentsettings.cpp
+++ b/src/libs/utils/persistentsettings.cpp
@@ -332,10 +332,6 @@ bool PersistentSettingsReader::load(const Utils::FileName &fileName)
\sa Utils::PersistentSettingsReader
*/
-PersistentSettingsWriter::PersistentSettingsWriter()
-{
-}
-
static void writeVariantValue(QXmlStreamWriter &w, const Context &ctx,
const QVariant &variant, const QString &key = QString())
{
@@ -376,24 +372,33 @@ 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)
+{ }
+
void PersistentSettingsWriter::saveValue(const QString &variable, const QVariant &value)
{
+ if (m_valueMap.contains(variable) && m_valueMap.value(variable) == value)
+ return;
+ m_mustSave = true;
m_valueMap.insert(variable, value);
}
-bool PersistentSettingsWriter::save(const Utils::FileName &fileName, const QString &docType,
- QWidget *parent) const
+bool PersistentSettingsWriter::save(QWidget *parent) const
{
+ if (!m_mustSave)
+ return true;
+
QDir tmp;
- tmp.mkpath(fileName.toFileInfo().path());
- Utils::FileSaver saver(fileName.toString(), QIODevice::Text);
+ tmp.mkpath(m_fileName.toFileInfo().path());
+ Utils::FileSaver saver(m_fileName.toString(), QIODevice::Text);
if (!saver.hasError()) {
const Context ctx;
QXmlStreamWriter w(saver.file());
w.setAutoFormatting(true);
w.setAutoFormattingIndent(1); // Historical, used to be QDom.
w.writeStartDocument();
- w.writeDTD(QLatin1String("<!DOCTYPE ") + docType + QLatin1Char('>'));
+ w.writeDTD(QLatin1String("<!DOCTYPE ") + m_docType + QLatin1Char('>'));
w.writeComment(QString::fromAscii(" Written by Qt Creator %1, %2. ").
arg(QLatin1String(Core::Constants::IDE_VERSION_LONG),
QDateTime::currentDateTime().toString(Qt::ISODate)));
@@ -409,6 +414,13 @@ bool PersistentSettingsWriter::save(const Utils::FileName &fileName, const QStri
saver.setResult(&w);
}
- return saver.finalize(parent);
+ bool ok = saver.finalize(parent);
+ if (ok)
+ m_mustSave = false;
+ return ok;
}
+
+FileName PersistentSettingsWriter::fileName() const
+{ return m_fileName; }
+
} // namespace Utils
diff --git a/src/libs/utils/persistentsettings.h b/src/libs/utils/persistentsettings.h
index 66528aa480..ec0d3cb0e9 100644
--- a/src/libs/utils/persistentsettings.h
+++ b/src/libs/utils/persistentsettings.h
@@ -59,12 +59,17 @@ private:
class QTCREATOR_UTILS_EXPORT PersistentSettingsWriter
{
public:
- PersistentSettingsWriter();
+ PersistentSettingsWriter(const FileName &fileName, const QString &docType);
void saveValue(const QString &variable, const QVariant &value);
- bool save(const FileName &fileName, const QString &docType, QWidget *parent) const;
+ bool save(QWidget *parent) const;
+
+ Utils::FileName fileName() const;
private:
QMap<QString, QVariant> m_valueMap;
+ const Utils::FileName m_fileName;
+ const QString m_docType;
+ mutable bool m_mustSave;
};
} // namespace Utils
diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp
index 76dcdcd723..256c1f68ba 100644
--- a/src/plugins/android/androidconfigurations.cpp
+++ b/src/plugins/android/androidconfigurations.cpp
@@ -182,7 +182,7 @@ AndroidConfig::AndroidConfig()
void AndroidConfig::save(QSettings &settings) const
{
- QFileInfo fileInfo(settingsFileName().toFileInfo());
+ QFileInfo fileInfo = settingsFileName().toFileInfo();
if (fileInfo.exists())
settings.setValue(changeTimeStamp, fileInfo.lastModified().toMSecsSinceEpoch() / 1000);
diff --git a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp
index 7c4c1b5413..3616d7c538 100644
--- a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp
+++ b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp
@@ -80,6 +80,8 @@ public:
QList<IDevice::Ptr> devices;
QList<IDevice::Ptr> inactiveAutoDetectedDevices;
QHash<Core::Id, Core::Id> defaultDevices;
+
+ Utils::PersistentSettingsWriter *writer;
};
DeviceManager *DeviceManagerPrivate::clonedInstance = 0;
@@ -134,10 +136,8 @@ void DeviceManager::copy(const DeviceManager *source, DeviceManager *target, boo
void DeviceManager::save()
{
- Utils::PersistentSettingsWriter writer;
- writer.saveValue(QLatin1String(DeviceManagerKey), toMap());
- writer.save(settingsFilePath(QLatin1String("/qtcreator/devices.xml")),
- QLatin1String("QtCreatorDevices"), Core::ICore::mainWindow());
+ d->writer->saveValue(QLatin1String(DeviceManagerKey), toMap());
+ d->writer->save(Core::ICore::mainWindow());
}
void DeviceManager::load()
@@ -332,6 +332,8 @@ const IDeviceFactory *DeviceManager::restoreFactory(const QVariantMap &map)
DeviceManager::DeviceManager(bool isInstance) : d(new DeviceManagerPrivate)
{
+ d->writer = new Utils::PersistentSettingsWriter(settingsFilePath(QLatin1String("/qtcreator/devices.xml")),
+ QLatin1String("QtCreatorDevices"));
if (isInstance) {
load();
connect(Core::ICore::instance(), SIGNAL(saveSettingsRequested()), SLOT(save()));
@@ -340,6 +342,7 @@ DeviceManager::DeviceManager(bool isInstance) : d(new DeviceManagerPrivate)
DeviceManager::~DeviceManager()
{
+ delete d->writer;
delete d;
}
diff --git a/src/plugins/projectexplorer/devicesupport/devicemanager.h b/src/plugins/projectexplorer/devicesupport/devicemanager.h
index 534b7385a8..e9caad505a 100644
--- a/src/plugins/projectexplorer/devicesupport/devicemanager.h
+++ b/src/plugins/projectexplorer/devicesupport/devicemanager.h
@@ -35,6 +35,8 @@
#include <projectexplorer/projectexplorer_export.h>
#include <utils/fileutils.h>
+#include <utils/fileutils.h>
+
#include <QObject>
namespace ProjectExplorer {
diff --git a/src/plugins/projectexplorer/profilemanager.cpp b/src/plugins/projectexplorer/profilemanager.cpp
index 23ea06480a..e91878a42c 100644
--- a/src/plugins/projectexplorer/profilemanager.cpp
+++ b/src/plugins/projectexplorer/profilemanager.cpp
@@ -86,14 +86,19 @@ public:
bool m_initialized;
QList<ProfileInformation *> m_informationList;
QList<Profile *> m_profileList;
+ Utils::PersistentSettingsWriter *m_writer;
};
ProfileManagerPrivate::ProfileManagerPrivate()
- : m_defaultProfile(0), m_initialized(false)
+ : m_defaultProfile(0), m_initialized(false),
+ m_writer(new Utils::PersistentSettingsWriter(settingsFileName(), QLatin1String("QtCreatorProfiles")))
{ }
ProfileManagerPrivate::~ProfileManagerPrivate()
{
+ qDeleteAll(m_informationList);
+ qDeleteAll(m_profileList);
+ delete m_writer;
}
QList<Task> ProfileManagerPrivate::validateProfile(Profile *p) const
@@ -213,8 +218,6 @@ void ProfileManager::restoreProfiles()
ProfileManager::~ProfileManager()
{
// Clean out profile information to avoid calling them during deregistration:
- qDeleteAll(d->m_informationList);
- qDeleteAll(d->m_profileList);
delete d;
m_instance = 0;
}
@@ -224,21 +227,20 @@ void ProfileManager::saveProfiles()
if (!d->m_initialized) // ignore save requests while we are not initialized.
return;
- PersistentSettingsWriter writer;
- writer.saveValue(QLatin1String(PROFILE_FILE_VERSION_KEY), 1);
+ d->m_writer->saveValue(QLatin1String(PROFILE_FILE_VERSION_KEY), 1);
int count = 0;
foreach (Profile *p, profiles()) {
QVariantMap tmp = p->toMap();
if (tmp.isEmpty())
continue;
- writer.saveValue(QString::fromLatin1(PROFILE_DATA_KEY) + QString::number(count), tmp);
+ d->m_writer->saveValue(QString::fromLatin1(PROFILE_DATA_KEY) + QString::number(count), tmp);
++count;
}
- writer.saveValue(QLatin1String(PROFILE_COUNT_KEY), count);
- writer.saveValue(QLatin1String(PROFILE_DEFAULT_KEY),
+ 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());
- writer.save(settingsFileName(), QLatin1String("QtCreatorProfiles"), Core::ICore::mainWindow());
+ d->m_writer->save(Core::ICore::mainWindow());
}
bool greaterPriority(ProfileInformation *a, ProfileInformation *b)
diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp
index e1a2c75118..c8b29d4789 100644
--- a/src/plugins/projectexplorer/project.cpp
+++ b/src/plugins/projectexplorer/project.cpp
@@ -87,23 +87,28 @@ class ProjectPrivate
{
public:
ProjectPrivate();
+ ~ProjectPrivate();
+
QList<Target *> m_targets;
Target *m_activeTarget;
EditorConfiguration *m_editorConfiguration;
Core::Context m_projectContext;
Core::Context m_projectLanguage;
QVariantMap m_pluginSettings;
+ SettingsAccessor *m_accessor;
};
ProjectPrivate::ProjectPrivate() :
m_activeTarget(0),
- m_editorConfiguration(new EditorConfiguration())
-{
-}
+ m_editorConfiguration(new EditorConfiguration()),
+ m_accessor(0)
+{ }
+
+ProjectPrivate::~ProjectPrivate()
+{ delete m_accessor; }
Project::Project() : d(new ProjectPrivate)
-{
-}
+{ }
Project::~Project()
{
@@ -281,12 +286,16 @@ Target *Project::restoreTarget(const QVariantMap &data)
void Project::saveSettings()
{
emit aboutToSaveSettings();
- SettingsAccessor::instance()->saveSettings(this, toMap());
+ if (!d->m_accessor)
+ d->m_accessor = new SettingsAccessor(this);
+ d->m_accessor->saveSettings(toMap());
}
bool Project::restoreSettings()
{
- QVariantMap map(SettingsAccessor::instance()->restoreSettings(this));
+ if (!d->m_accessor)
+ d->m_accessor = new SettingsAccessor(this);
+ QVariantMap map(d->m_accessor->restoreSettings());
bool ok = fromMap(map);
if (ok)
emit settingsLoaded();
diff --git a/src/plugins/projectexplorer/session.cpp b/src/plugins/projectexplorer/session.cpp
index 70f82606ed..79e3ae6fc2 100644
--- a/src/plugins/projectexplorer/session.cpp
+++ b/src/plugins/projectexplorer/session.cpp
@@ -91,7 +91,8 @@ SessionManager::SessionManager(QObject *parent)
m_sessionName(QLatin1String("default")),
m_virginSession(true),
m_loadingSession(false),
- m_startupProject(0)
+ m_startupProject(0),
+ m_writer(0)
{
connect(ModeManager::instance(), SIGNAL(currentModeChanged(Core::IMode*)),
this, SLOT(saveActiveMode(Core::IMode*)));
@@ -111,6 +112,7 @@ SessionManager::SessionManager(QObject *parent)
SessionManager::~SessionManager()
{
emit aboutToUnloadSession(m_sessionName);
+ delete m_writer;
}
@@ -304,12 +306,15 @@ bool SessionManager::save()
emit aboutToSaveSession();
- PersistentSettingsWriter writer;
+ if (!m_writer || m_writer->fileName() != sessionNameToFileName(m_sessionName)) {
+ delete m_writer;
+ m_writer = new Utils::PersistentSettingsWriter(sessionNameToFileName(m_sessionName),
+ QLatin1String("QtCreatorSession"));
+ }
// save the startup project
- if (m_startupProject) {
- writer.saveValue(QLatin1String("StartupProject"), m_startupProject->document()->fileName());
- }
+ if (m_startupProject)
+ m_writer->saveValue(QLatin1String("StartupProject"), m_startupProject->document()->fileName());
QStringList projectFiles;
foreach (Project *pro, m_projects)
@@ -321,7 +326,7 @@ bool SessionManager::save()
if (!projectFiles.contains(failed))
projectFiles << failed;
- writer.saveValue(QLatin1String("ProjectList"), projectFiles);
+ m_writer->saveValue(QLatin1String("ProjectList"), projectFiles);
QMap<QString, QVariant> depMap;
QMap<QString, QStringList>::const_iterator i = m_depMap.constBegin();
@@ -334,7 +339,7 @@ bool SessionManager::save()
depMap.insert(key, values);
++i;
}
- writer.saveValue(QLatin1String("ProjectDependencies"), QVariant(depMap));
+ m_writer->saveValue(QLatin1String("ProjectDependencies"), QVariant(depMap));
int editorCount = 0;
QList<Core::IEditor *> editors = ICore::editorManager()->openedEditors();
@@ -343,25 +348,24 @@ bool SessionManager::save()
if (!editor->isTemporary())
++editorCount;
}
- writer.saveValue(QLatin1String("OpenEditors"), editorCount);
- writer.saveValue(QLatin1String("EditorSettings"),
- ICore::editorManager()->saveState().toBase64());
+ m_writer->saveValue(QLatin1String("OpenEditors"), editorCount);
+ m_writer->saveValue(QLatin1String("EditorSettings"),
+ ICore::editorManager()->saveState().toBase64());
QMap<QString, QVariant>::const_iterator it, end;
end = m_values.constEnd();
QStringList keys;
for (it = m_values.constBegin(); it != end; ++it) {
- writer.saveValue(QLatin1String("value-") + it.key(), it.value());
+ m_writer->saveValue(QLatin1String("value-") + it.key(), it.value());
keys << it.key();
}
- writer.saveValue(QLatin1String("valueKeys"), keys);
+ m_writer->saveValue(QLatin1String("valueKeys"), keys);
- Utils::FileName fileName = sessionNameToFileName(m_sessionName);
- bool result = writer.save(fileName, QLatin1String("QtCreatorSession"), Core::ICore::mainWindow());
+ bool result = m_writer->save(Core::ICore::mainWindow());
if (!result) {
QMessageBox::warning(0, tr("Error while saving session"),
- tr("Could not save session to file %1").arg(fileName.toUserOutput()));
+ tr("Could not save session to file %1").arg(m_writer->fileName().toUserOutput()));
}
if (debug)
diff --git a/src/plugins/projectexplorer/session.h b/src/plugins/projectexplorer/session.h
index 75000e4ff9..881b100cab 100644
--- a/src/plugins/projectexplorer/session.h
+++ b/src/plugins/projectexplorer/session.h
@@ -176,6 +176,7 @@ private:
QMap<QString, QStringList> m_depMap;
QMap<QString, QVariant> m_values;
QFutureInterface<void> m_future;
+ Utils::PersistentSettingsWriter *m_writer;
};
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/settingsaccessor.cpp b/src/plugins/projectexplorer/settingsaccessor.cpp
index e9401c3a48..1816a9bb3c 100644
--- a/src/plugins/projectexplorer/settingsaccessor.cpp
+++ b/src/plugins/projectexplorer/settingsaccessor.cpp
@@ -450,20 +450,25 @@ static QVariantMap processHandlerNodes(const HandlerNode &node, const QVariantMa
// -------------------------------------------------------------------------
// UserFileAccessor
// -------------------------------------------------------------------------
-SettingsAccessor::SettingsAccessor() :
+SettingsAccessor::SettingsAccessor(Project *project) :
m_firstVersion(-1),
m_lastVersion(-1),
m_userFileAcessor(QByteArray("qtcUserFileName"),
QLatin1String(".user"),
QString::fromLocal8Bit(qgetenv("QTC_EXTENSION")),
true,
- true),
+ true,
+ this),
m_sharedFileAcessor(QByteArray("qtcSharedFileName"),
QLatin1String(".shared"),
QString::fromLocal8Bit(qgetenv("QTC_SHARED_EXTENSION")),
false,
- false)
+ false,
+ this),
+ m_project(project)
{
+ QTC_CHECK(m_project);
+
addVersionHandler(new Version0Handler);
addVersionHandler(new Version1Handler);
addVersionHandler(new Version2Handler);
@@ -483,11 +488,8 @@ SettingsAccessor::~SettingsAccessor()
qDeleteAll(m_handlers);
}
-SettingsAccessor *SettingsAccessor::instance()
-{
- static SettingsAccessor acessor;
- return &acessor;
-}
+Project *SettingsAccessor::project() const
+{ return m_project; }
namespace {
@@ -589,17 +591,21 @@ void trackUserStickySettings(QVariantMap *userMap, const QVariantMap &sharedMap)
} // Anonymous
-QVariantMap SettingsAccessor::restoreSettings(Project *project) const
+QVariantMap SettingsAccessor::restoreSettings() const
{
- if (m_lastVersion < 0 || !project)
+ if (m_lastVersion < 0)
return QVariantMap();
SettingsData settings;
- if (!m_userFileAcessor.readFile(project, &settings))
+ QString fn = project()->property(m_userFileAcessor.id()).toString();
+ if (fn.isEmpty())
+ fn = project()->document()->fileName() + m_userFileAcessor.suffix();
+ settings.m_fileName = Utils::FileName::fromString(fn);
+ if (!m_userFileAcessor.readFile(&settings))
settings.clear(); // No user settings, but there can still be shared ones.
if (settings.isValid()) {
- if (settings.m_version > SettingsAccessor::instance()->m_lastVersion + 1) {
+ if (settings.m_version > m_lastVersion + 1) {
QMessageBox::information(
Core::ICore::mainWindow(),
QApplication::translate("ProjectExplorer::SettingsAccessor",
@@ -652,7 +658,7 @@ QVariantMap SettingsAccessor::restoreSettings(Project *project) const
// Time to consider shared settings...
SettingsData sharedSettings;
- if (m_sharedFileAcessor.readFile(project, &sharedSettings)) {
+ if (m_sharedFileAcessor.readFile(&sharedSettings)) {
bool useSharedSettings = true;
if (sharedSettings.m_version != settings.m_version) {
int baseFileVersion;
@@ -692,20 +698,20 @@ QVariantMap SettingsAccessor::restoreSettings(Project *project) const
if (useSharedSettings) {
// We now update the user and shared settings so they are compatible.
for (int i = sharedSettings.m_version; i < baseFileVersion; ++i)
- sharedSettings.m_map = m_handlers.value(i)->update(project, sharedSettings.m_map);
+ sharedSettings.m_map = m_handlers.value(i)->update(m_project, sharedSettings.m_map);
if (!settings.isValid()) {
- project->setProperty(SHARED_SETTINGS, sharedSettings.m_map);
+ m_project->setProperty(SHARED_SETTINGS, sharedSettings.m_map);
return sharedSettings.m_map;
}
for (int i = settings.m_version; i < baseFileVersion; ++i)
- settings.m_map = m_handlers.value(i)->update(project, settings.m_map);
+ settings.m_map = m_handlers.value(i)->update(m_project, settings.m_map);
settings.m_version = baseFileVersion;
}
}
if (useSharedSettings) {
- project->setProperty(SHARED_SETTINGS, sharedSettings.m_map);
+ m_project->setProperty(SHARED_SETTINGS, sharedSettings.m_map);
if (!settings.isValid())
return sharedSettings.m_map;
@@ -718,22 +724,26 @@ QVariantMap SettingsAccessor::restoreSettings(Project *project) const
// Update from the base version to Creator's version.
for (int i = settings.m_version; i <= m_lastVersion; ++i)
- settings.m_map = m_handlers.value(i)->update(project, settings.m_map);
+ settings.m_map = m_handlers.value(i)->update(m_project, settings.m_map);
return settings.m_map;
}
-bool SettingsAccessor::saveSettings(const Project *project, const QVariantMap &map) const
+bool SettingsAccessor::saveSettings(const QVariantMap &map) const
{
- if (!project || map.isEmpty())
+ if (map.isEmpty())
return false;
SettingsData settings(map);
- const QVariant &shared = project->property(SHARED_SETTINGS);
+ QString fn = project()->property(m_userFileAcessor.id()).toString();
+ if (fn.isEmpty())
+ fn = project()->document()->fileName() + m_userFileAcessor.suffix();
+ settings.m_fileName = Utils::FileName::fromString(fn);
+ const QVariant &shared = m_project->property(SHARED_SETTINGS);
if (shared.isValid())
trackUserStickySettings(&settings.m_map, shared.toMap());
- return m_userFileAcessor.writeFile(project, &settings);
+ return m_userFileAcessor.writeFile(&settings);
}
void SettingsAccessor::addVersionHandler(UserFileVersionHandler *handler)
@@ -800,14 +810,21 @@ SettingsAccessor::FileAccessor::FileAccessor(const QByteArray &id,
const QString &defaultSuffix,
const QString &environmentSuffix,
bool envSpecific,
- bool versionStrict)
+ bool versionStrict, SettingsAccessor *accessor)
: m_id(id)
, m_environmentSpecific(envSpecific)
, m_versionStrict(versionStrict)
+ , m_accessor(accessor)
+ , m_writer(0)
{
assignSuffix(defaultSuffix, environmentSuffix);
}
+SettingsAccessor::FileAccessor::~FileAccessor()
+{
+ delete m_writer;
+}
+
void SettingsAccessor::FileAccessor::assignSuffix(const QString &defaultSuffix,
const QString &environmentSuffix)
{
@@ -820,11 +837,6 @@ void SettingsAccessor::FileAccessor::assignSuffix(const QString &defaultSuffix,
}
}
-QString SettingsAccessor::FileAccessor::assembleFileName(const Project *project) const
-{
- return project->document()->fileName() + m_suffix;
-}
-
bool SettingsAccessor::FileAccessor::findNewestCompatibleSetting(SettingsData *settings) const
{
const QString baseFileName = settings->m_fileName.toString();
@@ -833,7 +845,6 @@ bool SettingsAccessor::FileAccessor::findNewestCompatibleSetting(SettingsData *s
settings->m_version = -1;
PersistentSettingsReader reader;
- SettingsAccessor *acessor = SettingsAccessor::instance();
QFileInfo fileInfo(baseFileName);
QStringList fileNameFilter(fileInfo.fileName() + QLatin1String(".*"));
@@ -845,10 +856,10 @@ bool SettingsAccessor::FileAccessor::findNewestCompatibleSetting(SettingsData *s
const QString &suffix = file.mid(fileInfo.fileName().length() + 1);
const QString &candidateFileName = baseFileName + QLatin1String(".") + suffix;
candidates.append(candidateFileName);
- for (int candidateVersion = acessor->m_lastVersion;
- candidateVersion >= acessor->m_firstVersion;
+ for (int candidateVersion = m_accessor->m_lastVersion;
+ candidateVersion >= m_accessor->m_firstVersion;
--candidateVersion) {
- if (suffix == acessor->m_handlers.value(candidateVersion)->displayUserFileVersion()) {
+ if (suffix == m_accessor->m_handlers.value(candidateVersion)->displayUserFileVersion()) {
if (candidateVersion > settings->m_version) {
settings->m_version = candidateVersion;
settings->m_fileName = Utils::FileName::fromString(candidateFileName);
@@ -876,7 +887,7 @@ bool SettingsAccessor::FileAccessor::findNewestCompatibleSetting(SettingsData *s
if (reader.load(fn)) {
settings->m_map = reader.restoreValues();
int candidateVersion = settings->m_map.value(QLatin1String(VERSION_KEY), 0).toInt();
- if (candidateVersion == acessor->m_lastVersion + 1) {
+ if (candidateVersion == m_accessor->m_lastVersion + 1) {
settings->m_version = candidateVersion;
settings->m_fileName = fn;
return true;
@@ -890,11 +901,9 @@ bool SettingsAccessor::FileAccessor::findNewestCompatibleSetting(SettingsData *s
return false;
}
-bool SettingsAccessor::FileAccessor::readFile(Project *project,
- SettingsData *settings) const
+bool SettingsAccessor::FileAccessor::readFile(SettingsData *settings) const
{
PersistentSettingsReader reader;
- settings->m_fileName = Utils::FileName::fromString(assembleFileName(project));
if (!reader.load(settings->m_fileName))
return false;
@@ -905,43 +914,41 @@ bool SettingsAccessor::FileAccessor::readFile(Project *project,
if (!m_versionStrict)
return true;
- if (settings->m_version < SettingsAccessor::instance()->m_firstVersion) {
+ if (settings->m_version < m_accessor->m_firstVersion) {
qWarning() << "Version" << settings->m_version << "in" << m_suffix << "too old.";
return false;
}
- if (settings->m_version > SettingsAccessor::instance()->m_lastVersion + 1) {
+ if (settings->m_version > m_accessor->m_lastVersion + 1) {
if (!findNewestCompatibleSetting(settings))
return false;
settings->m_usingBackup = true;
- project->setProperty(m_id.constData(), settings->m_fileName.toString());
+ m_accessor->project()->setProperty(m_id.constData(), settings->m_fileName.toString());
}
return true;
}
-bool SettingsAccessor::FileAccessor::writeFile(const Project *project,
- const SettingsData *settings) const
+bool SettingsAccessor::FileAccessor::writeFile(const SettingsData *settings) const
{
- PersistentSettingsWriter writer;
+ if (!m_writer || m_writer->fileName() != settings->m_fileName) {
+ delete m_writer;
+ m_writer = new Utils::PersistentSettingsWriter(settings->m_fileName, QLatin1String("QtCreatorProject"));
+ }
+
for (QVariantMap::const_iterator i = settings->m_map.constBegin();
i != settings->m_map.constEnd();
++i) {
- writer.saveValue(i.key(), i.value());
+ m_writer->saveValue(i.key(), i.value());
}
- writer.saveValue(QLatin1String(VERSION_KEY), SettingsAccessor::instance()->m_lastVersion + 1);
-
- if (m_environmentSpecific) {
- writer.saveValue(QLatin1String(ENVIRONMENT_ID_KEY),
- ProjectExplorerPlugin::instance()->projectExplorerSettings().environmentId.toString());
- }
+ m_writer->saveValue(QLatin1String(VERSION_KEY), m_accessor->m_lastVersion + 1);
- const QString &fileName = project->property(m_id).toString();
- return writer.save(Utils::FileName::fromString(fileName.isEmpty() ? assembleFileName(project) : fileName),
- QLatin1String("QtCreatorProject"),
- Core::ICore::mainWindow());
+ if (m_environmentSpecific)
+ m_writer->saveValue(QLatin1String(ENVIRONMENT_ID_KEY),
+ ProjectExplorerPlugin::instance()->projectExplorerSettings().environmentId.toString());
+ return m_writer->save(Core::ICore::mainWindow());
}
// -------------------------------------------------------------------------
diff --git a/src/plugins/projectexplorer/settingsaccessor.h b/src/plugins/projectexplorer/settingsaccessor.h
index 30f17650fd..00d6dc4136 100644
--- a/src/plugins/projectexplorer/settingsaccessor.h
+++ b/src/plugins/projectexplorer/settingsaccessor.h
@@ -32,8 +32,7 @@
#define PROJECTMANAGER_USERFILEACCESSOR_H
#include <utils/fileutils.h>
-
-#include <QVariantMap>
+#include <utils/persistentsettings.h>
namespace ProjectExplorer {
@@ -46,15 +45,15 @@ class UserFileVersionHandler;
class SettingsAccessor
{
public:
+ SettingsAccessor(Project *project);
~SettingsAccessor();
- static SettingsAccessor *instance();
+ Project *project() const;
- QVariantMap restoreSettings(Project *project) const;
- bool saveSettings(const Project *project, const QVariantMap &map) const;
+ QVariantMap restoreSettings() const;
+ bool saveSettings(const QVariantMap &map) const;
private:
- SettingsAccessor();
// Takes ownership of the handler!
void addVersionHandler(Internal::UserFileVersionHandler *handler);
@@ -83,10 +82,15 @@ private:
const QString &defaultSuffix,
const QString &environmentSuffix,
bool envSpecific,
- bool versionStrict);
+ bool versionStrict,
+ SettingsAccessor *accessor);
+ ~FileAccessor();
+
+ bool readFile(SettingsData *settings) const;
+ bool writeFile(const SettingsData *settings) const;
- bool readFile(Project *project, SettingsData *settings) const;
- bool writeFile(const Project *project, const SettingsData *settings) const;
+ QString suffix() const { return m_suffix; }
+ QByteArray id() const { return m_id; }
private:
void assignSuffix(const QString &defaultSuffix, const QString &environmentSuffix);
@@ -97,6 +101,8 @@ private:
QString m_suffix;
bool m_environmentSpecific;
bool m_versionStrict;
+ SettingsAccessor *m_accessor;
+ mutable Utils::PersistentSettingsWriter *m_writer;
};
static bool verifyEnvironmentId(const QString &id);
@@ -106,6 +112,8 @@ private:
int m_lastVersion;
const FileAccessor m_userFileAcessor;
const FileAccessor m_sharedFileAcessor;
+
+ Project *m_project;
};
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/toolchainmanager.cpp b/src/plugins/projectexplorer/toolchainmanager.cpp
index 207281101b..b286c9db53 100644
--- a/src/plugins/projectexplorer/toolchainmanager.cpp
+++ b/src/plugins/projectexplorer/toolchainmanager.cpp
@@ -76,21 +76,27 @@ class ToolChainManagerPrivate
{
public:
ToolChainManagerPrivate(ToolChainManager *parent);
+ ~ToolChainManagerPrivate();
QList<ToolChain *> &toolChains();
ToolChainManager *q;
bool m_initialized;
QMap<QString, Utils::FileName> m_abiToDebugger;
+ Utils::PersistentSettingsWriter *m_writer;
private:
QList<ToolChain *> m_toolChains;
};
ToolChainManagerPrivate::ToolChainManagerPrivate(ToolChainManager *parent)
- : q(parent), m_initialized(false)
+ : q(parent), m_initialized(false),
+ m_writer(new Utils::PersistentSettingsWriter(settingsFileName(QLatin1String(TOOLCHAIN_FILENAME)), QLatin1String("QtCreatorToolChains")))
{ }
+ToolChainManagerPrivate::~ToolChainManagerPrivate()
+{ delete m_writer; }
+
QList<ToolChain *> &ToolChainManagerPrivate::toolChains()
{
if (!m_initialized) {
@@ -203,8 +209,7 @@ ToolChainManager::~ToolChainManager()
void ToolChainManager::saveToolChains()
{
- PersistentSettingsWriter writer;
- writer.saveValue(QLatin1String(TOOLCHAIN_FILE_VERSION_KEY), 1);
+ d->m_writer->saveValue(QLatin1String(TOOLCHAIN_FILE_VERSION_KEY), 1);
int count = 0;
foreach (ToolChain *tc, d->toolChains()) {
@@ -212,12 +217,12 @@ void ToolChainManager::saveToolChains()
QVariantMap tmp = tc->toMap();
if (tmp.isEmpty())
continue;
- writer.saveValue(QString::fromLatin1(TOOLCHAIN_DATA_KEY) + QString::number(count), tmp);
+ d->m_writer->saveValue(QString::fromLatin1(TOOLCHAIN_DATA_KEY) + QString::number(count), tmp);
++count;
}
}
- writer.saveValue(QLatin1String(TOOLCHAIN_COUNT_KEY), count);
- writer.save(settingsFileName(QLatin1String(TOOLCHAIN_FILENAME)), QLatin1String("QtCreatorToolChains"), Core::ICore::mainWindow());
+ d->m_writer->saveValue(QLatin1String(TOOLCHAIN_COUNT_KEY), count);
+ d->m_writer->save(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 9335cbfb5b..14ec9a7659 100644
--- a/src/plugins/qtsupport/qtversionmanager.cpp
+++ b/src/plugins/qtsupport/qtversionmanager.cpp
@@ -120,7 +120,8 @@ QtVersionManager *QtVersionManager::m_self = 0;
QtVersionManager::QtVersionManager() :
m_configFileWatcher(0),
- m_fileWatcherTimer(new QTimer(this))
+ m_fileWatcherTimer(new QTimer(this)),
+ m_writer(0)
{
m_self = this;
m_idcount = 1;
@@ -163,6 +164,7 @@ bool QtVersionManager::delayedInitialize()
QtVersionManager::~QtVersionManager()
{
+ delete m_writer;
qDeleteAll(m_versions);
m_versions.clear();
}
@@ -233,8 +235,8 @@ void QtVersionManager::updateFromInstaller()
{
m_fileWatcherTimer->stop();
- // Handle overwritting of data:
const Utils::FileName path = globalSettingsFileName();
+ // Handle overwritting of data:
if (m_configFileWatcher) {
m_configFileWatcher->removeFile(path.toString());
m_configFileWatcher->addFile(path.toString(), Utils::FileSystemWatcher::WatchModifiedDate);
@@ -357,8 +359,10 @@ void QtVersionManager::updateFromInstaller()
void QtVersionManager::saveQtVersions()
{
- Utils::PersistentSettingsWriter writer;
- writer.saveValue(QLatin1String(QTVERSION_FILE_VERSION_KEY), 1);
+ if (!m_writer)
+ m_writer = new Utils::PersistentSettingsWriter(settingsFileName(QLatin1String(QTVERSION_FILENAME)),
+ QLatin1String("QtCreatorQtVersions"));
+ m_writer->saveValue(QLatin1String(QTVERSION_FILE_VERSION_KEY), 1);
int count = 0;
foreach (BaseQtVersion *qtv, m_versions) {
@@ -366,11 +370,11 @@ void QtVersionManager::saveQtVersions()
if (tmp.isEmpty())
continue;
tmp.insert(QLatin1String(QTVERSION_TYPE_KEY), qtv->type());
- writer.saveValue(QString::fromLatin1(QTVERSION_DATA_KEY) + QString::number(count), tmp);
+ m_writer->saveValue(QString::fromLatin1(QTVERSION_DATA_KEY) + QString::number(count), tmp);
++count;
}
- writer.save(settingsFileName(QLatin1String(QTVERSION_FILENAME)), QLatin1String("QtCreatorQtVersions"), Core::ICore::mainWindow());
+ m_writer->save(Core::ICore::mainWindow());
}
void QtVersionManager::findSystemQt()
diff --git a/src/plugins/qtsupport/qtversionmanager.h b/src/plugins/qtsupport/qtversionmanager.h
index 2b378895ed..f2f4697c44 100644
--- a/src/plugins/qtsupport/qtversionmanager.h
+++ b/src/plugins/qtsupport/qtversionmanager.h
@@ -37,7 +37,11 @@
#include <QSet>
#include <QStringList>
-namespace Utils { class FileSystemWatcher; }
+namespace Utils {
+class FileSystemWatcher;
+class PersistentSettingsWriter;
+} // namespace Utils
+
namespace ProjectExplorer { class ProfileInformation; }
namespace QtSupport {
@@ -143,6 +147,7 @@ private:
Utils::FileSystemWatcher *m_configFileWatcher;
QTimer *m_fileWatcherTimer;
+ Utils::PersistentSettingsWriter *m_writer;
};
namespace Internal {
diff --git a/src/plugins/texteditor/codestylepool.cpp b/src/plugins/texteditor/codestylepool.cpp
index d3462fcc63..e2707f4c11 100644
--- a/src/plugins/texteditor/codestylepool.cpp
+++ b/src/plugins/texteditor/codestylepool.cpp
@@ -120,9 +120,11 @@ QString CodeStylePool::settingsDir() const
return customCodeStylesPath().append(suffix);
}
-QString CodeStylePool::settingsPath(const QString &id) const
+Utils::FileName CodeStylePool::settingsPath(const QString &id) const
{
- return settingsDir() + QLatin1Char('/') + id + QLatin1String(".xml");
+ Utils::FileName path = Utils::FileName::fromString(settingsDir());
+ path.appendPath(id + QLatin1String(".xml"));
+ return path;
}
QList<ICodeStylePreferences *> CodeStylePool::codeStyles() const
@@ -200,7 +202,7 @@ void CodeStylePool::removeCodeStyle(ICodeStylePreferences *codeStyle)
d->m_idToCodeStyle.remove(codeStyle->id());
QDir dir(settingsDir());
- dir.remove(QFileInfo(settingsPath(codeStyle->id())).fileName());
+ dir.remove(settingsPath(codeStyle->id()).toFileInfo().fileName());
delete codeStyle;
}
@@ -218,11 +220,11 @@ void CodeStylePool::loadCustomCodeStyles()
const QString codeStyleFile = codeStyleFiles.at(i);
// filter out styles which id is the same as one of built-in styles
if (!d->m_idToCodeStyle.contains(QFileInfo(codeStyleFile).completeBaseName()))
- loadCodeStyle(dir.absoluteFilePath(codeStyleFile));
+ loadCodeStyle(Utils::FileName::fromString(dir.absoluteFilePath(codeStyleFile)));
}
}
-ICodeStylePreferences *CodeStylePool::importCodeStyle(const QString &fileName)
+ICodeStylePreferences *CodeStylePool::importCodeStyle(const Utils::FileName &fileName)
{
TextEditor::ICodeStylePreferences *codeStyle = loadCodeStyle(fileName);
if (codeStyle)
@@ -230,14 +232,14 @@ ICodeStylePreferences *CodeStylePool::importCodeStyle(const QString &fileName)
return codeStyle;
}
-ICodeStylePreferences *CodeStylePool::loadCodeStyle(const QString &fileName)
+ICodeStylePreferences *CodeStylePool::loadCodeStyle(const Utils::FileName &fileName)
{
TextEditor::ICodeStylePreferences *codeStyle = 0;
Utils::PersistentSettingsReader reader;
- reader.load(Utils::FileName::fromString(fileName));
+ reader.load(fileName);
QVariantMap m = reader.restoreValues();
if (m.contains(QLatin1String(codeStyleDataKey))) {
- const QString id = QFileInfo(fileName).completeBaseName();
+ const QString id = fileName.toFileInfo().completeBaseName();
const QString displayName = reader.restoreValue(QLatin1String(displayNameKey)).toString();
const QVariantMap map = reader.restoreValue(QLatin1String(codeStyleDataKey)).toMap();
if (d->m_factory) {
@@ -280,14 +282,13 @@ void CodeStylePool::saveCodeStyle(ICodeStylePreferences *codeStyle) const
exportCodeStyle(settingsPath(codeStyle->id()), codeStyle);
}
-void CodeStylePool::exportCodeStyle(const QString &fileName, ICodeStylePreferences *codeStyle) const
+void CodeStylePool::exportCodeStyle(const Utils::FileName &fileName, ICodeStylePreferences *codeStyle) const
{
QVariantMap map;
codeStyle->toMap(QString::null, &map);
- Utils::PersistentSettingsWriter writer;
+ Utils::PersistentSettingsWriter writer(fileName, QLatin1String(codeStyleDocKey));
writer.saveValue(QLatin1String(displayNameKey), codeStyle->displayName());
writer.saveValue(QLatin1String(codeStyleDataKey), map);
- writer.save(Utils::FileName::fromString(fileName), QLatin1String(codeStyleDocKey), 0);
+ writer.save(0);
}
-
diff --git a/src/plugins/texteditor/codestylepool.h b/src/plugins/texteditor/codestylepool.h
index 9d690e517b..4dd1bd9147 100644
--- a/src/plugins/texteditor/codestylepool.h
+++ b/src/plugins/texteditor/codestylepool.h
@@ -33,6 +33,8 @@
#include "texteditor_global.h"
+#include <utils/fileutils.h>
+
#include <QObject>
namespace TextEditor {
@@ -68,8 +70,8 @@ public:
void loadCustomCodeStyles();
- ICodeStylePreferences *importCodeStyle(const QString &fileName);
- void exportCodeStyle(const QString &fileName, ICodeStylePreferences *codeStyle) const;
+ ICodeStylePreferences *importCodeStyle(const Utils::FileName &fileName);
+ void exportCodeStyle(const Utils::FileName &fileName, ICodeStylePreferences *codeStyle) const;
signals:
void codeStyleAdded(ICodeStylePreferences *);
@@ -80,12 +82,11 @@ private slots:
private:
QString settingsDir() const;
- QString settingsPath(const QString &id) const;
- ICodeStylePreferences *loadCodeStyle(const QString &fileName);
+ Utils::FileName settingsPath(const QString &id) const;
+ ICodeStylePreferences *loadCodeStyle(const Utils::FileName &fileName);
void saveCodeStyle(ICodeStylePreferences *codeStyle) const;
Internal::CodeStylePoolPrivate *d;
-
};
} // namespace TextEditor
diff --git a/src/plugins/texteditor/codestyleselectorwidget.cpp b/src/plugins/texteditor/codestyleselectorwidget.cpp
index beea626c77..ded0e3ac6f 100644
--- a/src/plugins/texteditor/codestyleselectorwidget.cpp
+++ b/src/plugins/texteditor/codestyleselectorwidget.cpp
@@ -343,8 +343,9 @@ void CodeStyleSelectorWidget::slotRemoveClicked()
void CodeStyleSelectorWidget::slotImportClicked()
{
- const QString fileName = QFileDialog::getOpenFileName(this, tr("Import Code Style"), QString::null,
- tr("Code styles (*.xml);;All files (*)"));
+ const Utils::FileName fileName =
+ Utils::FileName::fromString(QFileDialog::getOpenFileName(this, tr("Import Code Style"), QString::null,
+ tr("Code styles (*.xml);;All files (*)")));
if (!fileName.isEmpty()) {
CodeStylePool *codeStylePool = m_codeStyle->delegatingPool();
ICodeStylePreferences *importedStyle = codeStylePool->importCodeStyle(fileName);
@@ -352,7 +353,7 @@ void CodeStyleSelectorWidget::slotImportClicked()
m_codeStyle->setCurrentDelegate(importedStyle);
else
QMessageBox::warning(this, tr("Import Code Style"),
- tr("Cannot import code style"));
+ tr("Cannot import code style from %1"), fileName.toUserOutput());
}
}
@@ -364,7 +365,7 @@ void CodeStyleSelectorWidget::slotExportClicked()
tr("Code styles (*.xml);;All files (*)"));
if (!fileName.isEmpty()) {
CodeStylePool *codeStylePool = m_codeStyle->delegatingPool();
- codeStylePool->exportCodeStyle(fileName, currentPreferences);
+ codeStylePool->exportCodeStyle(Utils::FileName::fromString(fileName), currentPreferences);
}
}