X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/bd02faa982c263205b5cc21d6ceb4225a83c76b5..4de8cf43e62e23b766d9d457e060670401ce6128:/src/kitemviews/kstandarditemmodel.cpp diff --git a/src/kitemviews/kstandarditemmodel.cpp b/src/kitemviews/kstandarditemmodel.cpp index 11d72a4ac..060440aec 100644 --- a/src/kitemviews/kstandarditemmodel.cpp +++ b/src/kitemviews/kstandarditemmodel.cpp @@ -38,7 +38,12 @@ KStandardItemModel::~KStandardItemModel() void KStandardItemModel::insertItem(int index, KStandardItem* item) { - if (item && !m_indexesForItems.contains(item)) { + if (index < 0 || index > count() || !item) { + delete item; + return; + } + + if (!m_indexesForItems.contains(item)) { item->m_model = this; m_items.insert(index, item); m_indexesForItems.insert(item, index); @@ -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 changedRoles; - - KStandardItem* oldItem = m_items[index]; - const QHash oldData = oldItem->data(); - const QHash newData = item->data(); - - // Determine which roles have been changed - QHashIterator 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); - } - } + item->m_model = this; - m_indexesForItems.remove(oldItem); - delete oldItem; - oldItem = 0; + QSet changedRoles; - m_items[index] = item; - m_indexesForItems.insert(item, index); + KStandardItem* oldItem = m_items[index]; + const QHash oldData = oldItem->data(); + const QHash newData = item->data(); - 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; + // Determine which roles have been changed + QHashIterator 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_items[index] = item; + m_indexesForItems.insert(item, index); + + onItemChanged(index, changedRoles); + emit itemsChanged(KItemRangeList() << KItemRange(index, 1), changedRoles); } void KStandardItemModel::removeItem(int index) @@ -118,6 +122,15 @@ void KStandardItemModel::removeItem(int index) } } +void KStandardItemModel::clear() +{ + int size = m_items.size(); + m_items.clear(); + m_indexesForItems.clear(); + + emit itemsRemoved(KItemRangeList() << KItemRange(0, size)); +} + KStandardItem* KStandardItemModel::item(int index) const { if (index < 0 || index >= m_items.count()) { @@ -162,7 +175,7 @@ bool KStandardItemModel::setData(int index, const QHash& v return true; } -QMimeData* KStandardItemModel::createMimeData(const QSet& indexes) const +QMimeData* KStandardItemModel::createMimeData(const KItemSet& indexes) const { Q_UNUSED(indexes); return 0; @@ -191,7 +204,7 @@ QList > KStandardItemModel::groups() const { QList > groups; - const QByteArray role = sortRole(); + const QByteArray role = sortRole().isEmpty() ? "group" : sortRole(); bool isFirstGroupValue = true; QString groupValue; const int maxIndex = count() - 1; @@ -224,5 +237,3 @@ void KStandardItemModel::onItemRemoved(int index, KStandardItem* removedItem) Q_UNUSED(removedItem); } - -#include "kstandarditemmodel.moc"