summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2018-03-31 19:32:57 +0200
committerArno <arno@disconnect.de>2018-03-31 19:32:57 +0200
commit3dd5dbd7d66a21b8dd8bded05636252d7ef84cba (patch)
tree3ccc57044fc84cc63a750f50c5f837933ef76f57
parentd4dae4ba8633ff8c58bbb4135850ddbd1dfa87a9 (diff)
downloadSheMov-3dd5dbd7d66a21b8dd8bded05636252d7ef84cba.tar.gz
SheMov-3dd5dbd7d66a21b8dd8bded05636252d7ef84cba.tar.bz2
SheMov-3dd5dbd7d66a21b8dd8bded05636252d7ef84cba.zip
More sorting for FSWidget
Sort size and duration by their actual numbers instead of alphabetically by the display string.
-rw-r--r--fsproxy.cpp21
-rw-r--r--fsproxy.h15
-rw-r--r--fswidget.cpp7
-rw-r--r--fswidget.h5
-rw-r--r--shemov.pro6
5 files changed, 48 insertions, 6 deletions
diff --git a/fsproxy.cpp b/fsproxy.cpp
new file mode 100644
index 0000000..26a70d8
--- /dev/null
+++ b/fsproxy.cpp
@@ -0,0 +1,21 @@
+#include "fsproxy.h"
+#include "fswidget.h"
+
+FSProxy::FSProxy(QObject *parent) : QSortFilterProxyModel(parent) {}
+
+bool FSProxy::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const {
+ //sort by size
+ if(source_left.column() == 2){
+ QVariant leftData = source_left.data(FSWidget::SizeRole);
+ QVariant rightData = source_right.data(FSWidget::SizeRole);
+ return leftData.toLongLong() < rightData.toLongLong();
+ }
+ //sort by duration
+ if(source_left.column() == 3){
+ QVariant leftData = source_left.data(FSWidget::DurationRole);
+ QVariant rightData = source_right.data(FSWidget::DurationRole);
+ return leftData.toLongLong() < rightData.toLongLong();
+ }
+ return QSortFilterProxyModel::lessThan(source_left, source_right);
+}
+
diff --git a/fsproxy.h b/fsproxy.h
new file mode 100644
index 0000000..2164307
--- /dev/null
+++ b/fsproxy.h
@@ -0,0 +1,15 @@
+#ifndef FSPROXY_H
+#define FSPROXY_H
+
+#include <QSortFilterProxyModel>
+
+class FSProxy : public QSortFilterProxyModel {
+ Q_OBJECT
+ public:
+ explicit FSProxy(QObject *parent = nullptr);
+
+ protected:
+ virtual bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const;
+};
+
+#endif // FSPROXY_H
diff --git a/fswidget.cpp b/fswidget.cpp
index 12f16fc..167aca7 100644
--- a/fswidget.cpp
+++ b/fswidget.cpp
@@ -21,6 +21,7 @@
#include "fswidget.h"
#include "helper.h"
#include "newmoviewizard.h"
+#include "fsproxy.h"
FSWidget::FSWidget(QWidget *parent) : QWidget(parent) {
mMovieWizard = new NewMovieWizard(this);
@@ -112,7 +113,7 @@ void FSWidget::setupWidget(){
mFileView->setSelectionBehavior(QAbstractItemView::SelectRows);
mFileView->setSelectionMode(QAbstractItemView::ExtendedSelection);
mModel = new QStandardItemModel;
- mProxy = new QSortFilterProxyModel;
+ mProxy = new FSProxy;
mProxy->setSourceModel(mModel);
mFileView->setModel(mProxy);
mFileView->sortByColumn(0, Qt::AscendingOrder);
@@ -284,10 +285,12 @@ void FSWidget::gatherData(const QString &curDir){
item->setFont(f);
item->setEditable(false);
item->setForeground(currentBrush);
+ item->setData(fi.absoluteFilePath(), FullPathRole);
+ item->setData(fi.size(), SizeRole);
+ item->setData(seconds, DurationRole);
items << item;
}
items[0]->setText(fi.fileName());
- items[0]->setData(fi.absoluteFilePath(), FullPathRole);
if(mimeName.startsWith("video")){
items[0]->setIcon(videoIcon);
}else if(mimeName.startsWith("image")){
diff --git a/fswidget.h b/fswidget.h
index 236f6e0..61cb732 100644
--- a/fswidget.h
+++ b/fswidget.h
@@ -10,11 +10,12 @@ class QStandardItemModel;
class QSortFilterProxyModel;
class QContextMenuEvent;
class NewMovieWizard;
+class FSProxy;
class FSWidget : public QWidget {
Q_OBJECT
public:
- enum CustomRoles { FullPathRole = Qt::UserRole + 1};
+ enum CustomRoles { FullPathRole = Qt::UserRole + 1, DurationRole = Qt::UserRole + 2, SizeRole = Qt::UserRole + 3 };
explicit FSWidget(QWidget *parent = nullptr);
~FSWidget();
@@ -44,7 +45,7 @@ class FSWidget : public QWidget {
QComboBox *mFilterCB;
QTreeView *mFileView;
QStandardItemModel *mModel;
- QSortFilterProxyModel *mProxy;
+ FSProxy *mProxy;
NewMovieWizard *mMovieWizard;
int mQueryCount;
};
diff --git a/shemov.pro b/shemov.pro
index 97e8651..91ab270 100644
--- a/shemov.pro
+++ b/shemov.pro
@@ -48,7 +48,8 @@ SOURCES = main.cpp \
searchdialog.cpp \
copyworker.cpp \
randomtab.cpp \
- fswidget.cpp
+ fswidget.cpp \
+ fsproxy.cpp
HEADERS = \
filesystemdirproxy.h \
filesystemwidget.h \
@@ -91,7 +92,8 @@ HEADERS = \
searchdialog.h \
copyworker.h \
randomtab.h \
- fswidget.h
+ fswidget.h \
+ fsproxy.h
LIBS += -lmagic -lXfixes -lX11 -lMagick++-6.Q16HDRI
INCLUDEPATH += /usr/include/ImageMagick-6/
RESOURCES = shemov.qrc