diff options
author | Arno Moeller <am@mindwerk.de> | 2010-06-25 16:40:16 +0200 |
---|---|---|
committer | Arno Moeller <am@mindwerk.de> | 2010-06-25 16:40:16 +0200 |
commit | c5125a0cdb79d13169f44fcfd03e517e7dd557d6 (patch) | |
tree | 35f88efce0e7aba2e17a22a22d5ae8f12ceb741f /filestreewidget.cpp | |
parent | 7ad391f932c9ec33cccf49eff8996ccaf2d303d5 (diff) | |
download | SheMov-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.cpp | 24 |
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); +} |