summaryrefslogtreecommitdiffstats
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
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.
-rw-r--r--filesorter.cpp29
-rw-r--r--filesorter.h9
-rw-r--r--filewidget.cpp62
-rw-r--r--filewidget.h8
-rw-r--r--shemovcleaner.qrc1
-rw-r--r--up_dick.pngbin0 -> 836 bytes
6 files changed, 84 insertions, 25 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);
+}
diff --git a/filesorter.h b/filesorter.h
index 92bc71e..11012ed 100644
--- a/filesorter.h
+++ b/filesorter.h
@@ -10,7 +10,16 @@ class FileSorter : public QSortFilterProxyModel {
protected:
virtual bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const;
+};
+
+class VideoSorter : public QSortFilterProxyModel {
+ Q_OBJECT
+ public:
+ explicit VideoSorter(QObject *parent = 0);
+ protected:
+ virtual bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const;
};
+
#endif // FILESORTER_H
diff --git a/filewidget.cpp b/filewidget.cpp
index 6d67007..d1d7a6a 100644
--- a/filewidget.cpp
+++ b/filewidget.cpp
@@ -68,7 +68,7 @@ void FileWidget::setupGui(){
mFileView->setSelectionMode(QAbstractItemView::ExtendedSelection);
mModel = new QStandardItemModel;
- mProxy = new FileSorter;
+ mProxy = new VideoSorter;
mProxy->setSourceModel(mModel);
mFileView->setModel(mProxy);
readSettings();
@@ -96,7 +96,7 @@ void FileWidget::selectDir(){
void FileWidget::gatherData(){
QDir d(mDir->text());
- QFileInfoList fl = d.entryInfoList(QStringList() << "*", QDir::Files, QDir::Name);
+ QFileInfoList fl = d.entryInfoList(QStringList() << "*", QDir::Files | QDir::Dirs | QDir::NoDot, QDir::Name | QDir::DirsFirst);
mModel->clear();
QStandardItem *root = mModel->invisibleRootItem();
mModel->setHorizontalHeaderLabels(QStringList() << QChar(0x26A7) << tr("Name") << tr("MIME") << tr("MD5"));
@@ -108,34 +108,52 @@ void FileWidget::gatherData(){
foreach(QFileInfo fi, fl){
QMimeType mime = db.mimeTypeForFile(fi);
- QStandardItem *i1;
- QStandardItem *i2 = new QStandardItem(fi.fileName());
- i2->setEditable(false);
- QStandardItem *i4;
+ QList<QStandardItem*> fData;
+ FileAttrs attr = NotPresent;
+ for(int i = 0; i < RowCount; ++i){
+ QStandardItem *item = new QStandardItem;
+ item->setEditable(false);
+ if(i == Md5Row){
+ item->setFont(QFont("courier new"));
+ }
+ fData << item;
+ }
+ fData[NameRow]->setText(fi.fileName());
if(mime.name().startsWith("video")){
QString md5 = Helper::md5Sum(fi.absoluteFilePath());
- i4 = new QStandardItem(md5);
- i4->setFont(QFont("courier new"));
+ fData[Md5Row]->setText(md5);
int haveFile = md5Count(md5);
if(haveFile){
- i1 = new QStandardItem(QIcon(":/huge_bra.png"), QString());
- i1->setData(Present);
- i2->setForeground(greenBrush);
+ fData[IconRow]->setIcon(QIcon(":/huge_bra.png"));
+ fData[NameRow]->setForeground(greenBrush);
+ attr = Present;
+ }else{
+ fData[IconRow]->setIcon(QIcon(":/chastity_belt.png"));
+ fData[NameRow]->setForeground(redBrush);
+ attr = NotPresent;
+ }
+ }else if(fi.isDir()){
+ if(fi.fileName() == ".."){
+ fData[IconRow]->setIcon(QIcon(":/up_dick.png"));
+ attr = ParentDir;
}else{
- i1 = new QStandardItem(QIcon(":/chastity_belt.png"), QString());
- i1->setData(NotPresent);
- i2->setForeground(redBrush);
+ fData[IconRow]->setIcon(QIcon(":/folder.png"));
+ attr = Directory;
}
+ fData[Md5Row]->setText(tr("n/a"));
}else{
- i1 = new QStandardItem(QIcon(":/gaping_ass.png"), QString());
- i1->setData(NoVideo);
- i4 = new QStandardItem(tr("n/a"));
- i4->setFont(QFont("courier new"));
+ fData[IconRow]->setIcon(QIcon(":/gaping_ass.png"));
+ fData[Md5Row]->setText(tr("n/a"));
+ attr = NoVideo;
+ }
+ fData[MimeRow]->setText(mime.name());
+ if(mime.name() == "inode/directory"){
+ fData[MimeRow]->setText("directory");
+ }
+ for(int i = 0; i < RowCount; ++i){
+ fData[i]->setData(attr);
}
- i1->setEditable(false);
- QStandardItem *i3 = new QStandardItem(mime.name());
- i3->setEditable(false);
- root->appendRow(QList<QStandardItem*>() << i1 << i2 << i3 << i4);
+ root->appendRow(fData);
}
readHeaderData();
qApp->restoreOverrideCursor();
diff --git a/filewidget.h b/filewidget.h
index b00d742..504a6c7 100644
--- a/filewidget.h
+++ b/filewidget.h
@@ -9,12 +9,14 @@ class QLineEdit;
class QPushButton;
class QStandardItemModel;
class QTreeView;
-class FileSorter;
+class VideoSorter;
class FileWidget : public QWidget {
Q_OBJECT
public:
- enum FileAttrs { NotPresent = 0, Present = 1, NoVideo = 2 };
+ enum FileAttrs { NotPresent = 0, Present = 1, NoVideo = 2, ParentDir = 3, Directory = 4 };
+ enum { RowCount = 4 };
+ enum Colums { IconRow = 0, NameRow = 1, MimeRow = 2, Md5Row = 3 };
explicit FileWidget(QWidget *parent = 0);
~FileWidget();
@@ -36,7 +38,7 @@ class FileWidget : public QWidget {
QPushButton *mSearch;
QStandardItemModel *mModel;
QTreeView *mFileView;
- FileSorter *mProxy;
+ VideoSorter *mProxy;
QSqlDatabase mDb;
QSqlQuery mQOrigin;
QSqlQuery mQFiles;
diff --git a/shemovcleaner.qrc b/shemovcleaner.qrc
index e1145d4..7083020 100644
--- a/shemovcleaner.qrc
+++ b/shemovcleaner.qrc
@@ -10,5 +10,6 @@
<file>refresh.png</file>
<file>chastity_belt.png</file>
<file>edit-copy.png</file>
+ <file>up_dick.png</file>
</qresource>
</RCC>
diff --git a/up_dick.png b/up_dick.png
new file mode 100644
index 0000000..778df2d
--- /dev/null
+++ b/up_dick.png
Binary files differ