diff options
Diffstat (limited to 'filesorter.cpp')
-rw-r--r-- | filesorter.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
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); +} |