┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews/kstandarditemmodel.cpp
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2012-05-17 13:32:09 +0200
committerPeter Penz <[email protected]>2012-05-17 13:34:31 +0200
commitbd02faa982c263205b5cc21d6ceb4225a83c76b5 (patch)
tree118e378ba865ed6d6c66637568d9035c1eb9deb4 /src/kitemviews/kstandarditemmodel.cpp
parentbca055a38edf722c2433c41cd45f86c27fccc541 (diff)
KStandardItemModel: Fix inconsistent internal state
Assure that the index-cache is kept consistent with the items when a removing or inserting is done. A unit-test will be created as soon as possible.
Diffstat (limited to 'src/kitemviews/kstandarditemmodel.cpp')
-rw-r--r--src/kitemviews/kstandarditemmodel.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/kitemviews/kstandarditemmodel.cpp b/src/kitemviews/kstandarditemmodel.cpp
index e3d40038d..11d72a4ac 100644
--- a/src/kitemviews/kstandarditemmodel.cpp
+++ b/src/kitemviews/kstandarditemmodel.cpp
@@ -42,6 +42,13 @@ void KStandardItemModel::insertItem(int index, KStandardItem* item)
item->m_model = this;
m_items.insert(index, item);
m_indexesForItems.insert(item, index);
+
+ // Inserting an item requires to update the indexes
+ // afterwards from m_indexesForItems.
+ for (int i = index + 1; i < m_items.count(); ++i) {
+ m_indexesForItems.insert(m_items[i], i);
+ }
+
// TODO: no hierarchical items are handled yet
onItemInserted(index);
@@ -94,12 +101,19 @@ void KStandardItemModel::removeItem(int index)
m_indexesForItems.remove(item);
m_items.removeAt(index);
+ // Removing an item requires to update the indexes
+ // afterwards from m_indexesForItems.
+ for (int i = index; i < m_items.count(); ++i) {
+ m_indexesForItems.insert(m_items[i], i);
+ }
+
onItemRemoved(index, item);
- emit itemsRemoved(KItemRangeList() << KItemRange(index, 1));
delete item;
item = 0;
+ emit itemsRemoved(KItemRangeList() << KItemRange(index, 1));
+
// TODO: no hierarchical items are handled yet
}
}