diff --git a/src/plugins/analyzerbase/analyzermanager.cpp b/src/plugins/analyzerbase/analyzermanager.cpp index d2a4cf4e445..6b55479e117 100644 --- a/src/plugins/analyzerbase/analyzermanager.cpp +++ b/src/plugins/analyzerbase/analyzermanager.cpp @@ -684,11 +684,6 @@ QDockWidget *AnalyzerManager::createDockWidget(IAnalyzerTool *tool, const QStrin return dockWidget; } -QList AnalyzerManager::tools() -{ - return d->m_tools; -} - void AnalyzerManager::selectTool(IAnalyzerTool *tool, StartMode mode) { d->selectTool(d->actionFromToolAndMode(tool, mode)); diff --git a/src/plugins/analyzerbase/analyzermanager.h b/src/plugins/analyzerbase/analyzermanager.h index d8b862b0252..c20523cced0 100644 --- a/src/plugins/analyzerbase/analyzermanager.h +++ b/src/plugins/analyzerbase/analyzermanager.h @@ -75,7 +75,6 @@ public: static Utils::FancyMainWindow *mainWindow(); static void showMode(); - static QList tools(); static void selectTool(IAnalyzerTool *tool, StartMode mode); static void startTool(); static void stopTool(); diff --git a/src/plugins/analyzerbase/analyzerrunconfigwidget.h b/src/plugins/analyzerbase/analyzerrunconfigwidget.h index 09af6ee2ae8..43d3f89cb20 100644 --- a/src/plugins/analyzerbase/analyzerrunconfigwidget.h +++ b/src/plugins/analyzerbase/analyzerrunconfigwidget.h @@ -46,7 +46,6 @@ class DetailsWidget; namespace Analyzer { -class AnalyzerSettings; class AbstractAnalyzerSubConfig; namespace Internal { diff --git a/src/plugins/analyzerbase/analyzersettings.cpp b/src/plugins/analyzerbase/analyzersettings.cpp index e481edc36ef..c5fd34ec4e4 100644 --- a/src/plugins/analyzerbase/analyzersettings.cpp +++ b/src/plugins/analyzerbase/analyzersettings.cpp @@ -151,16 +151,18 @@ void AnalyzerGlobalSettings::registerConfig(AbstractAnalyzerSubConfig *config) } +static QList theAnalyzerSubConfigFactories() +{ + static QList theFactories; + return theFactories; +} + AnalyzerRunConfigurationAspect::AnalyzerRunConfigurationAspect() : AnalyzerSettings((QObject *)0), m_useGlobalSettings(true) { - QList tools = AnalyzerManager::tools(); // add sub configs - foreach (IAnalyzerTool *tool, tools) { - AbstractAnalyzerSubConfig *config = tool->createProjectSettings(); - if (config) - m_customConfigurations.append(config); - } + foreach (AnalyzerSubConfigFactory *factory, theAnalyzerSubConfigFactories()) + m_customConfigurations.append(factory->createProjectSettings()); m_subConfigs = AnalyzerGlobalSettings::instance()->subConfigs(); resetCustomToGlobalSettings(); @@ -184,6 +186,11 @@ AnalyzerRunConfigurationAspect::~AnalyzerRunConfigurationAspect() qDeleteAll(m_customConfigurations); } +void AnalyzerRunConfigurationAspect::registerConfigFactory(AnalyzerSubConfigFactory *factory) +{ + theAnalyzerSubConfigFactories().append(factory); +} + QString AnalyzerRunConfigurationAspect::displayName() const { return tr("Analyzer Settings"); diff --git a/src/plugins/analyzerbase/analyzersettings.h b/src/plugins/analyzerbase/analyzersettings.h index 3bbd8c18e5a..2c24b2007db 100644 --- a/src/plugins/analyzerbase/analyzersettings.h +++ b/src/plugins/analyzerbase/analyzersettings.h @@ -81,6 +81,17 @@ public: virtual AbstractAnalyzerSubConfig *clone() = 0; }; +class ANALYZER_EXPORT AnalyzerSubConfigFactory : public QObject +{ + Q_OBJECT + +public: + AnalyzerSubConfigFactory() {} + + /// Factory method to create the project tool setting + virtual AbstractAnalyzerSubConfig *createProjectSettings() = 0; +}; + /** * Shared interface for the global and per-project settings. * @@ -168,6 +179,8 @@ public: AnalyzerRunConfigurationAspect(const AnalyzerRunConfigurationAspect *other); ~AnalyzerRunConfigurationAspect(); + static void registerConfigFactory(AnalyzerSubConfigFactory *factory); + QString displayName() const; virtual QVariantMap toMap() const; AnalyzerRunConfigurationAspect *clone(ProjectExplorer::RunConfiguration *parent) const; diff --git a/src/plugins/analyzerbase/ianalyzertool.cpp b/src/plugins/analyzerbase/ianalyzertool.cpp index a982c2ae544..351166322f7 100644 --- a/src/plugins/analyzerbase/ianalyzertool.cpp +++ b/src/plugins/analyzerbase/ianalyzertool.cpp @@ -60,11 +60,6 @@ IAnalyzerTool::IAnalyzerTool(QObject *parent) : QObject(parent) {} -AbstractAnalyzerSubConfig *IAnalyzerTool::createProjectSettings() -{ - return 0; -} - static bool buildTypeAccepted(IAnalyzerTool::ToolMode toolMode, BuildConfiguration::BuildType buildType) { diff --git a/src/plugins/analyzerbase/ianalyzertool.h b/src/plugins/analyzerbase/ianalyzertool.h index 465434c82d3..1910490c2ed 100644 --- a/src/plugins/analyzerbase/ianalyzertool.h +++ b/src/plugins/analyzerbase/ianalyzertool.h @@ -113,9 +113,6 @@ public: /// Called when tools gets deselected. virtual void toolDeselected() const {} - - /// Factory method to create the project tool setting - virtual AbstractAnalyzerSubConfig *createProjectSettings(); }; } // namespace Analyzer diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp index 2eb42de8648..97ea2407ec1 100644 --- a/src/plugins/valgrind/memchecktool.cpp +++ b/src/plugins/valgrind/memchecktool.cpp @@ -297,11 +297,6 @@ QString MemcheckTool::description() const "memory leaks"); } -AbstractAnalyzerSubConfig *MemcheckTool::createProjectSettings() -{ - return new ValgrindProjectSettings(); -} - IAnalyzerTool::ToolMode MemcheckTool::toolMode() const { return DebugMode; diff --git a/src/plugins/valgrind/memchecktool.h b/src/plugins/valgrind/memchecktool.h index 5560f6c31cc..8099fc75e4e 100644 --- a/src/plugins/valgrind/memchecktool.h +++ b/src/plugins/valgrind/memchecktool.h @@ -89,9 +89,6 @@ public: QString displayName() const; QString description() const; - // Create the valgrind settings (for all valgrind tools) - Analyzer::AbstractAnalyzerSubConfig *createProjectSettings(); - private slots: void settingsDestroyed(QObject *settings); void maybeActiveRunConfigurationChanged(); diff --git a/src/plugins/valgrind/valgrindplugin.cpp b/src/plugins/valgrind/valgrindplugin.cpp index 1273cd2db0c..ba2951fdce3 100644 --- a/src/plugins/valgrind/valgrindplugin.cpp +++ b/src/plugins/valgrind/valgrindplugin.cpp @@ -48,9 +48,18 @@ using namespace Analyzer; namespace Valgrind { namespace Internal { +class ProjectSettingsFactory : public AnalyzerSubConfigFactory +{ + AbstractAnalyzerSubConfig *createProjectSettings() + { + return new ValgrindProjectSettings(); + } +}; + bool ValgrindPlugin::initialize(const QStringList &, QString *) { AnalyzerGlobalSettings::registerConfig(new ValgrindGlobalSettings()); + AnalyzerRunConfigurationAspect::registerConfigFactory(new ProjectSettingsFactory()); IAnalyzerTool *memcheckTool = new MemcheckTool(this); IAnalyzerTool *callgrindTool = new CallgrindTool(this);