From b60cbf2d1d474a2b000ade365b90e630b2d210c5 Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Thu, 8 Sep 2011 21:16:14 +0200 Subject: KFileItemModel: emit itemsChanged() signal --- src/kitemviews/kfileitemmodel.cpp | 50 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'src/kitemviews/kfileitemmodel.cpp') diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp index 9de99d8de..ff0c4a02d 100644 --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -57,6 +57,7 @@ KFileItemModel::KFileItemModel(KDirLister* dirLister, QObject* parent) : connect(dirLister, SIGNAL(completed()), this, SLOT(slotCompleted())); connect(dirLister, SIGNAL(newItems(KFileItemList)), this, SLOT(slotNewItems(KFileItemList))); connect(dirLister, SIGNAL(itemsDeleted(KFileItemList)), this, SLOT(slotItemsDeleted(KFileItemList))); + connect(dirLister, SIGNAL(refreshItems(QList >)), this, SLOT(slotRefreshItems(QList >))); connect(dirLister, SIGNAL(clear()), this, SLOT(slotClear())); connect(dirLister, SIGNAL(clear(KUrl)), this, SLOT(slotClear(KUrl))); @@ -417,6 +418,55 @@ void KFileItemModel::slotItemsDeleted(const KFileItemList& items) removeItems(items); } +void KFileItemModel::slotRefreshItems(const QList >& items) +{ + Q_ASSERT(!items.isEmpty()); +#ifdef KFILEITEMMODEL_DEBUG + kDebug() << "Refreshing" << items.count() << "items"; +#endif + + // Get the indexes of all items that have been refreshed + QList indexes; + indexes.reserve(items.count()); + + QListIterator > it(items); + while (it.hasNext()) { + const QPair& itemPair = it.next(); + const int index = m_items.value(itemPair.second.url(), -1); + if (index >= 0) { + indexes.append(index); + } + } + + // Extract the item-ranges out of the changed indexes + qSort(indexes); + + KItemRangeList itemRangeList; + int rangeIndex = 0; + int rangeCount = 1; + int previousIndex = indexes.at(0); + + const int maxIndex = indexes.count() - 1; + for (int i = 1; i <= maxIndex; ++i) { + const int currentIndex = indexes.at(i); + if (currentIndex == previousIndex + 1) { + ++rangeCount; + } else { + itemRangeList.append(KItemRange(rangeIndex, rangeCount)); + + rangeIndex = currentIndex; + rangeCount = 1; + } + previousIndex = currentIndex; + } + + if (rangeCount > 0) { + itemRangeList.append(KItemRange(rangeIndex, rangeCount)); + } + + emit itemsChanged(itemRangeList, QSet()); +} + void KFileItemModel::slotClear() { #ifdef KFILEITEMMODEL_DEBUG -- cgit v1.3