diff options
Diffstat (limited to 'src/kitemviews')
| -rw-r--r-- | src/kitemviews/kfileitemmodel.h | 4 | ||||
| -rw-r--r-- | src/kitemviews/kstandarditemmodel.cpp | 58 | ||||
| -rw-r--r-- | src/kitemviews/kstandarditemmodel.h | 7 |
3 files changed, 38 insertions, 31 deletions
diff --git a/src/kitemviews/kfileitemmodel.h b/src/kitemviews/kfileitemmodel.h index 2bbdfc797..783a0fecb 100644 --- a/src/kitemviews/kfileitemmodel.h +++ b/src/kitemviews/kfileitemmodel.h @@ -459,8 +459,8 @@ private: friend class KFileItemModelSortAlgorithm; // Accesses lessThan() method friend class KFileItemModelRolesUpdater; // Accesses emitSortProgress() method - friend class KFileItemModelTest; // For unit testing (accesses m_dirLister) - friend class KFileItemListViewTest; // For unit testing (accesses m_dirLister) + friend class KFileItemModelTest; // For unit testing + friend class KFileItemListViewTest; // For unit testing }; inline bool KFileItemModel::isChildItem(int index) const diff --git a/src/kitemviews/kstandarditemmodel.cpp b/src/kitemviews/kstandarditemmodel.cpp index 11d72a4ac..cde86af49 100644 --- a/src/kitemviews/kstandarditemmodel.cpp +++ b/src/kitemviews/kstandarditemmodel.cpp @@ -38,6 +38,11 @@ KStandardItemModel::~KStandardItemModel() void KStandardItemModel::insertItem(int index, KStandardItem* item) { + if (index < 0 || index > count() || !item) { + delete item; + return; + } + if (item && !m_indexesForItems.contains(item)) { item->m_model = this; m_items.insert(index, item); @@ -58,40 +63,39 @@ void KStandardItemModel::insertItem(int index, KStandardItem* item) void KStandardItemModel::changeItem(int index, KStandardItem* item) { - if (item && index >= 0 && index < count()) { - item->m_model = this; + if (index < 0 || index > count() || !item) { + delete item; + return; + } - QSet<QByteArray> changedRoles; + item->m_model = this; - KStandardItem* oldItem = m_items[index]; - const QHash<QByteArray, QVariant> oldData = oldItem->data(); - const QHash<QByteArray, QVariant> newData = item->data(); + QSet<QByteArray> changedRoles; - // Determine which roles have been changed - QHashIterator<QByteArray, QVariant> it(oldData); - while (it.hasNext()) { - it.next(); - const QByteArray role = it.key(); - const QVariant oldValue = it.value(); - if (newData.contains(role) && newData.value(role) != oldValue) { - changedRoles.insert(role); - } + KStandardItem* oldItem = m_items[index]; + const QHash<QByteArray, QVariant> oldData = oldItem->data(); + const QHash<QByteArray, QVariant> newData = item->data(); + + // Determine which roles have been changed + QHashIterator<QByteArray, QVariant> it(oldData); + while (it.hasNext()) { + it.next(); + const QByteArray role = it.key(); + const QVariant oldValue = it.value(); + if (newData.contains(role) && newData.value(role) != oldValue) { + changedRoles.insert(role); } + } - m_indexesForItems.remove(oldItem); - delete oldItem; - oldItem = 0; + m_indexesForItems.remove(oldItem); + delete oldItem; + oldItem = 0; - m_items[index] = item; - m_indexesForItems.insert(item, index); + m_items[index] = item; + m_indexesForItems.insert(item, index); - onItemChanged(index, changedRoles); - emit itemsChanged(KItemRangeList() << KItemRange(index, 1), changedRoles); - } else { - kWarning() << "No item available to replace on the given index" << index; - delete item; - item = 0; - } + onItemChanged(index, changedRoles); + emit itemsChanged(KItemRangeList() << KItemRange(index, 1), changedRoles); } void KStandardItemModel::removeItem(int index) diff --git a/src/kitemviews/kstandarditemmodel.h b/src/kitemviews/kstandarditemmodel.h index 047c1e9b6..34032bf07 100644 --- a/src/kitemviews/kstandarditemmodel.h +++ b/src/kitemviews/kstandarditemmodel.h @@ -47,14 +47,16 @@ public: * Inserts the item \a item at the index \a index. If the index * is equal to the number of items of the model, the item * gets appended as last element. KStandardItemModel takes - * the ownership of the item. + * the ownership of the item. If the index is invalid, the item + * gets deleted. */ void insertItem(int index, KStandardItem* item); /** * Changes the item on the index \a index to \a item. * KStandardItemModel takes the ownership of the item. The - * old item gets deleted. + * old item gets deleted. If the index is invalid, the item + * gets deleted. */ void changeItem(int index, KStandardItem* item); @@ -102,6 +104,7 @@ private: QHash<const KStandardItem*, int> m_indexesForItems; friend class KStandardItem; + friend class KStandardItemModelTest; // For unit testing }; #endif |
