summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2018-09-13 15:48:16 +0200
committerhjk <hjk@qt.io>2018-09-18 06:13:21 +0000
commitd421bc2fe3760c0dacb34da528aaa50b8f85217c (patch)
tree0fd58bc4a9bf73941a68033fe5007d522e74640e /src
parentd9275913d308193bc610749067cb034310b6510c (diff)
downloadqt-creator-d421bc2fe3760c0dacb34da528aaa50b8f85217c.tar.gz
ProjectExplorer: Split IRunConfigurationAspect
... into items that can be used generically in project configurations (ProjectConfigurationAspect) and items that have a choice between global and project settings (GlobalOrProjectAspect) Change-Id: I94831237bdbb18c339eb76eba131bf7f928933d6 Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/android/androidrunconfiguration.h2
-rw-r--r--src/plugins/debugger/analyzer/analyzerrunconfigwidget.cpp2
-rw-r--r--src/plugins/debugger/analyzer/analyzerrunconfigwidget.h4
-rw-r--r--src/plugins/debugger/debuggerrunconfigurationaspect.h2
-rw-r--r--src/plugins/projectexplorer/customexecutablerunconfiguration.cpp19
-rw-r--r--src/plugins/projectexplorer/environmentaspect.h2
-rw-r--r--src/plugins/projectexplorer/projectconfiguration.cpp41
-rw-r--r--src/plugins/projectexplorer/projectconfiguration.h67
-rw-r--r--src/plugins/projectexplorer/runconfiguration.cpp76
-rw-r--r--src/plugins/projectexplorer/runconfiguration.h69
-rw-r--r--src/plugins/projectexplorer/runconfigurationaspects.cpp2
-rw-r--r--src/plugins/projectexplorer/runconfigurationaspects.h14
-rw-r--r--src/plugins/projectexplorer/runsettingspropertiespage.cpp4
-rw-r--r--src/plugins/qmlprofiler/qmlprofilerrunconfigurationaspect.h2
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp2
-rw-r--r--src/plugins/valgrind/callgrindtool.cpp11
-rw-r--r--src/plugins/valgrind/memchecktool.cpp3
-rw-r--r--src/plugins/valgrind/valgrindengine.cpp4
-rw-r--r--src/plugins/valgrind/valgrindplugin.cpp2
19 files changed, 174 insertions, 154 deletions
diff --git a/src/plugins/android/androidrunconfiguration.h b/src/plugins/android/androidrunconfiguration.h
index b0beb5397c..bc6e10b90c 100644
--- a/src/plugins/android/androidrunconfiguration.h
+++ b/src/plugins/android/androidrunconfiguration.h
@@ -34,7 +34,7 @@
namespace Android {
-class BaseStringListAspect : public ProjectExplorer::IRunConfigurationAspect
+class BaseStringListAspect : public ProjectExplorer::ProjectConfigurationAspect
{
Q_OBJECT
diff --git a/src/plugins/debugger/analyzer/analyzerrunconfigwidget.cpp b/src/plugins/debugger/analyzer/analyzerrunconfigwidget.cpp
index b1e898c144..137e0612b4 100644
--- a/src/plugins/debugger/analyzer/analyzerrunconfigwidget.cpp
+++ b/src/plugins/debugger/analyzer/analyzerrunconfigwidget.cpp
@@ -38,7 +38,7 @@
namespace Debugger {
-AnalyzerRunConfigWidget::AnalyzerRunConfigWidget(ProjectExplorer::IRunConfigurationAspect *aspect)
+AnalyzerRunConfigWidget::AnalyzerRunConfigWidget(ProjectExplorer::GlobalOrProjectAspect *aspect)
{
m_aspect = aspect;
diff --git a/src/plugins/debugger/analyzer/analyzerrunconfigwidget.h b/src/plugins/debugger/analyzer/analyzerrunconfigwidget.h
index f7d8c6397e..ec35f2f5a9 100644
--- a/src/plugins/debugger/analyzer/analyzerrunconfigwidget.h
+++ b/src/plugins/debugger/analyzer/analyzerrunconfigwidget.h
@@ -44,14 +44,14 @@ class DEBUGGER_EXPORT AnalyzerRunConfigWidget : public QWidget
Q_OBJECT
public:
- AnalyzerRunConfigWidget(ProjectExplorer::IRunConfigurationAspect *aspect);
+ AnalyzerRunConfigWidget(ProjectExplorer::GlobalOrProjectAspect *aspect);
private:
void chooseSettings(int setting);
void restoreGlobal();
QWidget *m_configWidget;
- ProjectExplorer::IRunConfigurationAspect *m_aspect;
+ ProjectExplorer::GlobalOrProjectAspect *m_aspect;
QComboBox *m_settingsCombo;
QPushButton *m_restoreButton;
Utils::DetailsWidget *m_details;
diff --git a/src/plugins/debugger/debuggerrunconfigurationaspect.h b/src/plugins/debugger/debuggerrunconfigurationaspect.h
index f3088e2707..a361f234c4 100644
--- a/src/plugins/debugger/debuggerrunconfigurationaspect.h
+++ b/src/plugins/debugger/debuggerrunconfigurationaspect.h
@@ -50,7 +50,7 @@ public:
};
class DEBUGGER_EXPORT DebuggerRunConfigurationAspect
- : public ProjectExplorer::IRunConfigurationAspect
+ : public ProjectExplorer::GlobalOrProjectAspect
{
Q_OBJECT
diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
index 89e511a192..3689deb50c 100644
--- a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
+++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
@@ -59,6 +59,13 @@ const char CUSTOM_EXECUTABLE_ID[] = "ProjectExplorer.CustomExecutableRunConfigur
// Dialog prompting the user to complete the configuration.
+static void copyAspect(ProjectConfigurationAspect *source, ProjectConfigurationAspect *target)
+{
+ QVariantMap data;
+ source->toMap(data);
+ target->fromMap(data);
+}
+
class CustomExecutableDialog : public QDialog
{
public:
@@ -119,13 +126,13 @@ CustomExecutableDialog::CustomExecutableDialog(RunConfiguration *rc)
connect(m_executableChooser, &PathChooser::rawPathChanged,
this, &CustomExecutableDialog::changed);
- m_arguments.copyFrom(rc->extraAspect<ArgumentsAspect>());
+ copyAspect(rc->extraAspect<ArgumentsAspect>(), &m_arguments);
m_arguments.addToConfigurationLayout(layout);
- m_workingDirectory.copyFrom(rc->extraAspect<WorkingDirectoryAspect>());
+ copyAspect(rc->extraAspect<WorkingDirectoryAspect>(), &m_workingDirectory);
m_workingDirectory.addToConfigurationLayout(layout);
- m_terminal.copyFrom(rc->extraAspect<TerminalAspect>());
+ copyAspect(rc->extraAspect<TerminalAspect>(), &m_terminal);
m_terminal.addToConfigurationLayout(layout);
auto enviromentAspect = rc->extraAspect<EnvironmentAspect>();
@@ -140,9 +147,9 @@ void CustomExecutableDialog::accept()
{
auto executable = FileName::fromString(m_executableChooser->path());
m_rc->extraAspect<ExecutableAspect>()->setExecutable(executable);
- m_rc->extraAspect<ArgumentsAspect>()->copyFrom(&m_arguments);
- m_rc->extraAspect<WorkingDirectoryAspect>()->copyFrom(&m_workingDirectory);
- m_rc->extraAspect<TerminalAspect>()->copyFrom(&m_terminal);
+ copyAspect(&m_arguments, m_rc->extraAspect<ArgumentsAspect>());
+ copyAspect(&m_workingDirectory, m_rc->extraAspect<WorkingDirectoryAspect>());
+ copyAspect(&m_terminal, m_rc->extraAspect<TerminalAspect>());
QDialog::accept();
}
diff --git a/src/plugins/projectexplorer/environmentaspect.h b/src/plugins/projectexplorer/environmentaspect.h
index 7b0ff4be7e..7d0ecbe406 100644
--- a/src/plugins/projectexplorer/environmentaspect.h
+++ b/src/plugins/projectexplorer/environmentaspect.h
@@ -36,7 +36,7 @@
namespace ProjectExplorer {
-class PROJECTEXPLORER_EXPORT EnvironmentAspect : public IRunConfigurationAspect
+class PROJECTEXPLORER_EXPORT EnvironmentAspect : public ProjectConfigurationAspect
{
Q_OBJECT
diff --git a/src/plugins/projectexplorer/projectconfiguration.cpp b/src/plugins/projectexplorer/projectconfiguration.cpp
index a2213f86ae..a78f5624f3 100644
--- a/src/plugins/projectexplorer/projectconfiguration.cpp
+++ b/src/plugins/projectexplorer/projectconfiguration.cpp
@@ -25,6 +25,7 @@
#include "projectconfiguration.h"
+#include <utils/algorithm.h>
#include <utils/qtcassert.h>
using namespace ProjectExplorer;
@@ -33,6 +34,26 @@ const char CONFIGURATION_ID_KEY[] = "ProjectExplorer.ProjectConfiguration.Id";
const char DISPLAY_NAME_KEY[] = "ProjectExplorer.ProjectConfiguration.DisplayName";
const char DEFAULT_DISPLAY_NAME_KEY[] = "ProjectExplorer.ProjectConfiguration.DefaultDisplayName";
+// ProjectConfigurationAspect
+
+ProjectConfigurationAspect::ProjectConfigurationAspect() = default;
+
+ProjectConfigurationAspect::~ProjectConfigurationAspect() = default;
+
+void ProjectConfigurationAspect::setConfigWidgetCreator
+ (const ConfigWidgetCreator &configWidgetCreator)
+{
+ m_configWidgetCreator = configWidgetCreator;
+}
+
+QWidget *ProjectConfigurationAspect::createConfigWidget() const
+{
+ return m_configWidgetCreator ? m_configWidgetCreator() : nullptr;
+}
+
+
+// ProjectConfiguration
+
ProjectConfiguration::ProjectConfiguration(QObject *parent, Core::Id id)
: QObject(parent), m_id(id)
{
@@ -40,6 +61,11 @@ ProjectConfiguration::ProjectConfiguration(QObject *parent, Core::Id id)
setObjectName(id.toString());
}
+ProjectConfiguration::~ProjectConfiguration()
+{
+ qDeleteAll(m_aspects);
+}
+
Core::Id ProjectConfiguration::id() const
{
return m_id;
@@ -103,6 +129,10 @@ QVariantMap ProjectConfiguration::toMap() const
map.insert(QLatin1String(CONFIGURATION_ID_KEY), m_id.toSetting());
map.insert(QLatin1String(DISPLAY_NAME_KEY), m_displayName);
map.insert(QLatin1String(DEFAULT_DISPLAY_NAME_KEY), m_defaultDisplayName);
+
+ for (const auto &aspect : m_aspects)
+ aspect->toMap(map);
+
return map;
}
@@ -117,14 +147,25 @@ bool ProjectConfiguration::fromMap(const QVariantMap &map)
m_defaultDisplayName = map.value(QLatin1String(DEFAULT_DISPLAY_NAME_KEY),
m_defaultDisplayName.isEmpty() ?
m_displayName : m_defaultDisplayName).toString();
+
+ for (const auto &aspect : qAsConst(m_aspects))
+ aspect->fromMap(map);
+
return true;
}
+ProjectConfigurationAspect *ProjectConfiguration::extraAspect(Core::Id id) const
+{
+ return Utils::findOrDefault(m_aspects, Utils::equal(&ProjectConfigurationAspect::id, id));
+}
+
Core::Id ProjectExplorer::idFromMap(const QVariantMap &map)
{
return Core::Id::fromSetting(map.value(QLatin1String(CONFIGURATION_ID_KEY)));
}
+// StatefulProjectConfiguration
+
bool StatefulProjectConfiguration::isEnabled() const
{
return m_isEnabled;
diff --git a/src/plugins/projectexplorer/projectconfiguration.h b/src/plugins/projectexplorer/projectconfiguration.h
index f42e987093..9e72ce0cb8 100644
--- a/src/plugins/projectexplorer/projectconfiguration.h
+++ b/src/plugins/projectexplorer/projectconfiguration.h
@@ -34,10 +34,52 @@
#include <QString>
#include <QVariantMap>
+QT_BEGIN_NAMESPACE
+class QFormLayout;
+QT_END_NAMESPACE
+
namespace ProjectExplorer {
class Project;
+class PROJECTEXPLORER_EXPORT ProjectConfigurationAspect : public QObject
+{
+ Q_OBJECT
+
+public:
+ ProjectConfigurationAspect();
+ ~ProjectConfigurationAspect() override;
+
+ void setId(Core::Id id) { m_id = id; }
+ void setDisplayName(const QString &displayName) { m_displayName = displayName; }
+ void setSettingsKey(const QString &settingsKey) { m_settingsKey = settingsKey; }
+
+ Core::Id id() const { return m_id; }
+ QString displayName() const { return m_displayName; }
+ QString settingsKey() const { return m_settingsKey; }
+
+ bool isVisible() const { return m_visible; }
+ void setVisible(bool visible) { m_visible = visible; }
+
+ using ConfigWidgetCreator = std::function<QWidget *()>;
+ void setConfigWidgetCreator(const ConfigWidgetCreator &configWidgetCreator);
+ QWidget *createConfigWidget() const;
+
+ virtual void fromMap(const QVariantMap &) {}
+ virtual void toMap(QVariantMap &) const {}
+ virtual void addToConfigurationLayout(QFormLayout *) {}
+
+signals:
+ void changed();
+
+protected:
+ Core::Id m_id;
+ QString m_displayName;
+ QString m_settingsKey; // Name of data in settings.
+ bool m_visible = true;
+ ConfigWidgetCreator m_configWidgetCreator;
+};
+
class PROJECTEXPLORER_EXPORT ProjectConfiguration : public QObject
{
Q_OBJECT
@@ -46,7 +88,7 @@ protected:
explicit ProjectConfiguration(QObject *parent, Core::Id id);
public:
- ~ProjectConfiguration() override = default;
+ ~ProjectConfiguration() override;
Core::Id id() const;
@@ -74,10 +116,33 @@ public:
static QString settingsIdKey();
+ template<class Aspect, typename ...Args>
+ Aspect *addAspect(Args && ...args)
+ {
+ auto aspect = new Aspect(args...);
+ m_aspects.append(aspect);
+ return aspect;
+ }
+
+ const QList<ProjectConfigurationAspect *> aspects() const { return m_aspects; }
+
+ ProjectConfigurationAspect *extraAspect(Core::Id id) const;
+
+ template <typename T> T *extraAspect() const
+ {
+ for (ProjectConfigurationAspect *aspect : m_aspects)
+ if (T *result = qobject_cast<T *>(aspect))
+ return result;
+ return nullptr;
+ }
+
signals:
void displayNameChanged();
void toolTipChanged();
+protected:
+ QList<ProjectConfigurationAspect *> m_aspects;
+
private:
const Core::Id m_id;
QString m_displayName;
diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp
index ec55a0c3e8..cbf24c37e2 100644
--- a/src/plugins/projectexplorer/runconfiguration.cpp
+++ b/src/plugins/projectexplorer/runconfiguration.cpp
@@ -93,76 +93,48 @@ QWidget *ISettingsAspect::createConfigWidget() const
//
///////////////////////////////////////////////////////////////////////
-IRunConfigurationAspect::IRunConfigurationAspect() = default;
+GlobalOrProjectAspect::GlobalOrProjectAspect() = default;
-IRunConfigurationAspect::~IRunConfigurationAspect()
+GlobalOrProjectAspect::~GlobalOrProjectAspect()
{
delete m_projectSettings;
}
-/*!
- Returns the widget used to configure this run configuration. Ownership is
- transferred to the caller.
-*/
-
-QWidget *IRunConfigurationAspect::createConfigWidget() const
-{
- return m_configWidgetCreator ? m_configWidgetCreator() : nullptr;
-}
-
-void IRunConfigurationAspect::copyFrom(IRunConfigurationAspect *source)
-{
- QTC_ASSERT(source, return);
- QVariantMap data;
- source->toMap(data);
- fromMap(data);
-}
-
-void IRunConfigurationAspect::setProjectSettings(ISettingsAspect *settings)
+void GlobalOrProjectAspect::setProjectSettings(ISettingsAspect *settings)
{
m_projectSettings = settings;
}
-void IRunConfigurationAspect::setGlobalSettings(ISettingsAspect *settings)
+void GlobalOrProjectAspect::setGlobalSettings(ISettingsAspect *settings)
{
m_globalSettings = settings;
}
-void IRunConfigurationAspect::setUsingGlobalSettings(bool value)
+void GlobalOrProjectAspect::setUsingGlobalSettings(bool value)
{
m_useGlobalSettings = value;
}
-ISettingsAspect *IRunConfigurationAspect::currentSettings() const
+ISettingsAspect *GlobalOrProjectAspect::currentSettings() const
{
return m_useGlobalSettings ? m_globalSettings : m_projectSettings;
}
-void IRunConfigurationAspect::fromMap(const QVariantMap &map)
+void GlobalOrProjectAspect::fromMap(const QVariantMap &map)
{
if (m_projectSettings)
m_projectSettings->fromMap(map);
m_useGlobalSettings = map.value(m_id.toString() + QLatin1String(".UseGlobalSettings"), true).toBool();
}
-void IRunConfigurationAspect::toMap(QVariantMap &map) const
+void GlobalOrProjectAspect::toMap(QVariantMap &map) const
{
if (m_projectSettings)
m_projectSettings->toMap(map);
map.insert(m_id.toString() + QLatin1String(".UseGlobalSettings"), m_useGlobalSettings);
}
-void IRunConfigurationAspect::addToConfigurationLayout(QFormLayout *layout)
-{
- Q_UNUSED(layout);
-}
-
-void IRunConfigurationAspect::setConfigWidgetCreator(const ConfigWidgetCreator &runConfigWidgetCreator)
-{
- m_configWidgetCreator = runConfigWidgetCreator;
-}
-
-void IRunConfigurationAspect::resetProjectToGlobalSettings()
+void GlobalOrProjectAspect::resetProjectToGlobalSettings()
{
QTC_ASSERT(m_globalSettings, return);
QVariantMap map;
@@ -232,10 +204,7 @@ RunConfiguration::RunConfiguration(Target *target, Core::Id id)
m_aspects.append(factory(target));
}
-RunConfiguration::~RunConfiguration()
-{
- qDeleteAll(m_aspects);
-}
+RunConfiguration::~RunConfiguration() = default;
bool RunConfiguration::isActive() const
{
@@ -256,8 +225,8 @@ QWidget *RunConfiguration::createConfigurationWidget()
auto widget = new QWidget;
auto formLayout = new QFormLayout(widget);
- for (IRunConfigurationAspect *aspect : m_aspects) {
- if (aspect->m_visible)
+ for (ProjectConfigurationAspect *aspect : m_aspects) {
+ if (aspect->isVisible())
aspect->addToConfigurationLayout(formLayout);
}
@@ -344,8 +313,6 @@ QVariantMap RunConfiguration::toMap() const
const Core::Id mangled = id().withSuffix(m_buildKey);
map.insert(settingsIdKey(), mangled.toSetting());
}
- foreach (IRunConfigurationAspect *aspect, m_aspects)
- aspect->toMap(map);
return map;
}
@@ -375,9 +342,6 @@ bool RunConfiguration::fromMap(const QVariantMap &map)
const Core::Id mangledId = Core::Id::fromSetting(map.value(settingsIdKey()));
m_buildKey = mangledId.suffixAfter(id());
- foreach (IRunConfigurationAspect *aspect, m_aspects)
- aspect->fromMap(map);
-
return true;
}
@@ -394,22 +358,6 @@ bool RunConfiguration::fromMap(const QVariantMap &map)
*/
/*!
- Returns extra aspects.
-
- \sa ProjectExplorer::IRunConfigurationAspect
-*/
-
-const QList<IRunConfigurationAspect *> RunConfiguration::aspects() const
-{
- return m_aspects;
-}
-
-IRunConfigurationAspect *RunConfiguration::extraAspect(Core::Id id) const
-{
- return Utils::findOrDefault(m_aspects, Utils::equal(&IRunConfigurationAspect::id, id));
-}
-
-/*!
\internal
\class ProjectExplorer::Runnable
diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h
index badc0fd0f2..aaac5f7595 100644
--- a/src/plugins/projectexplorer/runconfiguration.h
+++ b/src/plugins/projectexplorer/runconfiguration.h
@@ -43,16 +43,12 @@
#include <functional>
#include <memory>
-QT_BEGIN_NAMESPACE
-class QFormLayout;
-QT_END_NAMESPACE
-
namespace Utils { class OutputFormatter; }
namespace ProjectExplorer {
class Abi;
class BuildConfiguration;
-class IRunConfigurationAspect;
+class GlobalOrProjectAspect;
class Node;
class RunConfigurationFactory;
class RunConfiguration;
@@ -86,7 +82,7 @@ public:
protected:
///
- friend class IRunConfigurationAspect;
+ friend class GlobalOrProjectAspect;
/// Converts current object into map for storage.
virtual void toMap(QVariantMap &map) const = 0;
/// Read object state from @p map.
@@ -102,56 +98,34 @@ protected:
*
*/
-class PROJECTEXPLORER_EXPORT IRunConfigurationAspect : public QObject
+class PROJECTEXPLORER_EXPORT GlobalOrProjectAspect : public ProjectConfigurationAspect
{
Q_OBJECT
public:
- IRunConfigurationAspect();
- ~IRunConfigurationAspect() override;
+ GlobalOrProjectAspect();
+ ~GlobalOrProjectAspect() override;
- using ConfigWidgetCreator = std::function<QWidget *()>;
- void setConfigWidgetCreator(const ConfigWidgetCreator &configWidgetCreator);
- QWidget *createConfigWidget() const;
- void copyFrom(IRunConfigurationAspect *other);
-
- void setId(Core::Id id) { m_id = id; }
- void setDisplayName(const QString &displayName) { m_displayName = displayName; }
- void setSettingsKey(const QString &settingsKey) { m_settingsKey = settingsKey; }
void setProjectSettings(ISettingsAspect *settings);
void setGlobalSettings(ISettingsAspect *settings);
- Core::Id id() const { return m_id; }
- QString displayName() const { return m_displayName; }
- QString settingsKey() const { return m_settingsKey; }
bool isUsingGlobalSettings() const { return m_useGlobalSettings; }
void setUsingGlobalSettings(bool value);
- void setVisible(bool visible) { m_visible = visible; }
void resetProjectToGlobalSettings();
ISettingsAspect *projectSettings() const { return m_projectSettings; }
ISettingsAspect *globalSettings() const { return m_globalSettings; }
ISettingsAspect *currentSettings() const;
- virtual void addToConfigurationLayout(QFormLayout *layout);
-
-signals:
- void changed();
-
protected:
friend class RunConfiguration;
- virtual void fromMap(const QVariantMap &map);
- virtual void toMap(QVariantMap &data) const;
+ void fromMap(const QVariantMap &map) override;
+ void toMap(QVariantMap &data) const override;
private:
- Core::Id m_id;
- QString m_displayName;
- QString m_settingsKey; // Name of data in settings.
bool m_useGlobalSettings = false;
- bool m_visible = true;
ISettingsAspect *m_projectSettings = nullptr; // Owned if present.
ISettingsAspect *m_globalSettings = nullptr; // Not owned.
- ConfigWidgetCreator m_configWidgetCreator;
};
class PROJECTEXPLORER_EXPORT Runnable
@@ -197,17 +171,6 @@ public:
bool fromMap(const QVariantMap &map) override;
QVariantMap toMap() const override;
- const QList<IRunConfigurationAspect *> aspects() const;
- IRunConfigurationAspect *extraAspect(Core::Id id) const;
-
- template <typename T> T *extraAspect() const
- {
- foreach (IRunConfigurationAspect *aspect, m_aspects)
- if (T *result = qobject_cast<T *>(aspect))
- return result;
- return nullptr;
- }
-
virtual Runnable runnable() const;
virtual Abi abi() const;
@@ -217,18 +180,17 @@ public:
// The BuildTargetInfo corresponding to the buildKey.
BuildTargetInfo buildTargetInfo() const;
- template<class Aspect, typename ...Args>
- Aspect *addAspect(Args && ...args)
- {
- auto aspect = new Aspect(args...);
- m_aspects.append(aspect);
- return aspect;
- }
-
static RunConfiguration *startupRunConfiguration();
virtual bool canRunForNode(const ProjectExplorer::Node *) const { return false; }
- using AspectFactory = std::function<IRunConfigurationAspect *(Target *)>;
+ template <class T = ISettingsAspect> T *currentSettings(Core::Id id) const
+ {
+ if (auto aspect = qobject_cast<GlobalOrProjectAspect *>(extraAspect(id)))
+ return qobject_cast<T *>(aspect->currentSettings());
+ return nullptr;
+ }
+
+ using AspectFactory = std::function<ProjectConfigurationAspect *(Target *)>;
template <class T> static void registerAspect()
{
addAspectFactory([](Target *target) { return new T(target); });
@@ -258,7 +220,6 @@ private:
friend class RunConfigurationCreationInfo;
- QList<IRunConfigurationAspect *> m_aspects;
QString m_buildKey;
std::function<Utils::OutputFormatter *(Project *)> m_outputFormatterCreator;
};
diff --git a/src/plugins/projectexplorer/runconfigurationaspects.cpp b/src/plugins/projectexplorer/runconfigurationaspects.cpp
index 6e0e99383a..a87ee68d0b 100644
--- a/src/plugins/projectexplorer/runconfigurationaspects.cpp
+++ b/src/plugins/projectexplorer/runconfigurationaspects.cpp
@@ -589,7 +589,7 @@ void ExecutableAspect::setExecutable(const FileName &executable)
void ExecutableAspect::setSettingsKey(const QString &key)
{
- IRunConfigurationAspect::setSettingsKey(key);
+ ProjectConfigurationAspect::setSettingsKey(key);
m_executable.setSettingsKey(key);
}
diff --git a/src/plugins/projectexplorer/runconfigurationaspects.h b/src/plugins/projectexplorer/runconfigurationaspects.h
index 14b9ef5045..c17efc3197 100644
--- a/src/plugins/projectexplorer/runconfigurationaspects.h
+++ b/src/plugins/projectexplorer/runconfigurationaspects.h
@@ -43,7 +43,7 @@ QT_END_NAMESPACE
namespace ProjectExplorer {
-class PROJECTEXPLORER_EXPORT TerminalAspect : public IRunConfigurationAspect
+class PROJECTEXPLORER_EXPORT TerminalAspect : public ProjectConfigurationAspect
{
Q_OBJECT
@@ -66,7 +66,7 @@ private:
QPointer<QCheckBox> m_checkBox; // Owned by RunConfigWidget
};
-class PROJECTEXPLORER_EXPORT WorkingDirectoryAspect : public IRunConfigurationAspect
+class PROJECTEXPLORER_EXPORT WorkingDirectoryAspect : public ProjectConfigurationAspect
{
Q_OBJECT
@@ -95,7 +95,7 @@ private:
QPointer<QToolButton> m_resetButton;
};
-class PROJECTEXPLORER_EXPORT ArgumentsAspect : public IRunConfigurationAspect
+class PROJECTEXPLORER_EXPORT ArgumentsAspect : public ProjectConfigurationAspect
{
Q_OBJECT
@@ -120,7 +120,7 @@ private:
QPointer<Utils::FancyLineEdit> m_chooser;
};
-class PROJECTEXPLORER_EXPORT BaseBoolAspect : public IRunConfigurationAspect
+class PROJECTEXPLORER_EXPORT BaseBoolAspect : public ProjectConfigurationAspect
{
Q_OBJECT
@@ -145,7 +145,7 @@ private:
bool m_value = false;
bool m_defaultValue = false;
QString m_label;
- QPointer<QCheckBox> m_checkBox; // Owned by RunConfigWidget
+ QPointer<QCheckBox> m_checkBox; // Owned by configuration widget
};
class PROJECTEXPLORER_EXPORT UseLibraryPathsAspect : public BaseBoolAspect
@@ -164,7 +164,7 @@ public:
UseDyldSuffixAspect();
};
-class PROJECTEXPLORER_EXPORT BaseStringAspect : public IRunConfigurationAspect
+class PROJECTEXPLORER_EXPORT BaseStringAspect : public ProjectConfigurationAspect
{
Q_OBJECT
@@ -219,7 +219,7 @@ private:
QPixmap m_labelPixmap;
};
-class PROJECTEXPLORER_EXPORT ExecutableAspect : public IRunConfigurationAspect
+class PROJECTEXPLORER_EXPORT ExecutableAspect : public ProjectConfigurationAspect
{
Q_OBJECT
diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.cpp b/src/plugins/projectexplorer/runsettingspropertiespage.cpp
index 4a5c60d556..992b2cbcc7 100644
--- a/src/plugins/projectexplorer/runsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/runsettingspropertiespage.cpp
@@ -528,11 +528,11 @@ QString RunSettingsWidget::uniqueRCName(const QString &name)
void RunSettingsWidget::addRunControlWidgets()
{
- for (IRunConfigurationAspect *aspect : m_runConfiguration->aspects()) {
+ for (ProjectConfigurationAspect *aspect : m_runConfiguration->aspects()) {
if (QWidget *rcw = aspect->createConfigWidget()) {
auto label = new QLabel(this);
label->setText(aspect->displayName());
- connect(aspect, &IRunConfigurationAspect::changed, label, [label, aspect] {
+ connect(aspect, &GlobalOrProjectAspect::changed, label, [label, aspect] {
label->setText(aspect->displayName());
});
addSubWidget(rcw, label);
diff --git a/src/plugins/qmlprofiler/qmlprofilerrunconfigurationaspect.h b/src/plugins/qmlprofiler/qmlprofilerrunconfigurationaspect.h
index 7a175d31d2..fb281a77b3 100644
--- a/src/plugins/qmlprofiler/qmlprofilerrunconfigurationaspect.h
+++ b/src/plugins/qmlprofiler/qmlprofilerrunconfigurationaspect.h
@@ -30,7 +30,7 @@
namespace QmlProfiler {
namespace Internal {
-class QmlProfilerRunConfigurationAspect : public ProjectExplorer::IRunConfigurationAspect
+class QmlProfilerRunConfigurationAspect : public ProjectExplorer::GlobalOrProjectAspect
{
public:
QmlProfilerRunConfigurationAspect(ProjectExplorer::Target *);
diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp
index e59ac1c081..8d99294c67 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp
+++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp
@@ -68,7 +68,7 @@ static bool caseInsensitiveLessThan(const QString &s1, const QString &s2)
// MainQmlFileAspect
-class MainQmlFileAspect : public IRunConfigurationAspect
+class MainQmlFileAspect : public ProjectConfigurationAspect
{
public:
explicit MainQmlFileAspect(QmlProject *project);
diff --git a/src/plugins/valgrind/callgrindtool.cpp b/src/plugins/valgrind/callgrindtool.cpp
index a64e5d4f27..639f143fb9 100644
--- a/src/plugins/valgrind/callgrindtool.cpp
+++ b/src/plugins/valgrind/callgrindtool.cpp
@@ -766,12 +766,11 @@ void CallgrindTool::setupRunner(CallgrindToolRunner *toolRunner)
QTC_ASSERT(m_visualization, return);
// apply project settings
- if (IRunConfigurationAspect *analyzerAspect = runControl->runConfiguration()->extraAspect(ANALYZER_VALGRIND_SETTINGS)) {
- if (const ValgrindBaseSettings *settings = qobject_cast<ValgrindBaseSettings *>(analyzerAspect->currentSettings())) {
- m_visualization->setMinimumInclusiveCostRatio(settings->visualisationMinimumInclusiveCostRatio() / 100.0);
- m_proxyModel.setMinimumInclusiveCostRatio(settings->minimumInclusiveCostRatio() / 100.0);
- m_dataModel.setVerboseToolTipsEnabled(settings->enableEventToolTips());
- }
+ if (auto settings = runControl->runConfiguration()
+ ->currentSettings<ValgrindBaseSettings>(ANALYZER_VALGRIND_SETTINGS)) {
+ m_visualization->setMinimumInclusiveCostRatio(settings->visualisationMinimumInclusiveCostRatio() / 100.0);
+ m_proxyModel.setMinimumInclusiveCostRatio(settings->minimumInclusiveCostRatio() / 100.0);
+ m_dataModel.setVerboseToolTipsEnabled(settings->enableEventToolTips());
}
m_toolBusy = true;
diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp
index e658672022..e5f5878ac3 100644
--- a/src/plugins/valgrind/memchecktool.cpp
+++ b/src/plugins/valgrind/memchecktool.cpp
@@ -914,8 +914,7 @@ void MemcheckTool::maybeActiveRunConfigurationChanged()
if (Project *project = SessionManager::startupProject())
if (Target *target = project->activeTarget())
if (RunConfiguration *rc = target->activeRunConfiguration())
- if (IRunConfigurationAspect *aspect = rc->extraAspect(ANALYZER_VALGRIND_SETTINGS))
- settings = qobject_cast<ValgrindBaseSettings *>(aspect->currentSettings());
+ settings = rc->currentSettings<ValgrindBaseSettings>(ANALYZER_VALGRIND_SETTINGS);
if (!settings) // fallback to global settings
settings = ValgrindPlugin::globalSettings();
diff --git a/src/plugins/valgrind/valgrindengine.cpp b/src/plugins/valgrind/valgrindengine.cpp
index b286fd138d..6f2a6f75ce 100644
--- a/src/plugins/valgrind/valgrindengine.cpp
+++ b/src/plugins/valgrind/valgrindengine.cpp
@@ -58,8 +58,8 @@ ValgrindToolRunner::ValgrindToolRunner(RunControl *runControl)
runControl->setIcon(ProjectExplorer::Icons::ANALYZER_START_SMALL_TOOLBAR);
setSupportsReRunning(false);
- if (IRunConfigurationAspect *aspect = runControl->runConfiguration()->extraAspect(ANALYZER_VALGRIND_SETTINGS))
- m_settings = qobject_cast<ValgrindBaseSettings *>(aspect->currentSettings());
+ m_settings = runControl->runConfiguration()
+ ->currentSettings<ValgrindBaseSettings>(ANALYZER_VALGRIND_SETTINGS);
if (!m_settings)
m_settings = ValgrindPlugin::globalSettings();
diff --git a/src/plugins/valgrind/valgrindplugin.cpp b/src/plugins/valgrind/valgrindplugin.cpp
index fe6b2aacad..9348c99765 100644
--- a/src/plugins/valgrind/valgrindplugin.cpp
+++ b/src/plugins/valgrind/valgrindplugin.cpp
@@ -89,7 +89,7 @@ private:
QPointer<QWidget> m_widget;
};
-class ValgrindRunConfigurationAspect : public IRunConfigurationAspect
+class ValgrindRunConfigurationAspect : public GlobalOrProjectAspect
{
public:
ValgrindRunConfigurationAspect(Target *)