diff options
| author | Frank Reininghaus <[email protected]> | 2011-09-18 16:46:40 +0200 |
|---|---|---|
| committer | Frank Reininghaus <[email protected]> | 2011-09-18 16:50:44 +0200 |
| commit | 8879f5e7527caee52966f352af7fa9585fe58192 (patch) | |
| tree | a6a3febaecd329aa49e5dc714d4572637b1eedd2 /src | |
| parent | 3c41cd3c9dcae1169024e455861ee6f1515bdcc8 (diff) | |
Implement 'Sort By Size'
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.
Diffstat (limited to 'src')
| -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 } |
