summaryrefslogtreecommitdiffstats
path: root/filesorter.cpp
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2016-09-03 07:06:55 +0200
committerArno <arno@disconnect.de>2016-09-03 07:06:55 +0200
commitc3cfc9dd9d94a3c3ce2d58c0ec9320c03489f496 (patch)
treeafae7b4c9754ed5c986a8988c0b5f5f74f988b96 /filesorter.cpp
parentea8d506033f5694ad3053aa691640aff3a675fb9 (diff)
downloadShemovCleaner-c3cfc9dd9d94a3c3ce2d58c0ec9320c03489f496.tar.gz
ShemovCleaner-c3cfc9dd9d94a3c3ce2d58c0ec9320c03489f496.tar.bz2
ShemovCleaner-c3cfc9dd9d94a3c3ce2d58c0ec9320c03489f496.zip
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<QStandardItem*> instead of individual QStandardItem*s. Use enums to access columns.
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);
+}