File indexing completed on 2024-05-05 04:38:46
0001 /* 0002 SPDX-FileCopyrightText: 2014 Kevin Funk <kfunk@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #include "objectlist.h" 0008 0009 using namespace KDevelop; 0010 0011 class KDevelop::ObjectListTrackerPrivate 0012 { 0013 public: 0014 /// List of tracked objects (contains unique items only) 0015 QList<QObject*> m_list; 0016 ObjectListTracker::CleanupBehavior m_cleanupBehavior; 0017 }; 0018 0019 ObjectListTracker::ObjectListTracker(CleanupBehavior behavior, QObject* parent) 0020 : QObject(parent) 0021 , d_ptr(new ObjectListTrackerPrivate {{}, behavior}) 0022 { 0023 } 0024 0025 ObjectListTracker::~ObjectListTracker() 0026 { 0027 Q_D(ObjectListTracker); 0028 0029 if (d->m_cleanupBehavior == CleanupWhenDone) { 0030 deleteAll(); 0031 } 0032 } 0033 0034 const QList<QObject*>& ObjectListTracker::data() const 0035 { 0036 Q_D(const ObjectListTracker); 0037 0038 return d->m_list; 0039 } 0040 0041 void ObjectListTracker::objectDestroyed(QObject* object) 0042 { 0043 Q_D(ObjectListTracker); 0044 0045 bool success = d->m_list.removeOne(object); 0046 Q_ASSERT(success); 0047 Q_UNUSED(success); 0048 } 0049 0050 void ObjectListTracker::append(QObject* object) 0051 { 0052 Q_D(ObjectListTracker); 0053 0054 if (!object || d->m_list.contains(object)) { 0055 return; 0056 } 0057 0058 d->m_list.append(object); 0059 connect(object, &QObject::destroyed, this, &ObjectListTracker::objectDestroyed); 0060 } 0061 0062 bool ObjectListTracker::remove(QObject* object) 0063 { 0064 Q_D(ObjectListTracker); 0065 0066 if (!object) { 0067 return false; 0068 } 0069 0070 disconnect(object, &QObject::destroyed, this, &ObjectListTracker::objectDestroyed); 0071 return d->m_list.removeOne(object); 0072 } 0073 0074 void ObjectListTracker::deleteAll() 0075 { 0076 Q_D(ObjectListTracker); 0077 0078 qDeleteAll(d->m_list); 0079 d->m_list.clear(); 0080 } 0081 0082 #include "moc_objectlist.cpp"