From 11f0a8c50310ebbcaa93318cb097077482268cdd Mon Sep 17 00:00:00 2001 From: Rafael Fernández López Date: Sun, 17 Jun 2007 15:32:31 +0000 Subject: New and powerful KListView. Still pending class renaming. There are two methods that I need to think about it, and boost. Small issues like reloading all data when sorting role suddenly changes. In general terms it will work nice when you sort by name or size. We have to work further when we sort by other roles. Nice times. svn path=/trunk/KDE/kdebase/apps/; revision=676732 --- src/dolphinitemcategorizer.cpp | 67 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 54 insertions(+), 13 deletions(-) (limited to 'src/dolphinitemcategorizer.cpp') diff --git a/src/dolphinitemcategorizer.cpp b/src/dolphinitemcategorizer.cpp index 05c23a01d..cea6bebd5 100644 --- a/src/dolphinitemcategorizer.cpp +++ b/src/dolphinitemcategorizer.cpp @@ -41,38 +41,79 @@ QString DolphinItemCategorizer::categoryForItem(const QModelIndex& index, { 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(index.model()); - const KDirModel* dirModel = static_cast(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(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 = i18n(".%1 (Hidden)", data.toString().toUpper().at(1)); + else if (item->isHidden() && data.toString().at(0) == '.' && + !data.toString().at(1).isLetter()) + retString = i18n("Others (Hidden)"); + else if (item->isHidden() && data.toString().at(0) != '.') + retString = i18n("%1 (Hidden)", 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"); - } else if (fileSize < 5242880) { + if (item && item->isDir() && !item->isHidden()) { + retString = i18n("Folders"); + } else if (fileSize < 5242880 && !item->isHidden()) { retString = i18n("Small"); - } else if (fileSize < 10485760) { + } else if (fileSize < 10485760 && !item->isHidden()) { retString = i18n("Medium"); - } else { + } else if (!item->isHidden()){ retString = i18n("Big"); + } else if (item && item->isDir() && item->isHidden()) { + retString = i18n("Folders (Hidden)"); + } else if (fileSize < 5242880 && item->isHidden()) { + retString = i18n("Small (Hidden)"); + } else if (fileSize < 10485760 && item->isHidden()) { + retString = i18n("Medium (Hidden)"); + } else if (item->isHidden()){ + retString = i18n("Big (Hidden)"); } break; } -- cgit v1.3