#include <klocale.h>
#include <kdirmodel.h>
-#include <QSortFilterProxyModel>
+#include <QtGui/QSortFilterProxyModel>
DolphinItemCategorizer::DolphinItemCategorizer() :
KItemCategorizer()
{
QString retString;
- if (!index.isValid()) {
+ if (!index.isValid())
+ {
+ return retString;
+ }
+
+ int indexColumn;
+
+ switch (sortRole)
+ {
+ case DolphinView::SortByName:
+ indexColumn = KDirModel::Name;
+ break;
+ case DolphinView::SortBySize:
+ indexColumn = KDirModel::Size;
+ break;
+ default:
return retString;
}
// KDirModel checks columns to know to which role are
// we talking about
QModelIndex theIndex = index.model()->index(index.row(),
- sortRole,
+ indexColumn,
index.parent());
- const QSortFilterProxyModel* proxyModel = static_cast<const QSortFilterProxyModel*>(index.model());
- const KDirModel* dirModel = static_cast<const KDirModel*>(proxyModel->sourceModel());
+ if (!theIndex.isValid()) {
+ return retString;
+ }
QVariant data = theIndex.model()->data(theIndex, Qt::DisplayRole);
- QModelIndex mappedIndex = proxyModel->mapToSource(theIndex);
- KFileItem* item = dirModel->itemForIndex(mappedIndex);
+ const KDirModel *dirModel = qobject_cast<const KDirModel*>(index.model());
+ KFileItem* item = dirModel->itemForIndex(index);
- switch (sortRole) {
+ switch (sortRole)
+ {
case DolphinView::SortByName:
- retString = data.toString().toUpper().at(0);
+ if (data.toString().size())
+ {
+ if (!item->isHidden() && data.toString().at(0).isLetter())
+ retString = data.toString().toUpper().at(0);
+ else if (item->isHidden() && data.toString().at(0) == '.' &&
+ data.toString().at(1).isLetter())
+ retString = data.toString().toUpper().at(1);
+ else if (item->isHidden() && data.toString().at(0) == '.' &&
+ !data.toString().at(1).isLetter())
+ retString = i18n("Others");
+ else if (item->isHidden() && data.toString().at(0) != '.')
+ retString = data.toString().toUpper().at(0);
+ else if (item->isHidden())
+ retString = data.toString().toUpper().at(0);
+ else
+ retString = i18n("Others");
+ }
break;
case DolphinView::SortBySize:
int fileSize = (item) ? item->size() : -1;
if (item && item->isDir()) {
- retString = i18n("Unknown");
+ retString = i18n("Folders");
} else if (fileSize < 5242880) {
- retString = i18n("Small");
+ retString = i18nc("Size", "Small");
} else if (fileSize < 10485760) {
- retString = i18n("Medium");
+ retString = i18nc("Size", "Medium");
} else {
- retString = i18n("Big");
+ retString = i18nc("Size", "Big");
}
break;
}