From 4bf98b33866f92685719842092b9499c50fea4f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20Fern=C3=A1ndez=20L=C3=B3pez?= Date: Mon, 18 Jun 2007 09:27:12 +0000 Subject: [PATCH] Let Descending order work svn path=/trunk/KDE/kdebase/apps/; revision=677018 --- src/dolphinsortfilterproxymodel.cpp | 4 ++-- src/klistview.cpp | 8 ++++++-- src/ksortfilterproxymodel.cpp | 12 ++++++++++++ src/ksortfilterproxymodel.h | 7 +++++++ 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/dolphinsortfilterproxymodel.cpp b/src/dolphinsortfilterproxymodel.cpp index 4097cbe9df..2860e213f1 100644 --- a/src/dolphinsortfilterproxymodel.cpp +++ b/src/dolphinsortfilterproxymodel.cpp @@ -89,7 +89,7 @@ void DolphinSortFilterProxyModel::sort(int column, Qt::SortOrder sortOrder) dirModelColumnToDolphinView[column] : DolphinView::SortByName; setSortRole(m_sorting); - QSortFilterProxyModel::sort(column, sortOrder); + KSortFilterProxyModel::sort(column, sortOrder); } bool DolphinSortFilterProxyModel::hasChildren(const QModelIndex& parent) const @@ -249,7 +249,7 @@ bool DolphinSortFilterProxyModel::lessThan(const QModelIndex& left, } int DolphinSortFilterProxyModel::naturalCompare(const QString& a, - const QString& b) + const QString& b) { // This method chops the input a and b into pieces of // digits and non-digits (a1.05 becomes a | 1 | . | 05) diff --git a/src/klistview.cpp b/src/klistview.cpp index b38f18263f..acdc70220a 100644 --- a/src/klistview.cpp +++ b/src/klistview.cpp @@ -55,10 +55,14 @@ public: { if (purpose == GeneralPurpose) { - return proxyModel->lessThanGeneralPurpose(left, right); + return proxyModel->sortOrder() == Qt::AscendingOrder ? + proxyModel->lessThanGeneralPurpose(left, right) : + !proxyModel->lessThanGeneralPurpose(left, right); } - return proxyModel->lessThanCategoryPurpose(left, right); + return proxyModel->sortOrder() == Qt::AscendingOrder ? + proxyModel->lessThanCategoryPurpose(left, right) : + !proxyModel->lessThanCategoryPurpose(left, right); } private: diff --git a/src/ksortfilterproxymodel.cpp b/src/ksortfilterproxymodel.cpp index b716c399be..259b1b130b 100644 --- a/src/ksortfilterproxymodel.cpp +++ b/src/ksortfilterproxymodel.cpp @@ -29,6 +29,18 @@ KSortFilterProxyModel::~KSortFilterProxyModel() { } +void KSortFilterProxyModel::sort(int column, Qt::SortOrder order) +{ + QSortFilterProxyModel::sort(column, order); + + m_sortOrder = order; +} + +Qt::SortOrder KSortFilterProxyModel::sortOrder() const +{ + return m_sortOrder; +} + bool KSortFilterProxyModel::lessThanCategoryPurpose(const QModelIndex &left, const QModelIndex &right) const { diff --git a/src/ksortfilterproxymodel.h b/src/ksortfilterproxymodel.h index efe12cbc0c..5184f510ff 100644 --- a/src/ksortfilterproxymodel.h +++ b/src/ksortfilterproxymodel.h @@ -32,11 +32,18 @@ public: KSortFilterProxyModel(QObject *parent = 0); ~KSortFilterProxyModel(); + virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder); + + Qt::SortOrder sortOrder() const; + virtual bool lessThanGeneralPurpose(const QModelIndex &left, const QModelIndex &right) const = 0; virtual bool lessThanCategoryPurpose(const QModelIndex &left, const QModelIndex &right) const; + +private: + Qt::SortOrder m_sortOrder; }; #endif