From f0baf01a2e2089c00cda6db42a3131c0a1af8cf1 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Thu, 26 Apr 2018 11:04:03 +0200 Subject: [PATCH] ProjectExplorer: Keep RunConfiguration in ISettingsAspect Any SettingsAspect that doesn't refer to the global settings has a specific RunConfiguration it is about. This can be very handy to know when constructing the actual settings. Right now there is no way to find out about it. Drop the clone() and create() methods. They weren't used anywhere and a proper implementation should take care of the runConfiguration member. Change-Id: Ie505a9b19707f8a1b6bf9cae73513cd3c30d0bca Reviewed-by: hjk --- src/plugins/projectexplorer/runconfiguration.cpp | 13 +++++++------ src/plugins/projectexplorer/runconfiguration.h | 11 ++++++----- .../qmlprofilerrunconfigurationaspect.cpp | 2 +- src/plugins/qmlprofiler/qmlprofilersettings.cpp | 8 ++------ src/plugins/qmlprofiler/qmlprofilersettings.h | 3 +-- src/plugins/valgrind/valgrindplugin.cpp | 2 +- src/plugins/valgrind/valgrindsettings.cpp | 9 +++++++++ src/plugins/valgrind/valgrindsettings.h | 7 ++----- 8 files changed, 29 insertions(+), 26 deletions(-) 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