diff options
author | hjk <hjk@qt.io> | 2018-09-13 15:48:16 +0200 |
---|---|---|
committer | hjk <hjk@qt.io> | 2018-09-18 06:13:21 +0000 |
commit | d421bc2fe3760c0dacb34da528aaa50b8f85217c (patch) | |
tree | 0fd58bc4a9bf73941a68033fe5007d522e74640e /src | |
parent | d9275913d308193bc610749067cb034310b6510c (diff) | |
download | qt-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')
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 *) |