forked from qt-creator/qt-creator
ProjectExplorer: Add an official way to connect aspects
Aspects are not completely orthogonal, e.g. working directory depends usually on environment etc. So far handling this used ad-hoc set up in the (Run)Configuration constructor. Lets make this an official second phase, that also reduces the need to use a specific construction order of aspects. Change-Id: Ic98b7d4e1ac9d46a32ec624bbbbfbbc32a40ab32 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -181,6 +181,12 @@ ProjectConfigurationAspect *ProjectConfiguration::aspect(Core::Id id) const
|
|||||||
return m_aspects.aspect(id);
|
return m_aspects.aspect(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ProjectConfiguration::acquaintAspects()
|
||||||
|
{
|
||||||
|
for (ProjectConfigurationAspect *aspect : m_aspects)
|
||||||
|
aspect->acquaintSiblings(m_aspects);
|
||||||
|
}
|
||||||
|
|
||||||
Core::Id ProjectExplorer::idFromMap(const QVariantMap &map)
|
Core::Id ProjectExplorer::idFromMap(const QVariantMap &map)
|
||||||
{
|
{
|
||||||
return Core::Id::fromSetting(map.value(QLatin1String(CONFIGURATION_ID_KEY)));
|
return Core::Id::fromSetting(map.value(QLatin1String(CONFIGURATION_ID_KEY)));
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ QT_END_NAMESPACE
|
|||||||
namespace ProjectExplorer {
|
namespace ProjectExplorer {
|
||||||
|
|
||||||
class Project;
|
class Project;
|
||||||
|
class ProjectConfigurationAspects;
|
||||||
|
|
||||||
class PROJECTEXPLORER_EXPORT ProjectConfigurationAspect : public QObject
|
class PROJECTEXPLORER_EXPORT ProjectConfigurationAspect : public QObject
|
||||||
{
|
{
|
||||||
@@ -68,6 +69,7 @@ public:
|
|||||||
virtual void fromMap(const QVariantMap &) {}
|
virtual void fromMap(const QVariantMap &) {}
|
||||||
virtual void toMap(QVariantMap &) const {}
|
virtual void toMap(QVariantMap &) const {}
|
||||||
virtual void addToConfigurationLayout(QFormLayout *) {}
|
virtual void addToConfigurationLayout(QFormLayout *) {}
|
||||||
|
virtual void acquaintSiblings(const ProjectConfigurationAspects &) {}
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void changed();
|
void changed();
|
||||||
@@ -168,6 +170,8 @@ public:
|
|||||||
ProjectConfigurationAspect *aspect(Core::Id id) const;
|
ProjectConfigurationAspect *aspect(Core::Id id) const;
|
||||||
template <typename T> T *aspect() const { return m_aspects.aspect<T>(); }
|
template <typename T> T *aspect() const { return m_aspects.aspect<T>(); }
|
||||||
|
|
||||||
|
void acquaintAspects();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void displayNameChanged();
|
void displayNameChanged();
|
||||||
void toolTipChanged();
|
void toolTipChanged();
|
||||||
|
|||||||
@@ -554,6 +554,7 @@ RunConfiguration *RunConfigurationCreationInfo::create(Target *target) const
|
|||||||
if (!rc)
|
if (!rc)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
|
rc->acquaintAspects();
|
||||||
rc->m_buildKey = buildKey;
|
rc->m_buildKey = buildKey;
|
||||||
rc->doAdditionalSetup(*this);
|
rc->doAdditionalSetup(*this);
|
||||||
rc->setDisplayName(displayName);
|
rc->setDisplayName(displayName);
|
||||||
@@ -569,6 +570,7 @@ RunConfiguration *RunConfigurationFactory::restore(Target *parent, const QVarian
|
|||||||
if (id.name().startsWith(factory->m_runConfigBaseId.name())) {
|
if (id.name().startsWith(factory->m_runConfigBaseId.name())) {
|
||||||
QTC_ASSERT(factory->m_creator, continue);
|
QTC_ASSERT(factory->m_creator, continue);
|
||||||
RunConfiguration *rc = factory->m_creator(parent);
|
RunConfiguration *rc = factory->m_creator(parent);
|
||||||
|
rc->acquaintAspects();
|
||||||
if (rc->fromMap(map))
|
if (rc->fromMap(map))
|
||||||
return rc;
|
return rc;
|
||||||
delete rc;
|
delete rc;
|
||||||
|
|||||||
Reference in New Issue
Block a user