]> cloud.milkyroute.net Git - dolphin.git/commitdiff
KFileItemModel: emit itemsChanged() signal
authorPeter Penz <peter.penz19@gmail.com>
Thu, 8 Sep 2011 19:16:14 +0000 (21:16 +0200)
committerPeter Penz <peter.penz19@gmail.com>
Thu, 8 Sep 2011 19:17:35 +0000 (21:17 +0200)
src/kitemviews/kfileitemmodel.cpp
src/kitemviews/kfileitemmodel.h
src/views/versioncontrol/versioncontrolobserver.cpp

index 9de99d8de564b2087369ca692d1c4a6d8ca589d8..ff0c4a02d9d0394832df493d42be6e0bd4392ded 100644 (file)
@@ -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(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)));
 
     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);
 }
 
     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
 void KFileItemModel::slotClear()
 {
 #ifdef KFILEITEMMODEL_DEBUG
index 1b7c8bdca70d5fabe1fc2aacc0838e408da9145f..5d75329d1b8d7bc3ea35de44dc0e1ee18e5f800d 100644 (file)
@@ -123,6 +123,7 @@ private slots:
     void slotCanceled();
     void slotNewItems(const KFileItemList& items);
     void slotItemsDeleted(const KFileItemList& items);
     void slotCanceled();
     void slotNewItems(const KFileItemList& items);
     void slotItemsDeleted(const KFileItemList& items);
+    void slotRefreshItems(const QList<QPair<KFileItem, KFileItem> >& items);
     void slotClear();
     void slotClear(const KUrl& url);
 
     void slotClear();
     void slotClear(const KUrl& url);
 
index 14f5e0bc924c058a4aa2fc7b1a58ca2578ff5d07..b454607c19752e717dccadb51850e9f21f43ff4a 100644 (file)
@@ -85,6 +85,8 @@ void VersionControlObserver::setModel(KFileItemModel* model)
     if (m_model) {
         disconnect(m_model, SIGNAL(itemsInserted(KItemRangeList)),
                    this, SLOT(delayedDirectoryVerification()));
     if (m_model) {
         disconnect(m_model, SIGNAL(itemsInserted(KItemRangeList)),
                    this, SLOT(delayedDirectoryVerification()));
+        disconnect(m_model, SIGNAL(itemsChanged(KItemRangeList,QSet<QByteArray>)),
+                   this, SLOT(delayedDirectoryVerification()));
     }
 
     m_model = model;
     }
 
     m_model = model;
@@ -92,6 +94,8 @@ void VersionControlObserver::setModel(KFileItemModel* model)
     if (model) {
         connect(m_model, SIGNAL(itemsInserted(KItemRangeList)),
                 this, SLOT(delayedDirectoryVerification()));
     if (model) {
         connect(m_model, SIGNAL(itemsInserted(KItemRangeList)),
                 this, SLOT(delayedDirectoryVerification()));
+        connect(m_model, SIGNAL(itemsChanged(KItemRangeList,QSet<QByteArray>)),
+                this, SLOT(delayedDirectoryVerification()));
     }
 }
 
     }
 }