diff options
| author | Peter Penz <[email protected]> | 2011-09-08 21:16:14 +0200 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2011-09-08 21:17:35 +0200 |
| commit | b60cbf2d1d474a2b000ade365b90e630b2d210c5 (patch) | |
| tree | 85de006a026a81efb0e660a5d9c29788e90aedb6 /src/kitemviews/kfileitemmodel.cpp | |
| parent | f0debd937766045c77dea5f2f5255de89f7b2697 (diff) | |
KFileItemModel: emit itemsChanged() signal
Diffstat (limited to 'src/kitemviews/kfileitemmodel.cpp')
| -rw-r--r-- | src/kitemviews/kfileitemmodel.cpp | 50 |
1 files changed, 50 insertions, 0 deletions
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<QPair<KFileItem,KFileItem> >)), this, SLOT(slotRefreshItems(QList<QPair<KFileItem,KFileItem> >))); 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<QPair<KFileItem, KFileItem> >& 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<int> indexes; + indexes.reserve(items.count()); + + QListIterator<QPair<KFileItem, KFileItem> > it(items); + while (it.hasNext()) { + const QPair<KFileItem, KFileItem>& 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<QByteArray>()); +} + void KFileItemModel::slotClear() { #ifdef KFILEITEMMODEL_DEBUG |
