summaryrefslogtreecommitdiffstats
path: root/filesorter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'filesorter.cpp')
-rw-r--r--filesorter.cpp29
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);
+}