]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Fix sorting issues
authorPeter Penz <peter.penz19@gmail.com>
Tue, 31 Jan 2012 13:58:25 +0000 (14:58 +0100)
committerPeter Penz <peter.penz19@gmail.com>
Tue, 31 Jan 2012 13:59:34 +0000 (14:59 +0100)
For some roles the sorting has not been implemented.

BUG: 292941
FIXED-IN: 4.8.1

src/kitemviews/kfileitemmodel.cpp
src/kitemviews/kfileitemmodel.h

index 163db8270f588e5bf93a01c60861b5b4e2e825ce..d64954698e53a0f48c9cc50c6797b59a15f2fb47 100644 (file)
@@ -1125,6 +1125,30 @@ KFileItemModel::Role KFileItemModel::roleIndex(const QByteArray& role) const
     return rolesHash.value(role, NoRole);
 }
 
+QByteArray KFileItemModel::roleByteArray(Role role) const
+{
+    static const char* const roles[RolesCount] = {
+        0, // NoRole
+        "name",
+        "size",
+        "date",
+        "permissions",
+        "owner",
+        "group",
+        "type",
+        "destination",
+        "path",
+        "comment",
+        "tags",
+        "rating",
+        "isDir",
+        "isExpanded",
+        "isExpandable",
+        "expansionLevel"        
+    };
+    return roles[role];
+}
+
 QHash<QByteArray, QVariant> KFileItemModel::retrieveData(const KFileItem& item) const
 {    
     // It is important to insert only roles that are fast to retrieve. E.g.
@@ -1274,18 +1298,7 @@ int KFileItemModel::sortRoleCompare(const ItemData* a, const ItemData* b) const
     case NameRole:
         // The name role is handled as default fallback after the switch
         break;
-
-    case DateRole: {
-        const KDateTime dateTimeA = itemA.time(KFileItem::ModificationTime);
-        const KDateTime dateTimeB = itemB.time(KFileItem::ModificationTime);
-        if (dateTimeA < dateTimeB) {
-            result = -1;
-        } else if (dateTimeA > dateTimeB) {
-            result = +1;
-        }
-        break;
-    }
-
+        
     case SizeRole: {
         if (itemA.isDir()) {
             Q_ASSERT(itemB.isDir()); // see "if (m_sortFoldersFirst || m_sortRole == SizeRole)" above
@@ -1307,29 +1320,36 @@ int KFileItemModel::sortRoleCompare(const ItemData* a, const ItemData* b) const
         break;
     }
 
-    case TypeRole: {
-        result = QString::compare(a->values.value("type").toString(),
-                                  b->values.value("type").toString());
+    case DateRole: {
+        const KDateTime dateTimeA = itemA.time(KFileItem::ModificationTime);
+        const KDateTime dateTimeB = itemB.time(KFileItem::ModificationTime);
+        if (dateTimeA < dateTimeB) {
+            result = -1;
+        } else if (dateTimeA > dateTimeB) {
+            result = +1;
+        }
         break;
     }
-
-    case CommentRole: {
-        result = QString::compare(a->values.value("comment").toString(),
-                                  b->values.value("comment").toString());
+    
+    case RatingRole: {
+        result = a->values.value("rating").toInt() - b->values.value("rating").toInt();
         break;
     }
-
+    
+    case PermissionsRole:
+    case OwnerRole:
+    case GroupRole:
+    case TypeRole:
+    case DestinationRole:
+    case PathRole:
+    case CommentRole:
     case TagsRole: {
-        result = QString::compare(a->values.value("tags").toString(),
-                                  b->values.value("tags").toString());
+        const QByteArray role = roleByteArray(m_sortRole);
+        result = QString::compare(a->values.value(role).toString(),
+                                  b->values.value(role).toString());
         break;
     }
-
-    case RatingRole: {
-        result = a->values.value("rating").toInt() - b->values.value("rating").toInt();
-        break;
-    }
-
+        
     default:
         break;
     }
index 6276dc229e6565333cba4661d7a905485737afdf..ff816c85ca0e5ce5835b427df9424cc8d6a4fc6b 100644 (file)
@@ -237,7 +237,17 @@ private:
      */
     void resetRoles();
 
+    /**
+     * @return Role-index for the given role byte-array.
+     *         Runtime complexity is O(1).
+     */
     Role roleIndex(const QByteArray& role) const;
+    
+    /**
+     * @return Role-byte-array for the given role-index.
+     *         Runtime complexity is O(1).
+     */
+    QByteArray roleByteArray(Role role) const;
 
     QHash<QByteArray, QVariant> retrieveData(const KFileItem& item) const;