forked from qt-creator/qt-creator
Utils: Allow more finegrained subaspect ownership in AspectContainer
Currently this luckily conincides with the register/addAspect schism but that's not necessarily true in the future. Change-Id: I05a59d74182dbdf81193ebd790d6f9bab2d30439 Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
This commit is contained in:
@@ -2399,9 +2399,9 @@ namespace Internal {
|
|||||||
class AspectContainerPrivate
|
class AspectContainerPrivate
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
QList<BaseAspect *> m_items; // Not owned
|
QList<BaseAspect *> m_items; // Both owned and non-owned.
|
||||||
|
QList<BaseAspect *> m_ownedItems; // Owned only.
|
||||||
bool m_autoApply = true;
|
bool m_autoApply = true;
|
||||||
bool m_ownsSubAspects = false;
|
|
||||||
QStringList m_settingsGroup;
|
QStringList m_settingsGroup;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2416,17 +2416,18 @@ AspectContainer::AspectContainer(QObject *parent)
|
|||||||
*/
|
*/
|
||||||
AspectContainer::~AspectContainer()
|
AspectContainer::~AspectContainer()
|
||||||
{
|
{
|
||||||
if (d->m_ownsSubAspects)
|
qDeleteAll(d->m_ownedItems);
|
||||||
qDeleteAll(d->m_items);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\internal
|
\internal
|
||||||
*/
|
*/
|
||||||
void AspectContainer::registerAspect(BaseAspect *aspect)
|
void AspectContainer::registerAspect(BaseAspect *aspect, bool takeOwnership)
|
||||||
{
|
{
|
||||||
aspect->setAutoApply(d->m_autoApply);
|
aspect->setAutoApply(d->m_autoApply);
|
||||||
d->m_items.append(aspect);
|
d->m_items.append(aspect);
|
||||||
|
if (takeOwnership)
|
||||||
|
d->m_ownedItems.append(aspect);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AspectContainer::registerAspects(const AspectContainer &aspects)
|
void AspectContainer::registerAspects(const AspectContainer &aspects)
|
||||||
@@ -2547,11 +2548,6 @@ void AspectContainer::setAutoApply(bool on)
|
|||||||
aspect->setAutoApply(on);
|
aspect->setAutoApply(on);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AspectContainer::setOwnsSubAspects(bool on)
|
|
||||||
{
|
|
||||||
d->m_ownsSubAspects = on;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool AspectContainer::isDirty() const
|
bool AspectContainer::isDirty() const
|
||||||
{
|
{
|
||||||
for (BaseAspect *aspect : std::as_const(d->m_items)) {
|
for (BaseAspect *aspect : std::as_const(d->m_items)) {
|
||||||
|
|||||||
@@ -651,14 +651,14 @@ public:
|
|||||||
AspectContainer(const AspectContainer &) = delete;
|
AspectContainer(const AspectContainer &) = delete;
|
||||||
AspectContainer &operator=(const AspectContainer &) = delete;
|
AspectContainer &operator=(const AspectContainer &) = delete;
|
||||||
|
|
||||||
void registerAspect(BaseAspect *aspect);
|
void registerAspect(BaseAspect *aspect, bool takeOwnership = false);
|
||||||
void registerAspects(const AspectContainer &aspects);
|
void registerAspects(const AspectContainer &aspects);
|
||||||
|
|
||||||
template <class Aspect, typename ...Args>
|
template <class Aspect, typename ...Args>
|
||||||
Aspect *addAspect(Args && ...args)
|
Aspect *addAspect(Args && ...args)
|
||||||
{
|
{
|
||||||
auto aspect = new Aspect(args...);
|
auto aspect = new Aspect(args...);
|
||||||
registerAspect(aspect);
|
registerAspect(aspect, true);
|
||||||
return aspect;
|
return aspect;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -679,7 +679,6 @@ public:
|
|||||||
bool equals(const AspectContainer &other) const;
|
bool equals(const AspectContainer &other) const;
|
||||||
void copyFrom(const AspectContainer &other);
|
void copyFrom(const AspectContainer &other);
|
||||||
void setAutoApply(bool on);
|
void setAutoApply(bool on);
|
||||||
void setOwnsSubAspects(bool on);
|
|
||||||
bool isDirty() const;
|
bool isDirty() const;
|
||||||
|
|
||||||
template <typename T> T *aspect() const
|
template <typename T> T *aspect() const
|
||||||
|
|||||||
@@ -21,8 +21,6 @@ public:
|
|||||||
CopyStepBase(BuildStepList *bsl, Id id)
|
CopyStepBase(BuildStepList *bsl, Id id)
|
||||||
: BuildStep(bsl, id)
|
: BuildStep(bsl, id)
|
||||||
{
|
{
|
||||||
setOwnsSubAspects(false);
|
|
||||||
|
|
||||||
m_sourceAspect.setSettingsKey(SOURCE_KEY);
|
m_sourceAspect.setSettingsKey(SOURCE_KEY);
|
||||||
m_sourceAspect.setLabelText(Tr::tr("Source:"));
|
m_sourceAspect.setLabelText(Tr::tr("Source:"));
|
||||||
|
|
||||||
|
|||||||
@@ -22,8 +22,6 @@ ProjectConfiguration::ProjectConfiguration(QObject *parent, Utils::Id id)
|
|||||||
: AspectContainer(parent)
|
: AspectContainer(parent)
|
||||||
, m_id(id)
|
, m_id(id)
|
||||||
{
|
{
|
||||||
setOwnsSubAspects(true);
|
|
||||||
|
|
||||||
QTC_CHECK(parent);
|
QTC_CHECK(parent);
|
||||||
QTC_CHECK(id.isValid());
|
QTC_CHECK(id.isValid());
|
||||||
setObjectName(id.toString());
|
setObjectName(id.toString());
|
||||||
|
|||||||
@@ -34,8 +34,6 @@ PySideBuildStepFactory::PySideBuildStepFactory()
|
|||||||
PySideBuildStep::PySideBuildStep(BuildStepList *bsl, Id id)
|
PySideBuildStep::PySideBuildStep(BuildStepList *bsl, Id id)
|
||||||
: AbstractProcessStep(bsl, id)
|
: AbstractProcessStep(bsl, id)
|
||||||
{
|
{
|
||||||
setOwnsSubAspects(false);
|
|
||||||
|
|
||||||
m_pysideProject.setSettingsKey("Python.PySideProjectTool");
|
m_pysideProject.setSettingsKey("Python.PySideProjectTool");
|
||||||
m_pysideProject.setLabelText(Tr::tr("PySide project tool:"));
|
m_pysideProject.setLabelText(Tr::tr("PySide project tool:"));
|
||||||
m_pysideProject.setToolTip(Tr::tr("Enter location of PySide project tool."));
|
m_pysideProject.setToolTip(Tr::tr("Enter location of PySide project tool."));
|
||||||
|
|||||||
Reference in New Issue
Block a user