diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp index 20309a37fc0..6cb285d5d0a 100644 --- a/src/plugins/projectexplorer/runconfiguration.cpp +++ b/src/plugins/projectexplorer/runconfiguration.cpp @@ -78,13 +78,14 @@ namespace ProjectExplorer { // /////////////////////////////////////////////////////////////////////// -ISettingsAspect *ISettingsAspect::clone() const +ISettingsAspect::ISettingsAspect(RunConfiguration *runConfiguration) : + m_runConfiguration(runConfiguration) { - ISettingsAspect *other = create(); - QVariantMap data; - toMap(data); - other->fromMap(data); - return other; +} + +RunConfiguration *ISettingsAspect::runConfiguration() const +{ + return m_runConfiguration; } /////////////////////////////////////////////////////////////////////// diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h index 0ce3e46bd7d..751790522d3 100644 --- a/src/plugins/projectexplorer/runconfiguration.h +++ b/src/plugins/projectexplorer/runconfiguration.h @@ -77,14 +77,12 @@ class PROJECTEXPLORER_EXPORT ISettingsAspect : public QObject Q_OBJECT public: - ISettingsAspect() { } + ISettingsAspect(RunConfiguration *runConfiguration); /// Create a configuration widget for this settings aspect. virtual QWidget *createConfigWidget(QWidget *parent) = 0; - /// "Virtual default constructor" - virtual ISettingsAspect *create() const = 0; - /// "Virtual copy constructor" - ISettingsAspect *clone() const; + + RunConfiguration *runConfiguration() const; protected: /// @@ -93,6 +91,9 @@ protected: virtual void toMap(QVariantMap &map) const = 0; /// Read object state from @p map. virtual void fromMap(const QVariantMap &map) = 0; + +private: + RunConfiguration *m_runConfiguration; }; diff --git a/src/plugins/qmlprofiler/qmlprofilerrunconfigurationaspect.cpp b/src/plugins/qmlprofiler/qmlprofilerrunconfigurationaspect.cpp index 098b53bc971..acdcff8fc49 100644 --- a/src/plugins/qmlprofiler/qmlprofilerrunconfigurationaspect.cpp +++ b/src/plugins/qmlprofiler/qmlprofilerrunconfigurationaspect.cpp @@ -37,7 +37,7 @@ QmlProfilerRunConfigurationAspect::QmlProfilerRunConfigurationAspect( ProjectExplorer::RunConfiguration *parent) : ProjectExplorer::IRunConfigurationAspect(parent) { - setProjectSettings(new QmlProfilerSettings()); + setProjectSettings(new QmlProfilerSettings(parent)); setGlobalSettings(QmlProfilerPlugin::globalSettings()); setId(Constants::SETTINGS); setDisplayName(QCoreApplication::translate("QmlProfilerRunConfiguration", "QML Profiler Settings")); diff --git a/src/plugins/qmlprofiler/qmlprofilersettings.cpp b/src/plugins/qmlprofiler/qmlprofilersettings.cpp index afebcc3bc2d..1a6bdc63dde 100644 --- a/src/plugins/qmlprofiler/qmlprofilersettings.cpp +++ b/src/plugins/qmlprofiler/qmlprofilersettings.cpp @@ -34,7 +34,8 @@ namespace QmlProfiler { namespace Internal { -QmlProfilerSettings::QmlProfilerSettings() +QmlProfilerSettings::QmlProfilerSettings(ProjectExplorer::RunConfiguration *runConfiguration) : + ProjectExplorer::ISettingsAspect(runConfiguration) { QVariantMap defaults; defaults.insert(QLatin1String(Constants::FLUSH_INTERVAL), 1000); @@ -58,11 +59,6 @@ QWidget *QmlProfilerSettings::createConfigWidget(QWidget *parent) return new Internal::QmlProfilerConfigWidget(this, parent); } -ProjectExplorer::ISettingsAspect *QmlProfilerSettings::create() const -{ - return new QmlProfilerSettings; -} - bool QmlProfilerSettings::flushEnabled() const { return m_flushEnabled; diff --git a/src/plugins/qmlprofiler/qmlprofilersettings.h b/src/plugins/qmlprofiler/qmlprofilersettings.h index b452b3e9b7a..58bbbeef376 100644 --- a/src/plugins/qmlprofiler/qmlprofilersettings.h +++ b/src/plugins/qmlprofiler/qmlprofilersettings.h @@ -34,9 +34,8 @@ class QmlProfilerSettings : public ProjectExplorer::ISettingsAspect { Q_OBJECT public: - QmlProfilerSettings(); + QmlProfilerSettings(ProjectExplorer::RunConfiguration *runConfiguration = nullptr); QWidget *createConfigWidget(QWidget *parent); - ProjectExplorer::ISettingsAspect *create() const; bool flushEnabled() const; void setFlushEnabled(bool flushEnabled); diff --git a/src/plugins/valgrind/valgrindplugin.cpp b/src/plugins/valgrind/valgrindplugin.cpp index e739ceccbc7..f325135c24f 100644 --- a/src/plugins/valgrind/valgrindplugin.cpp +++ b/src/plugins/valgrind/valgrindplugin.cpp @@ -95,7 +95,7 @@ public: ValgrindRunConfigurationAspect(RunConfiguration *parent) : IRunConfigurationAspect(parent) { - setProjectSettings(new ValgrindProjectSettings()); + setProjectSettings(new ValgrindProjectSettings(parent)); setGlobalSettings(ValgrindPlugin::globalSettings()); setId(ANALYZER_VALGRIND_SETTINGS); setDisplayName(QCoreApplication::translate("Valgrind::Internal::ValgrindRunConfigurationAspect", diff --git a/src/plugins/valgrind/valgrindsettings.cpp b/src/plugins/valgrind/valgrindsettings.cpp index 08e2b627107..2e67014195f 100644 --- a/src/plugins/valgrind/valgrindsettings.cpp +++ b/src/plugins/valgrind/valgrindsettings.cpp @@ -113,6 +113,10 @@ void ValgrindBaseSettings::fromMap(const QVariantMap &map) emit changed(); } +ValgrindBaseSettings::ValgrindBaseSettings(ProjectExplorer::RunConfiguration *runConfiguration) : + ProjectExplorer::ISettingsAspect(runConfiguration) +{} + void ValgrindBaseSettings::toMap(QVariantMap &map) const { // General @@ -471,6 +475,11 @@ void ValgrindGlobalSettings::setShortenTemplates(bool on) // ////////////////////////////////////////////////////////////////// +ValgrindProjectSettings::ValgrindProjectSettings( + ProjectExplorer::RunConfiguration *runConfiguration) : + ValgrindBaseSettings(runConfiguration) +{} + QWidget *ValgrindProjectSettings::createConfigWidget(QWidget *parent) { return new ValgrindConfigWidget(this, parent, false); diff --git a/src/plugins/valgrind/valgrindsettings.h b/src/plugins/valgrind/valgrindsettings.h index d459b3b7b79..35eca30f4fc 100644 --- a/src/plugins/valgrind/valgrindsettings.h +++ b/src/plugins/valgrind/valgrindsettings.h @@ -59,7 +59,7 @@ public: LeakCheckOnFinishYes }; - ValgrindBaseSettings() {} + ValgrindBaseSettings(ProjectExplorer::RunConfiguration *runConfiguration = nullptr); void toMap(QVariantMap &map) const; void fromMap(const QVariantMap &map); @@ -186,8 +186,6 @@ public: QWidget *createConfigWidget(QWidget *parent) override; void toMap(QVariantMap &map) const; void fromMap(const QVariantMap &map); - ISettingsAspect *create() const { return new ValgrindGlobalSettings; } - /* * Global memcheck settings @@ -241,12 +239,11 @@ class ValgrindProjectSettings : public ValgrindBaseSettings Q_OBJECT public: - ValgrindProjectSettings() {} + ValgrindProjectSettings(ProjectExplorer::RunConfiguration *runConfiguration); QWidget *createConfigWidget(QWidget *parent) override; void toMap(QVariantMap &map) const; void fromMap(const QVariantMap &map); - ISettingsAspect *create() const { return new ValgrindProjectSettings; } /** * Per-project memcheck settings, saves a diff to the global suppression files list