diff --git a/app/browsemainpage.cpp b/app/browsemainpage.cpp --- a/app/browsemainpage.cpp +++ b/app/browsemainpage.cpp @@ -56,6 +56,9 @@ #include #include #include +#ifndef GWENVIEW_SEMANTICINFO_BACKEND_NONE +#include "lib/semanticinfo/semanticinfodirmodel.h" +#endif namespace Gwenview { @@ -161,6 +164,11 @@ action = new QAction(i18nc("@addAction:inmenu", "Size"), mSortAction); action->setCheckable(true); action->setData(QVariant(Sorting::Size)); +#ifndef GWENVIEW_SEMANTICINFO_BACKEND_NONE + action = new QAction(i18nc("@addAction:inmenu", "Rating"), mSortAction); + action->setCheckable(true); + action->setData(QVariant(Sorting::Rating)); +#endif QObject::connect(mSortAction, SIGNAL(triggered(QAction*)), q, SLOT(updateSortOrder())); @@ -483,6 +491,12 @@ column = KDirModel::ModifiedTime; sortRole = Qt::DisplayRole; break; +#ifndef GWENVIEW_SEMANTICINFO_BACKEND_NONE + case Sorting::Rating: + column = KDirModel::Name; + sortRole = SemanticInfoDirModel::RatingRole; + break; +#endif } d->mDirModel->setSortRole(sortRole); diff --git a/lib/gwenviewconfig.kcfg b/lib/gwenviewconfig.kcfg --- a/lib/gwenviewconfig.kcfg +++ b/lib/gwenviewconfig.kcfg @@ -214,6 +214,7 @@ + Sorting::Name diff --git a/lib/semanticinfo/sorteddirmodel.cpp b/lib/semanticinfo/sorteddirmodel.cpp --- a/lib/semanticinfo/sorteddirmodel.cpp +++ b/lib/semanticinfo/sorteddirmodel.cpp @@ -37,6 +37,7 @@ #else #include "abstractsemanticinfobackend.h" #include "semanticinfodirmodel.h" +#include #endif namespace Gwenview @@ -268,14 +269,24 @@ return sortOrder() == Qt::AscendingOrder ? leftIsDirOrArchive : rightIsDirOrArchive; } - if (sortColumn() != KDirModel::ModifiedTime) { - return KDirSortFilterProxyModel::lessThan(left, right); + if (sortColumn() == KDirModel::ModifiedTime) { + const QDateTime leftDate = TimeUtils::dateTimeForFileItem(leftItem); + const QDateTime rightDate = TimeUtils::dateTimeForFileItem(rightItem); + + return leftDate < rightDate; } +#ifndef GWENVIEW_SEMANTICINFO_BACKEND_NONE + if (sortRole() == SemanticInfoDirModel::RatingRole) { + const int leftRating = d->mSourceModel->data(left, SemanticInfoDirModel::RatingRole).toInt(); + const int rightRating = d->mSourceModel->data(right, SemanticInfoDirModel::RatingRole).toInt(); - const QDateTime leftDate = TimeUtils::dateTimeForFileItem(leftItem); - const QDateTime rightDate = TimeUtils::dateTimeForFileItem(rightItem); + if (leftRating != rightRating) { + return leftRating < rightRating; + } + } +#endif - return leftDate < rightDate; + return KDirSortFilterProxyModel::lessThan(left, right); } bool SortedDirModel::hasDocuments() const diff --git a/lib/sorting.h b/lib/sorting.h --- a/lib/sorting.h +++ b/lib/sorting.h @@ -38,7 +38,10 @@ enum Enum { Name, Size, - Date + Date, +#ifndef GWENVIEW_SEMANTICINFO_BACKEND_NONE + Rating +#endif }; } // namespace Sorting