[Digikam-devel] [digikam] [Bug 331597] Tags are not sorted in UI [patch]

Gilles Caulier caulier.gilles at gmail.com
Wed May 7 18:26:25 BST 2014


https://bugs.kde.org/show_bug.cgi?id=331597

--- Comment #14 from Gilles Caulier <caulier.gilles at gmail.com> ---
Git commit a4320cbf03ce1f2df89649739db6c641d259adcc by Mohamed Anwer.
Committed on 07/05/2014 at 17:08.
Pushed by mohamedanwer into branch 'master'.

Fixing Bug #331597

M  +33   -15   libs/models/albumfiltermodel.cpp

http://commits.kde.org/digikam/a4320cbf03ce1f2df89649739db6c641d259adcc

diff --git a/libs/models/albumfiltermodel.cpp
b/libs/models/albumfiltermodel.cpp
index 66dbfbf..d095a90 100644
--- a/libs/models/albumfiltermodel.cpp
+++ b/libs/models/albumfiltermodel.cpp
@@ -336,34 +336,52 @@ bool AlbumFilterModel::filterAcceptsRow(int source_row,
const QModelIndex& sourc

 bool AlbumFilterModel::lessThan(const QModelIndex& left, const QModelIndex&
right) const
 {
-    PAlbum* leftAlbum =
AlbumManager::instance()->findPAlbum(albumForIndex(left)->id());
-    PAlbum* rightAlbum =
AlbumManager::instance()->findPAlbum(albumForIndex(right)->id());
+    Album* leftAlbum = albumForIndex(left);
+    Album* rightAlbum = albumForIndex(right);
+    QVariant valLeft  = left.data(sortRole());
+    QVariant valRight = right.data(sortRole());
+
     AlbumSettings::AlbumSortOrder sortRole =
AlbumSettings::instance()->getAlbumSortOrder();

     if (leftAlbum && rightAlbum)
     {
-        switch (sortRole)
+        if(leftAlbum->type() == 0 && rightAlbum->type()== 0)//checking for
PAlbums
+        {
+            switch (sortRole)
+            {
+                case AlbumSettings::ByFolder:
+                    switch
(AlbumSettings::instance()->getStringComparisonType())
+                    {
+                        case AlbumSettings::Natural:
+                            return
KStringHandler::naturalCompare(leftAlbum->title(), rightAlbum->title(),
sortCaseSensitivity()) < 0;
+
+                        case AlbumSettings::Normal:
+                        default:
+                            return QString::compare(leftAlbum->title(),
rightAlbum->title(), sortCaseSensitivity()) < 0;
+                    }
+                case AlbumSettings::ByDate:
+                    return
compareByOrder(static_cast<PAlbum*>(leftAlbum)->date(),static_cast<PAlbum*>(rightAlbum)->date(),Qt::AscendingOrder)
< 0;
+                default:
+                    return
KStringHandler::naturalCompare(static_cast<PAlbum*>(leftAlbum)->category(),static_cast<PAlbum*>(rightAlbum)->category())
< 0;
+            }
+        }
+        else
         {
-            case AlbumSettings::ByFolder:
+            if((valLeft.type() == QVariant::String) && (valRight.type() ==
QVariant::String))
+            {
                 switch (AlbumSettings::instance()->getStringComparisonType())
                 {
                     case AlbumSettings::Natural:
-                        return
KStringHandler::naturalCompare(leftAlbum->title(), rightAlbum->title(),
sortCaseSensitivity()) < 0;
-
+                        return
KStringHandler::naturalCompare(valLeft.toString(), valRight.toString(),
sortCaseSensitivity()) < 0;
                     case AlbumSettings::Normal:
                     default:
-                        return QString::compare(leftAlbum->title(),
rightAlbum->title(), sortCaseSensitivity()) < 0;
+                        return QString::compare(valLeft.toString(),
valRight.toString(), sortCaseSensitivity()) < 0;
                 }
-            case AlbumSettings::ByDate:
-                return
compareByOrder(leftAlbum->date(),rightAlbum->date(),Qt::AscendingOrder) < 0;
-            default:
-                return
KStringHandler::naturalCompare(leftAlbum->category(),rightAlbum->category()) <
0;
+            }
         }
     }
-    else
-    {
-        return QSortFilterProxyModel::lessThan(left, right);
-    }
+
+    return QSortFilterProxyModel::lessThan(left, right);
 }

 void AlbumFilterModel::slotAlbumRenamed(Album* album)

-- 
You are receiving this mail because:
You are the assignee for the bug.



More information about the Digikam-devel mailing list