]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Implement 'Sort By Size'
authorFrank Reininghaus <frank78ac@googlemail.com>
Sun, 18 Sep 2011 14:46:40 +0000 (16:46 +0200)
committerFrank Reininghaus <frank78ac@googlemail.com>
Sun, 18 Sep 2011 14:50:44 +0000 (16:50 +0200)
It only works for files so far. The sorting of folders
by the number of items is more tricky to get right because
this number is retrieved asynchronously by
KFileItemModelRolesUpdater.

src/kitemviews/kfileitemmodel.cpp
src/tests/kfileitemmodeltest.cpp

index 1391acb835ff50e766651097da24674db262fdb2..0eb8d11e01e86d39641690ae6e88b4bb334fe998 100644 (file)
@@ -868,7 +868,7 @@ bool KFileItemModel::lessThan(const KFileItem& a, const KFileItem& b) const
         }
     }
 
-    if (m_sortFoldersFirst) {
+    if (m_sortFoldersFirst || m_sortRole == SizeRole) {
         const bool isDirA = a.isDir();
         const bool isDirB = b.isDir();
         if (isDirA && !isDirB) {
@@ -900,6 +900,20 @@ bool KFileItemModel::lessThan(const KFileItem& a, const KFileItem& b) const
         break;
     }
 
+    case SizeRole: {
+        // TODO: Implement sorting folders by the number of items inside.
+        // This is more tricky to get right because this number is retrieved
+        // asynchronously by KFileItemModelRolesUpdater.
+        const KIO::filesize_t sizeA = a.size();
+        const KIO::filesize_t sizeB = b.size();
+        if (sizeA < sizeB) {
+            result = -1;
+        } else if (sizeA > sizeB) {
+            result = +1;
+        }
+        break;
+    }
+
     default:
         break;
     }
index 820cf78481081df3d0c6b922f9c8cf55ccd89ae9..ea8c19c05ae2d7563f56410f9fdce5f9e781d340 100644 (file)
@@ -386,6 +386,23 @@ void KFileItemModelTest::testSorting()
     QVERIFY(!m_model->sortFoldersFirst());
     QCOMPARE(itemsInModel(), QStringList() << "a" << "b" << "c" << "d" << "e");
 
+    // Sort by Size, ascending, 'Sort Folders First' enabled
+    m_model->setSortRole("size");
+    m_model->setSortFoldersFirst(true);
+    QCOMPARE(m_model->sortRole(), QByteArray("size"));
+    QCOMPARE(m_model->sortOrder(), Qt::AscendingOrder);
+    QVERIFY(m_model->sortFoldersFirst());
+    QCOMPARE(itemsInModel(), QStringList() << "c" << "a" << "b" << "e" << "d");
+
+    // Sort by Size, descending, 'Sort Folders First' enabled
+    m_model->setSortOrder(Qt::DescendingOrder);
+    QCOMPARE(m_model->sortRole(), QByteArray("size"));
+    QCOMPARE(m_model->sortOrder(), Qt::DescendingOrder);
+    QVERIFY(m_model->sortFoldersFirst());
+    QCOMPARE(itemsInModel(), QStringList() << "c" << "d" << "e" << "b" << "a");
+
+    // TODO: How shall the sorting by size be done if 'Sort Folders First' is disabled?
+
     // TODO: Sort by other roles; show/hide hidden files
 }