]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kfileitemmodel.cpp
Interface cleanups to prepare the return of "grouped sorting"
[dolphin.git] / src / kitemviews / kfileitemmodel.cpp
index 0d6f60336376741936a51d73c6662aaf82a182af..3a49135f903755dea13b5baeb07f6e1b10394d9f 100644 (file)
 #define KFILEITEMMODEL_DEBUG
 
 KFileItemModel::KFileItemModel(KDirLister* dirLister, QObject* parent) :
-    KItemModelBase(QByteArray(), "name", parent),
+    KItemModelBase("name", parent),
     m_dirLister(dirLister),
     m_naturalSorting(true),
     m_sortFoldersFirst(true),
-    m_groupRole(NoRole),
     m_sortRole(NameRole),
     m_caseSensitivity(Qt::CaseInsensitive),
     m_sortedItems(),
@@ -127,16 +126,6 @@ bool KFileItemModel::setData(int index, const QHash<QByteArray, QVariant>& value
     return false;
 }
 
-bool KFileItemModel::supportsGrouping() const
-{
-    return true;
-}
-
-bool KFileItemModel::supportsSorting() const
-{
-    return true;
-}
-
 void KFileItemModel::setSortFoldersFirst(bool foldersFirst)
 {
     if (foldersFirst != m_sortFoldersFirst) {
@@ -234,6 +223,20 @@ QString KFileItemModel::roleDescription(const QByteArray& role) const
     return descr;
 }
 
+QList<QPair<int, QVariant> > KFileItemModel::groups() const
+{
+    // TODO:
+    QPair<int, QVariant> group1(0, "Group 1");
+    QPair<int, QVariant> group2(5, "Group 2");
+    QPair<int, QVariant> group3(10, "Group 3");
+
+    QList<QPair<int, QVariant> > groups;
+    groups.append(group1);
+    groups.append(group2);
+    groups.append(group3);
+    return groups;
+}
+
 KFileItem KFileItemModel::fileItem(int index) const
 {
     if (index >= 0 && index < count()) {
@@ -403,10 +406,9 @@ void KFileItemModel::restoreExpandedUrls(const QSet<KUrl>& urls)
     m_restoredExpandedUrls = urls;
 }
 
-void KFileItemModel::onGroupRoleChanged(const QByteArray& current, const QByteArray& previous)
+void KFileItemModel::onGroupedSortingChanged(bool current)
 {
-    Q_UNUSED(previous);
-    m_groupRole = roleIndex(current);
+    Q_UNUSED(current);
 }
 
 void KFileItemModel::onSortRoleChanged(const QByteArray& current, const QByteArray& previous)
@@ -733,26 +735,26 @@ void KFileItemModel::resortAllItems()
     }
 
     const KFileItemList oldSortedItems = m_sortedItems;
+    const QHash<KUrl, int> oldItems = m_items;
+    const QList<QHash<QByteArray, QVariant> > 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<int> 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 +764,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()