diff --git a/src/plugins/analyzerbase/analyzersettings.cpp b/src/plugins/analyzerbase/analyzersettings.cpp index 8d62b943615..fa00ab55d06 100644 --- a/src/plugins/analyzerbase/analyzersettings.cpp +++ b/src/plugins/analyzerbase/analyzersettings.cpp @@ -53,11 +53,6 @@ namespace Analyzer { AnalyzerGlobalSettings *AnalyzerGlobalSettings::m_instance = 0; -AbstractAnalyzerSubConfig::AbstractAnalyzerSubConfig(QObject *parent) - : QObject(parent) -{ -} - AnalyzerSettings::AnalyzerSettings(QObject *parent) : QObject(parent) { @@ -107,7 +102,6 @@ AnalyzerGlobalSettings *AnalyzerGlobalSettings::instance() AnalyzerGlobalSettings::~AnalyzerGlobalSettings() { - qDeleteAll(m_subConfigFactories); m_instance = 0; } @@ -138,29 +132,29 @@ void AnalyzerGlobalSettings::writeSettings() const settings->endGroup(); } -void AnalyzerGlobalSettings::registerSubConfigFactory(AbstractAnalyzerSubConfigFactory *factory) +void AnalyzerGlobalSettings::registerSubConfigs + (AnalyzerSubConfigFactory globalCreator, AnalyzerSubConfigFactory projectCreator) { - m_subConfigFactories << factory; + m_projectSubConfigs.append(projectCreator); - AbstractAnalyzerSubConfig *config = factory->createGlobalSubConfig(this); - addSubConfig(config); + AbstractAnalyzerSubConfig *config = globalCreator(); + config->setParent(this); AnalyzerPlugin::instance()->addAutoReleasedObject(new AnalyzerOptionsPage(config)); readSettings(); } -QList AnalyzerGlobalSettings::subConfigFactories() const +QList AnalyzerGlobalSettings::projectSubConfigs() const { - return m_subConfigFactories; + return m_projectSubConfigs; } AnalyzerProjectSettings::AnalyzerProjectSettings(QObject *parent) -: AnalyzerSettings(parent) + : AnalyzerSettings(parent) { // add sub configs - foreach (AbstractAnalyzerSubConfigFactory *factory, AnalyzerGlobalSettings::instance()->subConfigFactories()) { - addSubConfig(factory->createProjectSubConfig(parent)); - } + foreach (AnalyzerSubConfigFactory factory, AnalyzerGlobalSettings::instance()->projectSubConfigs()) + factory()->setParent(this); // take defaults from global settings AnalyzerGlobalSettings *gs = AnalyzerGlobalSettings::instance(); diff --git a/src/plugins/analyzerbase/analyzersettings.h b/src/plugins/analyzerbase/analyzersettings.h index b9056465afa..b71c1d9904b 100644 --- a/src/plugins/analyzerbase/analyzersettings.h +++ b/src/plugins/analyzerbase/analyzersettings.h @@ -65,7 +65,7 @@ class ANALYZER_EXPORT AbstractAnalyzerSubConfig : public QObject Q_OBJECT public: - AbstractAnalyzerSubConfig(QObject *parent); + AbstractAnalyzerSubConfig() {} /// return a list of default values virtual QVariantMap defaults() const = 0; @@ -82,46 +82,6 @@ public: virtual QWidget *createConfigWidget(QWidget *parent) = 0; }; -/** - * Interface for registering configuration to the Manager. - * You probably want to use the template class below. - */ -class ANALYZER_EXPORT AbstractAnalyzerSubConfigFactory -{ -public: - AbstractAnalyzerSubConfigFactory() {} - virtual ~AbstractAnalyzerSubConfigFactory() {} - - virtual AbstractAnalyzerSubConfig *createGlobalSubConfig(QObject *parent) = 0; - virtual AbstractAnalyzerSubConfig *createProjectSubConfig(QObject *parent) = 0; -}; - -/** - * Makes it easy to register custom configuration for a tool: - * - * @code - * bool MemcheckPlugin::initialize(const QStringList &arguments, QString *errorString) - * { - * typedef AnalyzerSubConfigFactory YourConfigFactory; - * AnalyzerGlobalSettings::instance()->registerSubConfigFactory(new YourConfigFactory); - * } - * @endcode - */ -template -class ANALYZER_EXPORT AnalyzerSubConfigFactory : public AbstractAnalyzerSubConfigFactory -{ -public: - AbstractAnalyzerSubConfig *createGlobalSubConfig(QObject *parent) - { - return new GlobalConfigT(parent); - } - - AbstractAnalyzerSubConfig *createProjectSubConfig(QObject *parent) - { - return new ProjectConfigT(parent); - } -}; - /** * Shared interface for the global and per-project settings. * @@ -147,17 +107,14 @@ public: virtual QVariantMap toMap() const; protected: - void addSubConfig(AbstractAnalyzerSubConfig *config) - { - config->setParent(this); - } - virtual bool fromMap(const QVariantMap &map); AnalyzerSettings(QObject *parent); }; +typedef AbstractAnalyzerSubConfig *(*AnalyzerSubConfigFactory)(); + // global and local settings are loaded and saved differently, and they also handle suppressions // differently. /** @@ -179,13 +136,13 @@ public: void writeSettings() const; void readSettings(); - void registerSubConfigFactory(AbstractAnalyzerSubConfigFactory *factory); - QList subConfigFactories() const; + void registerSubConfigs(AnalyzerSubConfigFactory globalFactory, AnalyzerSubConfigFactory projectFactory); + QList projectSubConfigs() const; private: AnalyzerGlobalSettings(QObject *parent); static AnalyzerGlobalSettings *m_instance; - QList m_subConfigFactories; + QList m_projectSubConfigs; }; /** diff --git a/src/plugins/callgrind/callgrindplugin.cpp b/src/plugins/callgrind/callgrindplugin.cpp index 57a6e975adf..060a926bfa2 100644 --- a/src/plugins/callgrind/callgrindplugin.cpp +++ b/src/plugins/callgrind/callgrindplugin.cpp @@ -45,10 +45,19 @@ using namespace Analyzer; namespace Callgrind { namespace Internal { +static Analyzer::AbstractAnalyzerSubConfig *globalFactory() +{ + return new CallgrindGlobalSettings(); +} + +static Analyzer::AbstractAnalyzerSubConfig *projectFactory() +{ + return new CallgrindProjectSettings(); +} + bool CallgrindPlugin::initialize(const QStringList &/*arguments*/, QString */*errorString*/) { - typedef AnalyzerSubConfigFactory CallgrindConfigFactory; - AnalyzerGlobalSettings::instance()->registerSubConfigFactory(new CallgrindConfigFactory); + AnalyzerGlobalSettings::instance()->registerSubConfigs(&globalFactory, &projectFactory); AnalyzerManager::instance()->addTool(new CallgrindTool(this)); return true; diff --git a/src/plugins/callgrind/callgrindsettings.cpp b/src/plugins/callgrind/callgrindsettings.cpp index 4686da029ad..ad0902dc708 100644 --- a/src/plugins/callgrind/callgrindsettings.cpp +++ b/src/plugins/callgrind/callgrindsettings.cpp @@ -52,11 +52,6 @@ static const char callgrindCostFormatC[] = "Analyzer.Valgrind.Callgrind.CostForm namespace Callgrind { namespace Internal { -AbstractCallgrindSettings::AbstractCallgrindSettings(QObject *parent) - : AbstractAnalyzerSubConfig(parent) -{ -} - void AbstractCallgrindSettings::setEnableCacheSim(bool enable) { if (m_enableCacheSim == enable) @@ -178,11 +173,6 @@ QWidget *AbstractCallgrindSettings::createConfigWidget(QWidget *parent) } -CallgrindGlobalSettings::CallgrindGlobalSettings(QObject *parent) - : AbstractCallgrindSettings(parent) -{ -} - QVariantMap CallgrindGlobalSettings::defaults() const { QVariantMap map = AbstractCallgrindSettings::defaults(); @@ -232,10 +222,5 @@ void CallgrindGlobalSettings::setDetectCycles(bool detect) AnalyzerGlobalSettings::instance()->writeSettings(); } -CallgrindProjectSettings::CallgrindProjectSettings(QObject *parent) - : AbstractCallgrindSettings(parent) -{ -} - } // namespace Internal } // namespace Callgrind diff --git a/src/plugins/callgrind/callgrindsettings.h b/src/plugins/callgrind/callgrindsettings.h index bf7444c6386..f4892f0c771 100644 --- a/src/plugins/callgrind/callgrindsettings.h +++ b/src/plugins/callgrind/callgrindsettings.h @@ -50,7 +50,7 @@ class AbstractCallgrindSettings : public Analyzer::AbstractAnalyzerSubConfig Q_OBJECT public: - AbstractCallgrindSettings(QObject *parent = 0); + AbstractCallgrindSettings() {} bool enableCacheSim() const { return m_enableCacheSim; } bool enableBranchSim() const { return m_enableBranchSim; } @@ -116,7 +116,7 @@ class CallgrindGlobalSettings : public AbstractCallgrindSettings Q_OBJECT public: - CallgrindGlobalSettings(QObject *parent = 0); + CallgrindGlobalSettings() {} virtual bool fromMap(const QVariantMap &map); virtual QVariantMap defaults() const; @@ -144,7 +144,7 @@ class CallgrindProjectSettings : public AbstractCallgrindSettings Q_OBJECT public: - CallgrindProjectSettings(QObject *parent = 0); + CallgrindProjectSettings() {} }; } // namespace Internal diff --git a/src/plugins/memcheck/memcheckplugin.cpp b/src/plugins/memcheck/memcheckplugin.cpp index 08e3bcaa790..d4038ca91f1 100644 --- a/src/plugins/memcheck/memcheckplugin.cpp +++ b/src/plugins/memcheck/memcheckplugin.cpp @@ -48,10 +48,19 @@ using namespace Memcheck; using namespace Memcheck::Internal; +static Analyzer::AbstractAnalyzerSubConfig *globalFactory() +{ + return new MemcheckGlobalSettings(); +} + +static Analyzer::AbstractAnalyzerSubConfig *projectFactory() +{ + return new MemcheckProjectSettings(); +} + bool MemcheckPlugin::initialize(const QStringList &/*arguments*/, QString */*errorString*/) { - typedef AnalyzerSubConfigFactory MemcheckConfigFactory; - AnalyzerGlobalSettings::instance()->registerSubConfigFactory(new MemcheckConfigFactory); + AnalyzerGlobalSettings::instance()->registerSubConfigs(&globalFactory, &projectFactory); AnalyzerManager::instance()->addTool(new MemcheckTool(this)); return true; diff --git a/src/plugins/memcheck/memchecksettings.cpp b/src/plugins/memcheck/memchecksettings.cpp index 0736002abe1..66c609c83ae 100644 --- a/src/plugins/memcheck/memchecksettings.cpp +++ b/src/plugins/memcheck/memchecksettings.cpp @@ -55,11 +55,6 @@ static const char lastSuppressionHistoryC[] = "Analyzer.Valgrind.LastSuppression namespace Memcheck { namespace Internal { -AbstractMemcheckSettings::AbstractMemcheckSettings(QObject *parent) - : AbstractAnalyzerSubConfig(parent) -{ -} - QVariantMap AbstractMemcheckSettings::defaults() const { QVariantMap map; @@ -153,11 +148,6 @@ QWidget *AbstractMemcheckSettings::createConfigWidget(QWidget *parent) return new MemcheckConfigWidget(this, parent); } -MemcheckGlobalSettings::MemcheckGlobalSettings(QObject *parent) -: AbstractMemcheckSettings(parent) -{ -} - QStringList MemcheckGlobalSettings::suppressionFiles() const { return m_suppressionFiles; @@ -230,10 +220,6 @@ MemcheckGlobalSettings *globalMemcheckSettings() return ret; } -MemcheckProjectSettings::MemcheckProjectSettings(QObject *parent) -: AbstractMemcheckSettings(parent) -{ -} QVariantMap MemcheckProjectSettings::defaults() const { diff --git a/src/plugins/memcheck/memchecksettings.h b/src/plugins/memcheck/memchecksettings.h index 0ad3d8d9e70..f01883a3b89 100644 --- a/src/plugins/memcheck/memchecksettings.h +++ b/src/plugins/memcheck/memchecksettings.h @@ -48,7 +48,7 @@ class AbstractMemcheckSettings : public Analyzer::AbstractAnalyzerSubConfig Q_OBJECT public: - AbstractMemcheckSettings(QObject *parent); + AbstractMemcheckSettings() {} virtual bool fromMap(const QVariantMap &map); @@ -96,7 +96,7 @@ protected: class MemcheckGlobalSettings : public AbstractMemcheckSettings { public: - MemcheckGlobalSettings(QObject *parent); + MemcheckGlobalSettings() {} QStringList suppressionFiles() const; // in the global settings we change the internal list directly @@ -128,7 +128,7 @@ private: class MemcheckProjectSettings : public AbstractMemcheckSettings { public: - MemcheckProjectSettings(QObject *parent); + MemcheckProjectSettings() {} QStringList suppressionFiles() const; // in the project-specific settings we store a diff to the global list diff --git a/src/plugins/valgrindtoolbase/valgrindsettings.cpp b/src/plugins/valgrindtoolbase/valgrindsettings.cpp index 28333450581..69b7eecb715 100644 --- a/src/plugins/valgrindtoolbase/valgrindsettings.cpp +++ b/src/plugins/valgrindtoolbase/valgrindsettings.cpp @@ -48,14 +48,6 @@ static const QLatin1String groupC("Analyzer"); static const QLatin1String valgrindExeC("Analyzer.Valgrind.ValgrindExecutable"); -ValgrindSettings::ValgrindSettings(QObject *parent) -: AbstractAnalyzerSubConfig(parent) -{ -} - -ValgrindSettings::~ValgrindSettings() -{} - QVariantMap ValgrindSettings::defaults() const { QVariantMap map; diff --git a/src/plugins/valgrindtoolbase/valgrindsettings.h b/src/plugins/valgrindtoolbase/valgrindsettings.h index 236f6daea47..99f596f6258 100644 --- a/src/plugins/valgrindtoolbase/valgrindsettings.h +++ b/src/plugins/valgrindtoolbase/valgrindsettings.h @@ -52,8 +52,7 @@ class VALGRINDTOOLBASE_EXPORT ValgrindSettings : public Analyzer::AbstractAnalyz { Q_OBJECT public: - ValgrindSettings(QObject *parent); - virtual ~ValgrindSettings(); + ValgrindSettings() {} virtual QVariantMap toMap() const; virtual QVariantMap defaults() const; @@ -77,7 +76,7 @@ private: QString m_valgrindExecutable; }; -} -} +} // namespace Internal +} // namespace Valgrind #endif // VALGRIND_INTERNAL_ANALZYZERSETTINGS_H diff --git a/src/plugins/valgrindtoolbase/valgrindtoolbaseplugin.cpp b/src/plugins/valgrindtoolbase/valgrindtoolbaseplugin.cpp index 345dff8494c..8804348cfdc 100644 --- a/src/plugins/valgrindtoolbase/valgrindtoolbaseplugin.cpp +++ b/src/plugins/valgrindtoolbase/valgrindtoolbaseplugin.cpp @@ -44,20 +44,15 @@ using namespace Analyzer; using namespace Valgrind::Internal; -ValgrindToolbasePlugin::ValgrindToolbasePlugin() + +static AbstractAnalyzerSubConfig *configFactory() { - -} - -ValgrindToolbasePlugin::~ValgrindToolbasePlugin() -{ - + return new ValgrindSettings(); } bool ValgrindToolbasePlugin::initialize(const QStringList &/*arguments*/, QString */*errorString*/) { - typedef AnalyzerSubConfigFactory ValgrindConfigFactory; - AnalyzerGlobalSettings::instance()->registerSubConfigFactory(new ValgrindConfigFactory); + AnalyzerGlobalSettings::instance()->registerSubConfigs(&configFactory, &configFactory); return true; } diff --git a/src/plugins/valgrindtoolbase/valgrindtoolbaseplugin.h b/src/plugins/valgrindtoolbase/valgrindtoolbaseplugin.h index cf2b77106b0..ffb872fda4b 100644 --- a/src/plugins/valgrindtoolbase/valgrindtoolbaseplugin.h +++ b/src/plugins/valgrindtoolbase/valgrindtoolbaseplugin.h @@ -45,14 +45,13 @@ class ValgrindToolbasePlugin : public ExtensionSystem::IPlugin Q_OBJECT public: - ValgrindToolbasePlugin(); - ~ValgrindToolbasePlugin(); + ValgrindToolbasePlugin() {} virtual bool initialize(const QStringList &arguments, QString *errorString); virtual void extensionsInitialized(); }; } // namespace Internal -} +} // namespace Valgrind #endif // VALGRINDTOOLBASEPLUGIN_H