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
|
||||
{
|
||||
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_ownsSubAspects = false;
|
||||
QStringList m_settingsGroup;
|
||||
};
|
||||
|
||||
@@ -2416,17 +2416,18 @@ AspectContainer::AspectContainer(QObject *parent)
|
||||
*/
|
||||
AspectContainer::~AspectContainer()
|
||||
{
|
||||
if (d->m_ownsSubAspects)
|
||||
qDeleteAll(d->m_items);
|
||||
qDeleteAll(d->m_ownedItems);
|
||||
}
|
||||
|
||||
/*!
|
||||
\internal
|
||||
*/
|
||||
void AspectContainer::registerAspect(BaseAspect *aspect)
|
||||
void AspectContainer::registerAspect(BaseAspect *aspect, bool takeOwnership)
|
||||
{
|
||||
aspect->setAutoApply(d->m_autoApply);
|
||||
d->m_items.append(aspect);
|
||||
if (takeOwnership)
|
||||
d->m_ownedItems.append(aspect);
|
||||
}
|
||||
|
||||
void AspectContainer::registerAspects(const AspectContainer &aspects)
|
||||
@@ -2547,11 +2548,6 @@ void AspectContainer::setAutoApply(bool on)
|
||||
aspect->setAutoApply(on);
|
||||
}
|
||||
|
||||
void AspectContainer::setOwnsSubAspects(bool on)
|
||||
{
|
||||
d->m_ownsSubAspects = on;
|
||||
}
|
||||
|
||||
bool AspectContainer::isDirty() const
|
||||
{
|
||||
for (BaseAspect *aspect : std::as_const(d->m_items)) {
|
||||
|
||||
Reference in New Issue
Block a user