summaryrefslogtreecommitdiffstats
path: root/filestreewidget.cpp
diff options
context:
space:
mode:
authorArno Moeller <am@mindwerk.de>2010-06-25 16:40:16 +0200
committerArno Moeller <am@mindwerk.de>2010-06-25 16:40:16 +0200
commitc5125a0cdb79d13169f44fcfd03e517e7dd557d6 (patch)
tree35f88efce0e7aba2e17a22a22d5ae8f12ceb741f /filestreewidget.cpp
parent7ad391f932c9ec33cccf49eff8996ccaf2d303d5 (diff)
downloadSheMov-c5125a0cdb79d13169f44fcfd03e517e7dd557d6.tar.gz
SheMov-c5125a0cdb79d13169f44fcfd03e517e7dd557d6.tar.bz2
SheMov-c5125a0cdb79d13169f44fcfd03e517e7dd557d6.zip
Sorting for FilesTreeModel
Implemented individual sorting for FilesTreeModel: 1. Don't compare the "Movies" and "Covers" nodes, keep the initial order. 2. Compare Size and DvdNo by int/longlong instead of comparing the displayed strings.
Diffstat (limited to 'filestreewidget.cpp')
-rw-r--r--filestreewidget.cpp24
1 files changed, 22 insertions, 2 deletions
diff --git a/filestreewidget.cpp b/filestreewidget.cpp
index e8afe7c..8d9a435 100644
--- a/filestreewidget.cpp
+++ b/filestreewidget.cpp
@@ -7,6 +7,8 @@
#include <QHBoxLayout>
+#include <QDebug>
+
#include "filestreewidget.h"
#include "smmodelsingleton.h"
#include "filestreemodel.h"
@@ -15,7 +17,10 @@ FilesTreeWidget::FilesTreeWidget(QWidget *parent) : QWidget(parent){
//the view
mView = new FilesTreeView;
mModel = static_cast<FilesTreeModel*>(SmModelSingleton::instance()->model("FilesModel"));
- mView->setModel(mModel);
+ mProxy = new FilesTreeSortModel(this);
+ mProxy->setSourceModel(mModel);
+ mView->setModel(mProxy);
+ mView->setSortingEnabled(true);
//layout
QHBoxLayout *mainLayout = new QHBoxLayout;
@@ -23,4 +28,19 @@ FilesTreeWidget::FilesTreeWidget(QWidget *parent) : QWidget(parent){
setLayout(mainLayout);
}
-FilesTreeView::FilesTreeView(QWidget *parent) : QTreeView(parent) {}
+FilesTreeView::FilesTreeView(QWidget *parent) : QTreeView(parent){}
+
+FilesTreeSortModel::FilesTreeSortModel(QObject *parent) : QSortFilterProxyModel(parent) {}
+
+bool FilesTreeSortModel::lessThan(const QModelIndex &left, const QModelIndex &right) const{
+ if(left.parent() == QModelIndex()){
+ return false;
+ }
+ if(left.column() == FilesTreeModel::SizeDisplay){
+ return left.data(FilesTreeModel::SizeRole).toLongLong() < right.data(FilesTreeModel::SizeRole).toLongLong();
+ }
+ if(left.column() == FilesTreeModel::DvdNoRole){
+ return left.data(FilesTreeModel::DvdNoRole).toInt() < right.data(FilesTreeModel::DvdNoRole).toInt();
+ }
+ return QSortFilterProxyModel::lessThan(left, right);
+}