mirror of
https://invent.kde.org/system/dolphin
synced 2024-07-04 17:30:55 +00:00
Only group the directories before items if the KDirModel::Name column is sorted. If the sorting is done e. g. by the date column, it is confusing when still directories are seperated from items.
svn path=/trunk/playground/utils/dolphin/; revision=630674
This commit is contained in:
parent
3f53b0f32d
commit
fe1cb386e4
|
@ -39,7 +39,10 @@ static DolphinView::Sorting dirModelColumnToDolphinView[] = {
|
|||
|
||||
|
||||
DolphinSortFilterProxyModel::DolphinSortFilterProxyModel(QObject* parent) :
|
||||
QSortFilterProxyModel(parent)
|
||||
QSortFilterProxyModel(parent),
|
||||
m_sortColumn(0),
|
||||
m_sorting(DolphinView::SortByName),
|
||||
m_sortOrder(Qt::Ascending)
|
||||
{
|
||||
setDynamicSortFilter(true);
|
||||
|
||||
|
@ -70,11 +73,12 @@ void DolphinSortFilterProxyModel::setSortOrder(Qt::SortOrder sortOrder)
|
|||
|
||||
void DolphinSortFilterProxyModel::sort(int column, Qt::SortOrder sortOrder)
|
||||
{
|
||||
m_sortColumn = column;
|
||||
m_sortOrder = sortOrder;
|
||||
m_sorting = (column >= 0) && (column <= dolphinMapSize) ?
|
||||
dirModelColumnToDolphinView[column] :
|
||||
DolphinView::SortByName;
|
||||
QSortFilterProxyModel::sort(column,sortOrder);
|
||||
QSortFilterProxyModel::sort(column, sortOrder);
|
||||
}
|
||||
|
||||
bool DolphinSortFilterProxyModel::lessThan(const QModelIndex& left,
|
||||
|
@ -86,21 +90,23 @@ bool DolphinSortFilterProxyModel::lessThan(const QModelIndex& left,
|
|||
QVariant rightData = dirModel->data(right, sortRole());
|
||||
|
||||
if ((leftData.type() == QVariant::String) && (rightData.type() == QVariant::String)) {
|
||||
// assure that directories are always sorted before files
|
||||
// if the sorting is done by the 'Name' column
|
||||
if (m_sortColumn == KDirModel::Name) {
|
||||
const bool leftIsDir = dirModel->itemForIndex(left)->isDir();
|
||||
const bool rightIsDir = dirModel->itemForIndex(right)->isDir();
|
||||
if (leftIsDir && !rightIsDir) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!leftIsDir && rightIsDir) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
const QString leftStr = leftData.toString();
|
||||
const QString rightStr = rightData.toString();
|
||||
|
||||
const bool leftIsDir = dirModel->itemForIndex(left)->isDir();
|
||||
const bool rightIsDir = dirModel->itemForIndex(right)->isDir();
|
||||
|
||||
// assure that directories are always sorted before files
|
||||
if (leftIsDir && !rightIsDir) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!leftIsDir && rightIsDir) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return sortCaseSensitivity() ? (naturalCompare(leftStr, rightStr) < 0) :
|
||||
(naturalCompare(leftStr.toLower(), rightStr.toLower()) < 0);
|
||||
}
|
||||
|
|
|
@ -69,6 +69,7 @@ private:
|
|||
static int naturalCompare(const QString& a, const QString& b);
|
||||
|
||||
private:
|
||||
int m_sortColumn;
|
||||
DolphinView::Sorting m_sorting;
|
||||
Qt::SortOrder m_sortOrder;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue
Block a user