From: Frank Reininghaus Date: Mon, 3 Oct 2011 14:12:18 +0000 (+0200) Subject: Keep current item and selection when resorting, part 2 X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/c94e1e1cd6753b2d8f4ebb942b744be1a62c887d Keep current item and selection when resorting, part 2 This commit adds the missing pieces to KItemListView and makes KFileItemModel::resortAllItems() only emit the itemsMoved() signal. --- diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp index 0d6f60336..ddb89533c 100644 --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -733,26 +733,26 @@ void KFileItemModel::resortAllItems() } const KFileItemList oldSortedItems = m_sortedItems; + const QHash oldItems = m_items; + const QList > oldData = m_data; - KFileItemList sortedItems = m_sortedItems; - m_sortedItems.clear(); m_items.clear(); m_data.clear(); - emit itemsRemoved(KItemRangeList() << KItemRange(0, itemCount)); - sort(sortedItems.begin(), sortedItems.end()); + sort(m_sortedItems.begin(), m_sortedItems.end()); int index = 0; - foreach (const KFileItem& item, sortedItems) { - m_sortedItems.append(item); + foreach (const KFileItem& item, m_sortedItems) { m_items.insert(item.url(), index); - m_data.append(retrieveData(item)); + + const int oldItemIndex = oldItems.value(item.url()); + m_data.append(oldData.at(oldItemIndex)); ++index; } bool emitItemsMoved = false; QList movedToIndexes; - movedToIndexes.reserve(sortedItems.count()); + movedToIndexes.reserve(m_sortedItems.count()); for (int i = 0; i < itemCount; i++) { const int newIndex = m_items.value(oldSortedItems.at(i).url()); movedToIndexes.append(newIndex); @@ -762,12 +762,8 @@ void KFileItemModel::resortAllItems() } if (emitItemsMoved) { - // TODO: - // * Implement KItemListView::slotItemsMoved() (which should call KItemListSelectionManager::itemsMoved()) - // * Do not emit itemsRemoved()/itemsInserted() here. emit itemsMoved(KItemRange(0, itemCount), movedToIndexes); } - emit itemsInserted(KItemRangeList() << KItemRange(0, itemCount)); } void KFileItemModel::removeExpandedItems() diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp index 612b6fd65..4818527ba 100644 --- a/src/kitemviews/kitemlistview.cpp +++ b/src/kitemviews/kitemlistview.cpp @@ -771,8 +771,19 @@ void KItemListView::slotItemsMoved(const KItemRange& itemRange, const QList // TODO: // * Implement KItemListView::slotItemsMoved() (which should call KItemListSelectionManager::itemsMoved()) // * Do not emit itemsRemoved()/itemsInserted() in KFileItemModel::resortAllItems() - Q_UNUSED(itemRange); - Q_UNUSED(movedToIndexes); + const int firstVisibleMovedIndex = qMax(firstVisibleIndex(), itemRange.index); + const int lastVisibleMovedIndex = qMin(lastVisibleIndex(), itemRange.index + itemRange.count - 1); + + for (int index = firstVisibleMovedIndex; index <= lastVisibleMovedIndex; ++index) { + KItemListWidget* widget = m_visibleItems.value(index); + if (widget) { + updateWidgetProperties(widget, index); + } + } + + if (m_controller) { + m_controller->selectionManager()->itemsMoved(itemRange, movedToIndexes); + } } void KItemListView::slotItemsChanged(const KItemRangeList& itemRanges,