From c3cfc9dd9d94a3c3ce2d58c0ec9320c03489f496 Mon Sep 17 00:00:00 2001 From: Arno Date: Sat, 3 Sep 2016 07:06:55 +0200 Subject: Fix Video sorting Show directories in FileWidget and always put ".." first, then the directories by creating a new QSortFilterProxyModel. For this the file attribute is needed for every column, so use QList instead of individual QStandardItem*s. Use enums to access columns. --- filesorter.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'filesorter.cpp') diff --git a/filesorter.cpp b/filesorter.cpp index a87ac6f..b155a7c 100644 --- a/filesorter.cpp +++ b/filesorter.cpp @@ -1,4 +1,5 @@ #include "filesorter.h" +#include "filewidget.h" FileSorter::FileSorter(QObject *parent) : QSortFilterProxyModel(parent) {} @@ -10,3 +11,31 @@ bool FileSorter::lessThan(const QModelIndex &source_left, const QModelIndex &sou } return QSortFilterProxyModel::lessThan(source_left, source_right); } + +VideoSorter::VideoSorter(QObject *parent) : QSortFilterProxyModel(parent) {} + +bool VideoSorter::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const { + int leftData = sourceModel()->data(source_left, Qt::UserRole + 1).toInt(); + int rightData = sourceModel()->data(source_right, Qt::UserRole + 1).toInt(); + + //always Sort DotDot first + if(leftData == FileWidget::ParentDir && rightData != FileWidget::ParentDir){ + return sortOrder() == Qt::AscendingOrder; + }else if(leftData != FileWidget::ParentDir && rightData == FileWidget::ParentDir){ + return sortOrder() != Qt::AscendingOrder; + } + + //followed by directories + if(leftData == FileWidget::Directory && rightData != FileWidget::Directory){ + return sortOrder() == Qt::AscendingOrder; + }else if(leftData != FileWidget::Directory && rightData == FileWidget::Directory){ + return sortOrder() != Qt::AscendingOrder; + } + + //now check if we're sorting IconRow + if(source_left.column() == FileWidget::IconRow){ + return leftData < rightData; + } + + return QSortFilterProxyModel::lessThan(source_left, source_right); +} -- cgit v1.2.3-70-g09d2