diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/dolphinsortfilterproxymodel.cpp | 32 | ||||
| -rw-r--r-- | 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; }; |
