From 99a93dc2e3d0681c3c12c966155d0766b4f4d161 Mon Sep 17 00:00:00 2001 From: con <qtc-committer@nokia.com> Date: Mon, 25 Oct 2010 16:57:58 +0200 Subject: [PATCH] Get rid of hardcoded settingspaths that need to be synced. Share the (user)settings object between plugin manager and Qt Creator core. --- src/app/main.cpp | 13 +++--- src/libs/extensionsystem/pluginmanager.cpp | 52 +++++++++++++++------- src/libs/extensionsystem/pluginmanager.h | 5 ++- src/libs/extensionsystem/pluginmanager_p.h | 5 ++- src/plugins/coreplugin/mainwindow.cpp | 4 +- 5 files changed, 53 insertions(+), 26 deletions(-) diff --git a/src/app/main.cpp b/src/app/main.cpp index 4b842f429c6..e3205cbebf9 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -201,11 +201,15 @@ int main(int argc, char **argv) // Must be done before any QSettings class is created QSettings::setPath(QSettings::IniFormat, QSettings::SystemScope, QCoreApplication::applicationDirPath()+QLatin1String(SHARE_PATH)); - // keep this in sync with the MainWindow ctor in coreplugin/mainwindow.cpp - const QSettings settings(QSettings::IniFormat, QSettings::UserScope, + // plugin manager takes control of this settings object + QSettings *settings = new QSettings(QSettings::IniFormat, QSettings::UserScope, QLatin1String("Nokia"), QLatin1String("QtCreator")); - locale = settings.value("General/OverrideLanguage", locale).toString(); + ExtensionSystem::PluginManager pluginManager; + pluginManager.setFileExtension(QLatin1String("pluginspec")); + pluginManager.setSettings(settings); + + locale = settings->value("General/OverrideLanguage", locale).toString(); const QString &creatorTrPath = QCoreApplication::applicationDirPath() + QLatin1String(SHARE_PATH "/translations"); if (translator.load(QLatin1String("qtcreator_") + locale, creatorTrPath)) { @@ -233,9 +237,6 @@ int main(int argc, char **argv) QNetworkProxyFactory::setUseSystemConfiguration(true); #endif // Load - ExtensionSystem::PluginManager pluginManager; - pluginManager.setFileExtension(QLatin1String("pluginspec")); - const QStringList pluginPaths = getPluginPaths(); pluginManager.setPluginPaths(pluginPaths); diff --git a/src/libs/extensionsystem/pluginmanager.cpp b/src/libs/extensionsystem/pluginmanager.cpp index 82f75f3dee0..26e5e1e86d8 100644 --- a/src/libs/extensionsystem/pluginmanager.cpp +++ b/src/libs/extensionsystem/pluginmanager.cpp @@ -311,9 +311,19 @@ void PluginManager::setFileExtension(const QString &extension) d->extension = extension; } -void PluginManager::loadSettings() +void PluginManager::setSettings(QSettings *settings) { - d->loadSettings(); + d->setSettings(settings); +} + +QSettings *PluginManager::settings() const +{ + return d->settings; +} + +void PluginManager::readSettings() +{ + d->readSettings(); } void PluginManager::writeSettings() @@ -616,6 +626,19 @@ PluginSpec *PluginManagerPrivate::createSpec() return new PluginSpec(); } +/*! + \fn void PluginManagerPrivate::setSettings(QSettings *settings) + \internal +*/ +void PluginManagerPrivate::setSettings(QSettings *s) +{ + if (settings) + delete settings; + settings = s; + if (settings) + settings->setParent(this); +} + /*! \fn PluginSpecPrivate *PluginManagerPrivate::privateSpec(PluginSpec *spec) \internal @@ -633,6 +656,7 @@ PluginManagerPrivate::PluginManagerPrivate(PluginManager *pluginManager) : extension(QLatin1String("xml")), m_profileElapsedMS(0), m_profilingVerbosity(0), + settings(0), q(pluginManager) { } @@ -654,9 +678,8 @@ PluginManagerPrivate::~PluginManagerPrivate() */ void PluginManagerPrivate::writeSettings() { - QSettings settings(QSettings::IniFormat, QSettings::UserScope, - QLatin1String("Nokia"), QLatin1String("QtCreator")); - + if (!settings) + return; QStringList tempDisabledPlugins; QStringList tempForceEnabledPlugins; foreach(PluginSpec *spec, pluginSpecs) { @@ -666,21 +689,20 @@ void PluginManagerPrivate::writeSettings() tempForceEnabledPlugins.append(spec->name()); } - settings.setValue(QLatin1String(C_IGNORED_PLUGINS), tempDisabledPlugins); - settings.setValue(QLatin1String(C_FORCEENABLED_PLUGINS), tempForceEnabledPlugins); + settings->setValue(QLatin1String(C_IGNORED_PLUGINS), tempDisabledPlugins); + settings->setValue(QLatin1String(C_FORCEENABLED_PLUGINS), tempForceEnabledPlugins); } /*! - \fn void PluginManagerPrivate::loadSettings() + \fn void PluginManagerPrivate::readSettings() \internal */ -void PluginManagerPrivate::loadSettings() +void PluginManagerPrivate::readSettings() { - const QSettings settings(QSettings::IniFormat, QSettings::UserScope, - QLatin1String("Nokia"), QLatin1String("QtCreator")); - - disabledPlugins = settings.value(QLatin1String(C_IGNORED_PLUGINS)).toStringList(); - forceEnabledPlugins = settings.value(QLatin1String(C_FORCEENABLED_PLUGINS)).toStringList(); + if (!settings) + return; + disabledPlugins = settings->value(QLatin1String(C_IGNORED_PLUGINS)).toStringList(); + forceEnabledPlugins = settings->value(QLatin1String(C_FORCEENABLED_PLUGINS)).toStringList(); } /*! @@ -941,7 +963,7 @@ void PluginManagerPrivate::loadPlugin(PluginSpec *spec, PluginSpec::State destSt void PluginManagerPrivate::setPluginPaths(const QStringList &paths) { pluginPaths = paths; - loadSettings(); + readSettings(); readPluginPaths(); } diff --git a/src/libs/extensionsystem/pluginmanager.h b/src/libs/extensionsystem/pluginmanager.h index 480f40b4727..a4a88b7e461 100644 --- a/src/libs/extensionsystem/pluginmanager.h +++ b/src/libs/extensionsystem/pluginmanager.h @@ -39,6 +39,7 @@ QT_BEGIN_NAMESPACE class QTextStream; +class QSettings; QT_END_NAMESPACE namespace ExtensionSystem { @@ -101,7 +102,9 @@ public: QString fileExtension() const; // Settings - void loadSettings(); + void setSettings(QSettings *settings); + QSettings *settings() const; + void readSettings(); void writeSettings(); // command line arguments diff --git a/src/libs/extensionsystem/pluginmanager_p.h b/src/libs/extensionsystem/pluginmanager_p.h index 7544d629d3a..f424c881d7d 100644 --- a/src/libs/extensionsystem/pluginmanager_p.h +++ b/src/libs/extensionsystem/pluginmanager_p.h @@ -41,6 +41,7 @@ QT_BEGIN_NAMESPACE class QTime; +class QSettings; QT_END_NAMESPACE namespace ExtensionSystem { @@ -72,7 +73,8 @@ public: void resolveDependencies(); void initProfiling(); void profilingReport(const char *what, const PluginSpec *spec = 0); - void loadSettings(); + void setSettings(QSettings *settings); + void readSettings(); void writeSettings(); void disablePluginIndirectly(PluginSpec *spec); @@ -91,6 +93,7 @@ public: QScopedPointer<QTime> m_profileTimer; int m_profileElapsedMS; unsigned m_profilingVerbosity; + QSettings *settings; // Look in argument descriptions of the specs for the option. PluginSpec *pluginForOption(const QString &option, bool *requiresArgument) const; diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp index b84eeefba1c..053cfe8ba9f 100644 --- a/src/plugins/coreplugin/mainwindow.cpp +++ b/src/plugins/coreplugin/mainwindow.cpp @@ -118,9 +118,7 @@ MainWindow::MainWindow() : m_coreImpl(new CoreImpl(this)), m_uniqueIDManager(new UniqueIDManager()), m_additionalContexts(Constants::C_GLOBAL), - // keep this in sync with main() in app/main.cpp - m_settings(new QSettings(QSettings::IniFormat, QSettings::UserScope, - QLatin1String("Nokia"), QLatin1String("QtCreator"), this)), + m_settings(ExtensionSystem::PluginManager::instance()->settings()), m_globalSettings(new QSettings(QSettings::IniFormat, QSettings::SystemScope, QLatin1String("Nokia"), QLatin1String("QtCreator"), this)), m_settingsDatabase(new SettingsDatabase(QFileInfo(m_settings->fileName()).path(), -- GitLab