X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/d76b113ad10fe207ef23d5dd44c63ee076c71521..3e95a6cccc76d61473a2815457beefaaae62ec7c:/src/kitemviews/kstandarditemmodel.cpp diff --git a/src/kitemviews/kstandarditemmodel.cpp b/src/kitemviews/kstandarditemmodel.cpp index d0be1325f..128841ca8 100644 --- a/src/kitemviews/kstandarditemmodel.cpp +++ b/src/kitemviews/kstandarditemmodel.cpp @@ -1,25 +1,11 @@ -/*************************************************************************** - * Copyright (C) 2012 by Peter Penz * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - ***************************************************************************/ +/* + * SPDX-FileCopyrightText: 2012 Peter Penz + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ #include "kstandarditemmodel.h" -#include #include "kstandarditem.h" KStandardItemModel::KStandardItemModel(QObject* parent) : @@ -38,53 +24,64 @@ KStandardItemModel::~KStandardItemModel() void KStandardItemModel::insertItem(int index, KStandardItem* item) { - if (item && !m_indexesForItems.contains(item) && !item->m_model) { + 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); + + // 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); - emit itemsInserted(KItemRangeList() << KItemRange(index, 1)); + Q_EMIT itemsInserted(KItemRangeList() << KItemRange(index, 1)); } } -void KStandardItemModel::replaceItem(int index, KStandardItem* item) +void KStandardItemModel::changeItem(int index, KStandardItem* item) { - if (item && index >= 0 && index < count() && !item->m_model) { - 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(); - onItemReplaced(index); - 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 = nullptr; + + m_items[index] = item; + m_indexesForItems.insert(item, index); + + onItemChanged(index, changedRoles); + Q_EMIT itemsChanged(KItemRangeList() << KItemRange(index, 1), changedRoles); } void KStandardItemModel::removeItem(int index) @@ -93,19 +90,37 @@ void KStandardItemModel::removeItem(int index) KStandardItem* item = m_items[index]; m_indexesForItems.remove(item); m_items.removeAt(index); - delete item; - item = 0; - onItemRemoved(index); - emit itemsRemoved(KItemRangeList() << KItemRange(index, 1)); + // 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); + + item->deleteLater(); + item = nullptr; + + Q_EMIT itemsRemoved(KItemRangeList() << KItemRange(index, 1)); + // TODO: no hierarchical items are handled yet } } +void KStandardItemModel::clear() +{ + int size = m_items.size(); + m_items.clear(); + m_indexesForItems.clear(); + + Q_EMIT itemsRemoved(KItemRangeList() << KItemRange(0, size)); +} + KStandardItem* KStandardItemModel::item(int index) const { if (index < 0 || index >= m_items.count()) { - return 0; + return nullptr; } return m_items[index]; } @@ -138,7 +153,7 @@ QHash KStandardItemModel::data(int index) const bool KStandardItemModel::setData(int index, const QHash& values) { - Q_UNUSED(values); + Q_UNUSED(values) if (index < 0 || index >= count()) { return false; } @@ -146,28 +161,28 @@ 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; + Q_UNUSED(indexes) + return nullptr; } int KStandardItemModel::indexForKeyboardSearch(const QString& text, int startFromIndex) const { - Q_UNUSED(text); - Q_UNUSED(startFromIndex); + Q_UNUSED(text) + Q_UNUSED(startFromIndex) return -1; } bool KStandardItemModel::supportsDropping(int index) const { - Q_UNUSED(index); + Q_UNUSED(index) return false; } QString KStandardItemModel::roleDescription(const QByteArray& role) const { - Q_UNUSED(role); + Q_UNUSED(role) return QString(); } @@ -175,7 +190,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; @@ -193,18 +208,18 @@ QList > KStandardItemModel::groups() const void KStandardItemModel::onItemInserted(int index) { - Q_UNUSED(index); + Q_UNUSED(index) } -void KStandardItemModel::onItemReplaced(int index) +void KStandardItemModel::onItemChanged(int index, const QSet& changedRoles) { - Q_UNUSED(index); + Q_UNUSED(index) + Q_UNUSED(changedRoles) } -void KStandardItemModel::onItemRemoved(int index) +void KStandardItemModel::onItemRemoved(int index, KStandardItem* removedItem) { - Q_UNUSED(index); + Q_UNUSED(index) + Q_UNUSED(removedItem) } - -#include "kstandarditemmodel.moc"