- if (role == KCategorizedSortFilterProxyModel::CategoryDisplayRole) {
- QString retString;
-
- if (!index.isValid()) {
- return retString;
- }
-
- const KDirModel *dirModel = qobject_cast<const KDirModel*>(index.model());
- KFileItem item = dirModel->itemForIndex(index);
-
- switch (index.column()) {
- case KDirModel::Name: {
- // KDirModel checks columns to know to which role are
- // we talking about
- QModelIndex theIndex = index.model()->index(index.row(),
- KDirModel::Name,
- index.parent());
-
- if (!theIndex.isValid()) {
- return retString;
- }
- QVariant data = theIndex.model()->data(theIndex, Qt::DisplayRole);
- QString name = data.toString();
- if (!name.isEmpty()) {
- if (!item.isHidden() && name.at(0).isLetter())
- retString = name.at(0).toUpper();
- else if (item.isHidden()) {
- if (name.at(0) == '.') {
- if (name.size() > 1 && name.at(1).isLetter()) {
- retString = name.at(1).toUpper();
- } else {
- retString = i18nc("@title:group Name", others);
- }
- } else {
- retString = name.at(0).toUpper();
- }
- } else {
- bool validCategory = false;
-
- const QString str(name.toUpper());
- const QChar* currA = str.unicode();
- while (!currA->isNull() && !validCategory) {
- if (currA->isLetter()) {
- validCategory = true;
- } else if (currA->isDigit()) {
- return i18nc("@title:group Name", others);
- } else {
- ++currA;
- }
- }
-
- if (!validCategory) {
- retString = validCategory ? *currA : i18nc("@title:group Name", others);
- } else {
- retString = *currA;
- }
- }
- }
- break;
- }
-
- case KDirModel::Size: {
- const int fileSize = !item.isNull() ? item.size() : -1;
- if (!item.isNull() && item.isDir()) {
- retString = i18nc("@title:group Size", "Folders");
- } else if (fileSize < 5242880) {
- retString = i18nc("@title:group Size", "Small");
- } else if (fileSize < 10485760) {
- retString = i18nc("@title:group Size", "Medium");
- } else {
- retString = i18nc("@title:group Size", "Big");
- }
- break;
- }
-
- case KDirModel::ModifiedTime: {
- KDateTime modifiedTime = item.time(KFileItem::ModificationTime);
- modifiedTime = modifiedTime.toLocalZone();