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 <hjk@qt.io>
This commit is contained in:
Ulf Hermann
2018-04-26 11:04:03 +02:00
parent 9678ea5755
commit f0baf01a2e
8 changed files with 29 additions and 26 deletions

View File

@@ -78,13 +78,14 @@ namespace ProjectExplorer {
// //
/////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////
ISettingsAspect *ISettingsAspect::clone() const ISettingsAspect::ISettingsAspect(RunConfiguration *runConfiguration) :
m_runConfiguration(runConfiguration)
{ {
ISettingsAspect *other = create(); }
QVariantMap data;
toMap(data); RunConfiguration *ISettingsAspect::runConfiguration() const
other->fromMap(data); {
return other; return m_runConfiguration;
} }
/////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////

View File

@@ -77,14 +77,12 @@ class PROJECTEXPLORER_EXPORT ISettingsAspect : public QObject
Q_OBJECT Q_OBJECT
public: public:
ISettingsAspect() { } ISettingsAspect(RunConfiguration *runConfiguration);
/// Create a configuration widget for this settings aspect. /// Create a configuration widget for this settings aspect.
virtual QWidget *createConfigWidget(QWidget *parent) = 0; virtual QWidget *createConfigWidget(QWidget *parent) = 0;
/// "Virtual default constructor"
virtual ISettingsAspect *create() const = 0; RunConfiguration *runConfiguration() const;
/// "Virtual copy constructor"
ISettingsAspect *clone() const;
protected: protected:
/// ///
@@ -93,6 +91,9 @@ protected:
virtual void toMap(QVariantMap &map) const = 0; virtual void toMap(QVariantMap &map) const = 0;
/// Read object state from @p map. /// Read object state from @p map.
virtual void fromMap(const QVariantMap &map) = 0; virtual void fromMap(const QVariantMap &map) = 0;
private:
RunConfiguration *m_runConfiguration;
}; };

View File

@@ -37,7 +37,7 @@ QmlProfilerRunConfigurationAspect::QmlProfilerRunConfigurationAspect(
ProjectExplorer::RunConfiguration *parent) : ProjectExplorer::RunConfiguration *parent) :
ProjectExplorer::IRunConfigurationAspect(parent) ProjectExplorer::IRunConfigurationAspect(parent)
{ {
setProjectSettings(new QmlProfilerSettings()); setProjectSettings(new QmlProfilerSettings(parent));
setGlobalSettings(QmlProfilerPlugin::globalSettings()); setGlobalSettings(QmlProfilerPlugin::globalSettings());
setId(Constants::SETTINGS); setId(Constants::SETTINGS);
setDisplayName(QCoreApplication::translate("QmlProfilerRunConfiguration", "QML Profiler Settings")); setDisplayName(QCoreApplication::translate("QmlProfilerRunConfiguration", "QML Profiler Settings"));

View File

@@ -34,7 +34,8 @@
namespace QmlProfiler { namespace QmlProfiler {
namespace Internal { namespace Internal {
QmlProfilerSettings::QmlProfilerSettings() QmlProfilerSettings::QmlProfilerSettings(ProjectExplorer::RunConfiguration *runConfiguration) :
ProjectExplorer::ISettingsAspect(runConfiguration)
{ {
QVariantMap defaults; QVariantMap defaults;
defaults.insert(QLatin1String(Constants::FLUSH_INTERVAL), 1000); defaults.insert(QLatin1String(Constants::FLUSH_INTERVAL), 1000);
@@ -58,11 +59,6 @@ QWidget *QmlProfilerSettings::createConfigWidget(QWidget *parent)
return new Internal::QmlProfilerConfigWidget(this, parent); return new Internal::QmlProfilerConfigWidget(this, parent);
} }
ProjectExplorer::ISettingsAspect *QmlProfilerSettings::create() const
{
return new QmlProfilerSettings;
}
bool QmlProfilerSettings::flushEnabled() const bool QmlProfilerSettings::flushEnabled() const
{ {
return m_flushEnabled; return m_flushEnabled;

View File

@@ -34,9 +34,8 @@ class QmlProfilerSettings : public ProjectExplorer::ISettingsAspect
{ {
Q_OBJECT Q_OBJECT
public: public:
QmlProfilerSettings(); QmlProfilerSettings(ProjectExplorer::RunConfiguration *runConfiguration = nullptr);
QWidget *createConfigWidget(QWidget *parent); QWidget *createConfigWidget(QWidget *parent);
ProjectExplorer::ISettingsAspect *create() const;
bool flushEnabled() const; bool flushEnabled() const;
void setFlushEnabled(bool flushEnabled); void setFlushEnabled(bool flushEnabled);

View File

@@ -95,7 +95,7 @@ public:
ValgrindRunConfigurationAspect(RunConfiguration *parent) ValgrindRunConfigurationAspect(RunConfiguration *parent)
: IRunConfigurationAspect(parent) : IRunConfigurationAspect(parent)
{ {
setProjectSettings(new ValgrindProjectSettings()); setProjectSettings(new ValgrindProjectSettings(parent));
setGlobalSettings(ValgrindPlugin::globalSettings()); setGlobalSettings(ValgrindPlugin::globalSettings());
setId(ANALYZER_VALGRIND_SETTINGS); setId(ANALYZER_VALGRIND_SETTINGS);
setDisplayName(QCoreApplication::translate("Valgrind::Internal::ValgrindRunConfigurationAspect", setDisplayName(QCoreApplication::translate("Valgrind::Internal::ValgrindRunConfigurationAspect",

View File

@@ -113,6 +113,10 @@ void ValgrindBaseSettings::fromMap(const QVariantMap &map)
emit changed(); emit changed();
} }
ValgrindBaseSettings::ValgrindBaseSettings(ProjectExplorer::RunConfiguration *runConfiguration) :
ProjectExplorer::ISettingsAspect(runConfiguration)
{}
void ValgrindBaseSettings::toMap(QVariantMap &map) const void ValgrindBaseSettings::toMap(QVariantMap &map) const
{ {
// General // General
@@ -471,6 +475,11 @@ void ValgrindGlobalSettings::setShortenTemplates(bool on)
// //
////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////
ValgrindProjectSettings::ValgrindProjectSettings(
ProjectExplorer::RunConfiguration *runConfiguration) :
ValgrindBaseSettings(runConfiguration)
{}
QWidget *ValgrindProjectSettings::createConfigWidget(QWidget *parent) QWidget *ValgrindProjectSettings::createConfigWidget(QWidget *parent)
{ {
return new ValgrindConfigWidget(this, parent, false); return new ValgrindConfigWidget(this, parent, false);

View File

@@ -59,7 +59,7 @@ public:
LeakCheckOnFinishYes LeakCheckOnFinishYes
}; };
ValgrindBaseSettings() {} ValgrindBaseSettings(ProjectExplorer::RunConfiguration *runConfiguration = nullptr);
void toMap(QVariantMap &map) const; void toMap(QVariantMap &map) const;
void fromMap(const QVariantMap &map); void fromMap(const QVariantMap &map);
@@ -186,8 +186,6 @@ public:
QWidget *createConfigWidget(QWidget *parent) override; QWidget *createConfigWidget(QWidget *parent) override;
void toMap(QVariantMap &map) const; void toMap(QVariantMap &map) const;
void fromMap(const QVariantMap &map); void fromMap(const QVariantMap &map);
ISettingsAspect *create() const { return new ValgrindGlobalSettings; }
/* /*
* Global memcheck settings * Global memcheck settings
@@ -241,12 +239,11 @@ class ValgrindProjectSettings : public ValgrindBaseSettings
Q_OBJECT Q_OBJECT
public: public:
ValgrindProjectSettings() {} ValgrindProjectSettings(ProjectExplorer::RunConfiguration *runConfiguration);
QWidget *createConfigWidget(QWidget *parent) override; QWidget *createConfigWidget(QWidget *parent) override;
void toMap(QVariantMap &map) const; void toMap(QVariantMap &map) const;
void fromMap(const QVariantMap &map); void fromMap(const QVariantMap &map);
ISettingsAspect *create() const { return new ValgrindProjectSettings; }
/** /**
* Per-project memcheck settings, saves a diff to the global suppression files list * Per-project memcheck settings, saves a diff to the global suppression files list