Commit eee9d518 authored by Peter Penz's avatar Peter Penz
Browse files

Only group the directories before items if the KDirModel::Name column is...

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
parent 74250f8a
......@@ -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)) {
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 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;
if (!leftIsDir && rightIsDir) {
return false;
}
}
const QString leftStr = leftData.toString();
const QString rightStr = rightData.toString();
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;
};
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment