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.
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
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;
}
*/
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;