From fe1cb386e4234fcc22efcbbce1c792de24273875 Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Mon, 5 Feb 2007 23:17:15 +0000 Subject: [PATCH] Only group the directories before items if the KDirModel::Name column is sorted. If the sorting is done e. g. by the date column, it is confusing when still directories are seperated from items. svn path=/trunk/playground/utils/dolphin/; revision=630674 --- src/dolphinsortfilterproxymodel.cpp | 32 +++++++++++++++++------------ src/dolphinsortfilterproxymodel.h | 1 + 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/dolphinsortfilterproxymodel.cpp b/src/dolphinsortfilterproxymodel.cpp index 783a0af42..20b8bf164 100644 --- a/src/dolphinsortfilterproxymodel.cpp +++ b/src/dolphinsortfilterproxymodel.cpp @@ -39,7 +39,10 @@ static DolphinView::Sorting dirModelColumnToDolphinView[] = { DolphinSortFilterProxyModel::DolphinSortFilterProxyModel(QObject* parent) : - QSortFilterProxyModel(parent) + QSortFilterProxyModel(parent), + m_sortColumn(0), + m_sorting(DolphinView::SortByName), + m_sortOrder(Qt::Ascending) { setDynamicSortFilter(true); @@ -70,11 +73,12 @@ void DolphinSortFilterProxyModel::setSortOrder(Qt::SortOrder sortOrder) void DolphinSortFilterProxyModel::sort(int column, Qt::SortOrder sortOrder) { + m_sortColumn = column; m_sortOrder = sortOrder; m_sorting = (column >= 0) && (column <= dolphinMapSize) ? dirModelColumnToDolphinView[column] : DolphinView::SortByName; - QSortFilterProxyModel::sort(column,sortOrder); + QSortFilterProxyModel::sort(column, sortOrder); } bool DolphinSortFilterProxyModel::lessThan(const QModelIndex& left, @@ -86,21 +90,23 @@ bool DolphinSortFilterProxyModel::lessThan(const QModelIndex& left, QVariant rightData = dirModel->data(right, sortRole()); if ((leftData.type() == QVariant::String) && (rightData.type() == QVariant::String)) { - const QString leftStr = leftData.toString(); - const QString rightStr = rightData.toString(); - - const bool leftIsDir = dirModel->itemForIndex(left)->isDir(); - const bool rightIsDir = dirModel->itemForIndex(right)->isDir(); - // assure that directories are always sorted before files - if (leftIsDir && !rightIsDir) { - return true; - } + // if the sorting is done by the 'Name' column + if (m_sortColumn == KDirModel::Name) { + const bool leftIsDir = dirModel->itemForIndex(left)->isDir(); + const bool rightIsDir = dirModel->itemForIndex(right)->isDir(); + if (leftIsDir && !rightIsDir) { + return true; + } - if (!leftIsDir && rightIsDir) { - return false; + if (!leftIsDir && rightIsDir) { + return false; + } } + const QString leftStr = leftData.toString(); + const QString rightStr = rightData.toString(); + return sortCaseSensitivity() ? (naturalCompare(leftStr, rightStr) < 0) : (naturalCompare(leftStr.toLower(), rightStr.toLower()) < 0); } diff --git a/src/dolphinsortfilterproxymodel.h b/src/dolphinsortfilterproxymodel.h index c8de791c6..d73f4579b 100644 --- a/src/dolphinsortfilterproxymodel.h +++ b/src/dolphinsortfilterproxymodel.h @@ -69,6 +69,7 @@ private: static int naturalCompare(const QString& a, const QString& b); private: + int m_sortColumn; DolphinView::Sorting m_sorting; Qt::SortOrder m_sortOrder; }; -- 2.47.3