From 44a73ebcfc2ad65fe7301d49f7020f9f8dcd7762 Mon Sep 17 00:00:00 2001 From: am Date: Sun, 2 Aug 2009 15:12:05 +0000 Subject: -sorting of archive now takes movie number into account git-svn-id: file:///var/svn/repos2/shemov/trunk@398 f440f766-f032-0410-8965-dc7d17de2ca0 --- archiveproxy.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'archiveproxy.cpp') diff --git a/archiveproxy.cpp b/archiveproxy.cpp index 6b1a9e7..0249459 100644 --- a/archiveproxy.cpp +++ b/archiveproxy.cpp @@ -7,6 +7,9 @@ #include #include +#include + +#include #include "archiveproxy.h" #include "moviemodel.h" @@ -67,3 +70,40 @@ void ArchiveProxy::clearFilter(){ invalidate(); } +bool ArchiveProxy::lessThan(const QModelIndex &left, const QModelIndex &right) const{ + if(left.column() > 0){ + return QSortFilterProxyModel::lessThan(left, right); + } + QString l = left.data().toString(); + QString r = right.data().toString(); + QRegExp nos("(\\d+)"); + QList lnos, rnos; + int pos = 0; + bool dummy; + while((pos = nos.indexIn(l, pos)) != -1){ + lnos << nos.cap(1).toInt(&dummy); + pos += nos.matchedLength(); + } + pos = 0; + while((pos = nos.indexIn(r, pos)) != -1){ + rnos << nos.cap(1).toInt(&dummy); + pos += nos.matchedLength(); + } + QRegExp baseRe("(.*)\\s+\\d+"); + baseRe.indexIn(l); + QString lbase = baseRe.cap(1); + baseRe.indexIn(r); + QString rbase = baseRe.cap(1); + if((lnos.size() == 1) && (rnos.size() == 1)){ + if(lbase == rbase){ + return (lnos.at(0) < rnos.at(0)); + } + } + if((lnos.size() == 2) && (rnos.size() == 2)){ + if(lbase == rbase){ + return (lnos.at(1) < rnos.at(1)); + } + } + return QSortFilterProxyModel::lessThan(left, right); +} + -- cgit v1.2.3-70-g09d2