diff options
| -rw-r--r-- | src/kitemviews/kfileitemmodel.cpp | 16 | ||||
| -rw-r--r-- | src/tests/kfileitemmodeltest.cpp | 17 |
2 files changed, 32 insertions, 1 deletions
diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp index 1391acb83..0eb8d11e0 100644 --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -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; } diff --git a/src/tests/kfileitemmodeltest.cpp b/src/tests/kfileitemmodeltest.cpp index 820cf7848..ea8c19c05 100644 --- a/src/tests/kfileitemmodeltest.cpp +++ b/src/tests/kfileitemmodeltest.cpp @@ -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 } |
