+ else if (role == KCategorizedSortFilterProxyModel::CategorySortRole) {
+ QVariant retVariant;
+
+ if (!index.isValid()) {
+ return retVariant;
+ }
+
+ const KDirModel *dirModel = qobject_cast<const KDirModel*>(index.model());
+ KFileItem item = dirModel->itemForIndex(index);
+
+ switch (index.column()) {
+ case KDirModel::Name: {
+ retVariant = data(index, KCategorizedSortFilterProxyModel::CategoryDisplayRole);
+
+ if (retVariant == i18nc("@title:group Name", others))
+ retVariant = QString(QChar(QChar::ReplacementCharacter));
+
+ break;
+ }
+
+ case KDirModel::Size: {
+ const int fileSize = !item.isNull() ? item.size() : -1;
+ if (item.isDir()) {
+ retVariant = 0;
+ } else if (fileSize < 5242880) {
+ retVariant = 1;
+ } else if (fileSize < 10485760) {
+ retVariant = 2;
+ } else {
+ retVariant = 3;
+ }
+ break;
+ }
+
+ case KDirModel::ModifiedTime: {
+ KDateTime modifiedTime;
+ modifiedTime.setTime_t(item.time(KIO::UDSEntry::UDS_MODIFICATION_TIME));
+ modifiedTime = modifiedTime.toLocalZone();
+
+ retVariant = -(modifiedTime.date().year() * 100 + modifiedTime.date().month());
+ break;
+ }
+
+ case KDirModel::Permissions: {
+ QFileInfo info(item.url().pathOrUrl());
+
+ retVariant = -KDirSortFilterProxyModel::pointsForPermissions(info);
+ break;
+ }
+
+ case KDirModel::Owner:
+ retVariant = item.user();
+ break;
+
+ case KDirModel::Group:
+ retVariant = item.group();
+ break;
+
+ case KDirModel::Type:
+ if (item.isDir())
+ retVariant = QString(); // when sorting we want folders to be placed first
+ else
+ retVariant = item.mimeComment();
+ break;
+
+#ifdef HAVE_NEPOMUK
+ case DolphinModel::Rating: {
+ retVariant = ratingForIndex(index);
+ break;
+ }
+
+ case DolphinModel::Tags: {
+ retVariant = tagsForIndex(index).count();
+ break;
+ }
+#endif
+
+ default:
+ break;
+
+ }
+
+ return retVariant;
+ }