From c5125a0cdb79d13169f44fcfd03e517e7dd557d6 Mon Sep 17 00:00:00 2001 From: Arno Moeller Date: Fri, 25 Jun 2010 16:40:16 +0200 Subject: 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. --- filestreewidget.cpp | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'filestreewidget.cpp') diff --git a/filestreewidget.cpp b/filestreewidget.cpp index e8afe7c..8d9a435 100644 --- a/filestreewidget.cpp +++ b/filestreewidget.cpp @@ -7,6 +7,8 @@ #include +#include + #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(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); +} -- cgit v1.2.3-70-g09d2