forked from qt-creator/qt-creator
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>
This commit is contained in:
@@ -34,7 +34,7 @@
|
||||
|
||||
namespace Android {
|
||||
|
||||
class BaseStringListAspect : public ProjectExplorer::IRunConfigurationAspect
|
||||
class BaseStringListAspect : public ProjectExplorer::ProjectConfigurationAspect
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
namespace Debugger {
|
||||
|
||||
AnalyzerRunConfigWidget::AnalyzerRunConfigWidget(ProjectExplorer::IRunConfigurationAspect *aspect)
|
||||
AnalyzerRunConfigWidget::AnalyzerRunConfigWidget(ProjectExplorer::GlobalOrProjectAspect *aspect)
|
||||
{
|
||||
m_aspect = aspect;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -50,7 +50,7 @@ public:
|
||||
};
|
||||
|
||||
class DEBUGGER_EXPORT DebuggerRunConfigurationAspect
|
||||
: public ProjectExplorer::IRunConfigurationAspect
|
||||
: public ProjectExplorer::GlobalOrProjectAspect
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
|
||||
namespace ProjectExplorer {
|
||||
|
||||
class PROJECTEXPLORER_EXPORT EnvironmentAspect : public IRunConfigurationAspect
|
||||
class PROJECTEXPLORER_EXPORT EnvironmentAspect : public ProjectConfigurationAspect
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -393,22 +357,6 @@ bool RunConfiguration::fromMap(const QVariantMap &map)
|
||||
the need to add all options to the base class.
|
||||
*/
|
||||
|
||||
/*!
|
||||
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
|
||||
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
namespace QmlProfiler {
|
||||
namespace Internal {
|
||||
|
||||
class QmlProfilerRunConfigurationAspect : public ProjectExplorer::IRunConfigurationAspect
|
||||
class QmlProfilerRunConfigurationAspect : public ProjectExplorer::GlobalOrProjectAspect
|
||||
{
|
||||
public:
|
||||
QmlProfilerRunConfigurationAspect(ProjectExplorer::Target *);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -89,7 +89,7 @@ private:
|
||||
QPointer<QWidget> m_widget;
|
||||
};
|
||||
|
||||
class ValgrindRunConfigurationAspect : public IRunConfigurationAspect
|
||||
class ValgrindRunConfigurationAspect : public GlobalOrProjectAspect
|
||||
{
|
||||
public:
|
||||
ValgrindRunConfigurationAspect(Target *)
|
||||
|
||||
Reference in New Issue
Block a user