diff options
author | Arno <arno@disconnect.de> | 2018-03-31 19:32:57 +0200 |
---|---|---|
committer | Arno <arno@disconnect.de> | 2018-03-31 19:32:57 +0200 |
commit | 3dd5dbd7d66a21b8dd8bded05636252d7ef84cba (patch) | |
tree | 3ccc57044fc84cc63a750f50c5f837933ef76f57 | |
parent | d4dae4ba8633ff8c58bbb4135850ddbd1dfa87a9 (diff) | |
download | SheMov-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.cpp | 21 | ||||
-rw-r--r-- | fsproxy.h | 15 | ||||
-rw-r--r-- | fswidget.cpp | 7 | ||||
-rw-r--r-- | fswidget.h | 5 | ||||
-rw-r--r-- | shemov.pro | 6 |
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")){ @@ -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; }; @@ -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 |