┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRafael Fernández López <[email protected]>2007-06-18 16:11:11 +0000
committerRafael Fernández López <[email protected]>2007-06-18 16:11:11 +0000
commitec5c086bc897f8934b6a303531b97339f1538175 (patch)
tree17517c59c017ffae55960e566f266f532e16cdd2 /src
parent54f6ab585b4c34c6083f2229c44ba4ead064672a (diff)
Let Dolphin act as Konqueror on KDE3 does when sorting. Folders have more priority than hidden items. So now items are shown: 1. Hidden Folders 2. Visible Folders 3.
Hidden Files 4. Visible Files CCMAIL: [email protected] svn path=/trunk/KDE/kdebase/apps/; revision=677173
Diffstat (limited to 'src')
-rw-r--r--src/dolphinsortfilterproxymodel.cpp110
1 files changed, 59 insertions, 51 deletions
diff --git a/src/dolphinsortfilterproxymodel.cpp b/src/dolphinsortfilterproxymodel.cpp
index ed0e111a6..17880e5a8 100644
--- a/src/dolphinsortfilterproxymodel.cpp
+++ b/src/dolphinsortfilterproxymodel.cpp
@@ -122,9 +122,18 @@ bool DolphinSortFilterProxyModel::lessThanGeneralPurpose(const QModelIndex &left
const KFileItem *rightFileItem = dirModel->itemForIndex(right);
if (sortRole() == DolphinView::SortByName) { // If we are sorting by name
+ QString leftFileName = leftFileItem->name();
+ QString rightFileName = rightFileItem->name();
+
+ leftFileName = leftFileName.at(0) == '.' ? leftFileName.mid(1) :
+ leftFileName;
+
+ rightFileName = rightFileName.at(0) == '.' ? rightFileName.mid(1) :
+ rightFileName;
+
// We don't care about case for building categories. We also don't
// want here to compare by a natural comparation
- return QString::compare(leftFileItem->name(), rightFileItem->name(), Qt::CaseInsensitive) < 0;
+ return QString::compare(leftFileName, rightFileName, Qt::CaseInsensitive) < 0;
}
else if (sortRole() == DolphinView::SortBySize) { // If we are sorting by size
// If we are sorting by size, show folders first. We will sort them
@@ -181,21 +190,20 @@ bool DolphinSortFilterProxyModel::lessThan(const QModelIndex& left,
if (sortRole() == DolphinView::SortByName) { // If we are sorting by name
if ((leftData.type() == QVariant::String) && (rightData.type() ==
QVariant::String)) {
- // Priority: hidden > folders > regular files. If an item is
- // hidden (doesn't matter if file or folder) will have higher
- // preference than a non-hidden item
- if (leftFileItem->isHidden() && !rightFileItem->isHidden()) {
+ // On our priority, folders go above regular files
+ if (leftFileItem->isDir() && !rightFileItem->isDir()) {
return true;
}
- else if (!leftFileItem->isHidden() && rightFileItem->isHidden()) {
+ else if (!leftFileItem->isDir() && rightFileItem->isDir()) {
return false;
}
- // On our priority, folders go above regular files
- if (leftFileItem->isDir() && !rightFileItem->isDir()) {
+ // Hidden elements go before visible ones, if they both are
+ // folders or files
+ if (leftFileItem->isHidden() && !rightFileItem->isHidden()) {
return true;
}
- else if (!leftFileItem->isDir() && rightFileItem->isDir()) {
+ else if (!leftFileItem->isHidden() && rightFileItem->isHidden()) {
return false;
}
@@ -208,20 +216,20 @@ bool DolphinSortFilterProxyModel::lessThan(const QModelIndex& left,
}
}
else if (sortRole() == DolphinView::SortBySize) { // If we are sorting by size
- // If an item is hidden (doesn't matter if file or folder) will have
- // higher preference than a non-hidden item
- if (leftFileItem->isHidden() && !rightFileItem->isHidden()) {
+ // On our priority, folders go above regular files
+ if (leftFileItem->isDir() && !rightFileItem->isDir()) {
return true;
}
- else if (!leftFileItem->isHidden() && rightFileItem->isHidden()) {
+ else if (!leftFileItem->isDir() && rightFileItem->isDir()) {
return false;
}
- // On our priority, folders go above regular files
- if (leftFileItem->isDir() && !rightFileItem->isDir()) {
+ // Hidden elements go before visible ones, if they both are
+ // folders or files
+ if (leftFileItem->isHidden() && !rightFileItem->isHidden()) {
return true;
}
- else if (!leftFileItem->isDir() && rightFileItem->isDir()) {
+ else if (!leftFileItem->isHidden() && rightFileItem->isHidden()) {
return false;
}
@@ -258,20 +266,20 @@ bool DolphinSortFilterProxyModel::lessThan(const QModelIndex& left,
return leftFileItem->size() < rightFileItem->size();
}
else if (sortRole() == DolphinView::SortByDate) {
- // If an item is hidden (doesn't matter if file or folder) will have
- // higher preference than a non-hidden item
- if (leftFileItem->isHidden() && !rightFileItem->isHidden()) {
+ // On our priority, folders go above regular files
+ if (leftFileItem->isDir() && !rightFileItem->isDir()) {
return true;
}
- else if (!leftFileItem->isHidden() && rightFileItem->isHidden()) {
+ else if (!leftFileItem->isDir() && rightFileItem->isDir()) {
return false;
}
- // On our priority, folders go above regular files
- if (leftFileItem->isDir() && !rightFileItem->isDir()) {
+ // Hidden elements go before visible ones, if they both are
+ // folders or files
+ if (leftFileItem->isHidden() && !rightFileItem->isHidden()) {
return true;
}
- else if (!leftFileItem->isDir() && rightFileItem->isDir()) {
+ else if (!leftFileItem->isHidden() && rightFileItem->isHidden()) {
return false;
}
@@ -289,20 +297,20 @@ bool DolphinSortFilterProxyModel::lessThan(const QModelIndex& left,
return leftTime > rightTime;
}
else if (sortRole() == DolphinView::SortByPermissions) {
- // If an item is hidden (doesn't matter if file or folder) will have
- // higher preference than a non-hidden item
- if (leftFileItem->isHidden() && !rightFileItem->isHidden()) {
+ // On our priority, folders go above regular files
+ if (leftFileItem->isDir() && !rightFileItem->isDir()) {
return true;
}
- else if (!leftFileItem->isHidden() && rightFileItem->isHidden()) {
+ else if (!leftFileItem->isDir() && rightFileItem->isDir()) {
return false;
}
- // On our priority, folders go above regular files
- if (leftFileItem->isDir() && !rightFileItem->isDir()) {
+ // Hidden elements go before visible ones, if they both are
+ // folders or files
+ if (leftFileItem->isHidden() && !rightFileItem->isHidden()) {
return true;
}
- else if (!leftFileItem->isDir() && rightFileItem->isDir()) {
+ else if (!leftFileItem->isHidden() && rightFileItem->isHidden()) {
return false;
}
@@ -319,20 +327,20 @@ bool DolphinSortFilterProxyModel::lessThan(const QModelIndex& left,
rightPermissions) < 0;
}
else if (sortRole() == DolphinView::SortByOwner) {
- // If an item is hidden (doesn't matter if file or folder) will have
- // higher preference than a non-hidden item
- if (leftFileItem->isHidden() && !rightFileItem->isHidden()) {
+ // On our priority, folders go above regular files
+ if (leftFileItem->isDir() && !rightFileItem->isDir()) {
return true;
}
- else if (!leftFileItem->isHidden() && rightFileItem->isHidden()) {
+ else if (!leftFileItem->isDir() && rightFileItem->isDir()) {
return false;
}
- // On our priority, folders go above regular files
- if (leftFileItem->isDir() && !rightFileItem->isDir()) {
+ // Hidden elements go before visible ones, if they both are
+ // folders or files
+ if (leftFileItem->isHidden() && !rightFileItem->isHidden()) {
return true;
}
- else if (!leftFileItem->isDir() && rightFileItem->isDir()) {
+ else if (!leftFileItem->isHidden() && rightFileItem->isHidden()) {
return false;
}
@@ -349,20 +357,20 @@ bool DolphinSortFilterProxyModel::lessThan(const QModelIndex& left,
rightOwner.toLower()) < 0;
}
else if (sortRole() == DolphinView::SortByGroup) {
- // If an item is hidden (doesn't matter if file or folder) will have
- // higher preference than a non-hidden item
- if (leftFileItem->isHidden() && !rightFileItem->isHidden()) {
+ // On our priority, folders go above regular files
+ if (leftFileItem->isDir() && !rightFileItem->isDir()) {
return true;
}
- else if (!leftFileItem->isHidden() && rightFileItem->isHidden()) {
+ else if (!leftFileItem->isDir() && rightFileItem->isDir()) {
return false;
}
- // On our priority, folders go above regular files
- if (leftFileItem->isDir() && !rightFileItem->isDir()) {
+ // Hidden elements go before visible ones, if they both are
+ // folders or files
+ if (leftFileItem->isHidden() && !rightFileItem->isHidden()) {
return true;
}
- else if (!leftFileItem->isDir() && rightFileItem->isDir()) {
+ else if (!leftFileItem->isHidden() && rightFileItem->isHidden()) {
return false;
}
@@ -379,20 +387,20 @@ bool DolphinSortFilterProxyModel::lessThan(const QModelIndex& left,
rightGroup.toLower()) < 0;
}
else if (sortRole() == DolphinView::SortByType) {
- // If an item is hidden (doesn't matter if file or folder) will have
- // higher preference than a non-hidden item
- if (leftFileItem->isHidden() && !rightFileItem->isHidden()) {
+ // On our priority, folders go above regular files
+ if (leftFileItem->isDir() && !rightFileItem->isDir()) {
return true;
}
- else if (!leftFileItem->isHidden() && rightFileItem->isHidden()) {
+ else if (!leftFileItem->isDir() && rightFileItem->isDir()) {
return false;
}
- // On our priority, folders go above regular files
- if (leftFileItem->isDir() && !rightFileItem->isDir()) {
+ // Hidden elements go before visible ones, if they both are
+ // folders or files
+ if (leftFileItem->isHidden() && !rightFileItem->isHidden()) {
return true;
}
- else if (!leftFileItem->isDir() && rightFileItem->isDir()) {
+ else if (!leftFileItem->isHidden() && rightFileItem->isHidden()) {
return false;
}