summaryrefslogtreecommitdiffstats
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
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.
-rw-r--r--filestreemodel.cpp13
-rw-r--r--filestreemodel.h4
-rw-r--r--filestreewidget.cpp24
-rw-r--r--filestreewidget.h13
4 files changed, 48 insertions, 6 deletions
diff --git a/filestreemodel.cpp b/filestreemodel.cpp
index 87c1e8d..973e7a6 100644
--- a/filestreemodel.cpp
+++ b/filestreemodel.cpp
@@ -29,7 +29,7 @@ FilesTreeModel::~FilesTreeModel(){
void FilesTreeModel::setIds(const QList<int> &seriesPartIds){
SmTreeItem *root = new SmTreeItem(11);
SmTreeItem *files = new SmTreeItem(11, root);
- files->setData(FileName, tr("Files"));
+ files->setData(FileName, tr("Movies"));
root->appendChild(files);
SmTreeItem *covers = new SmTreeItem(11, root);
covers->setData(FileName, tr("Covers"));
@@ -39,7 +39,7 @@ void FilesTreeModel::setIds(const QList<int> &seriesPartIds){
foreach(int s, seriesPartIds){
ids << QString::number(s);
}
- QString query = QString("SELECT iseriespart_id, tfilename, cmd5sum, bisize, idvd, sifiletype, sifileno, siquality, ifiles_id FROM files WHERE iseriespart_id IN (%1) ORDER BY tfilename, sifileno ASC").arg(ids.join(","));
+ QString query = QString("SELECT iseriespart_id, tfilename, cmd5sum, bisize, idvd, sifiletype, sifileno, siquality, ifiles_id, series.tseries_name, seriesparts.iseriespart FROM files, seriesparts, series WHERE iseriespart_id IN (%1) AND files.iseriespart_id = seriesparts.iseriesparts_id AND seriesparts.iseries_id = series.iseries_id ORDER BY tfilename, sifileno ASC").arg(ids.join(","));
QSqlQuery filesQuery(query, mDb);
while(filesQuery.next()){
QList<QVariant> data;
@@ -54,6 +54,9 @@ void FilesTreeModel::setIds(const QList<int> &seriesPartIds){
data << filesQuery.value(2); //md5sum
data << filesQuery.value(0); //seriesparts_id
data << filesQuery.value(8); //files_id
+ data << filesQuery.value(10); //seriespart
+ QString displayName = QString("%1 %2").arg(filesQuery.value(9).toString()).arg(filesQuery.value(10).toString());
+ data << displayName;
switch(filesQuery.value(5).toInt()){
case Movie:{
SmTreeItem *item = new SmTreeItem(data, files);
@@ -82,6 +85,7 @@ QVariant FilesTreeModel::data(const QModelIndex &index, int role) const{
SmTreeItem *item = static_cast<SmTreeItem*>(index.internalPointer());
if(role == Qt::DisplayRole){
+ if(index.column())
if(index.column() == DvdNo){
if(index.data(FileTypeRole) == QVariant()){
return QVariant();
@@ -93,6 +97,11 @@ QVariant FilesTreeModel::data(const QModelIndex &index, int role) const{
return retval;
}
}
+ if(index.column() == PartNo){
+ if(item->data(PartNo).toInt() == -1){
+ return QVariant();
+ }
+ }
return item->data(index.column());
}
if(role == Qt::EditRole){
diff --git a/filestreemodel.h b/filestreemodel.h
index 97ae239..ffa23f8 100644
--- a/filestreemodel.h
+++ b/filestreemodel.h
@@ -18,9 +18,9 @@ class QSqlQuery;
class FilesTreeModel : public SmTreeModel {
Q_OBJECT
public:
- enum CustomRoles { FileNameRole = Qt::UserRole + 1, FullPathRole = Qt::UserRole + 2, SizeRole = Qt::UserRole + 3, DvdNoRole = Qt::UserRole + 4, SizeDisplayRole = Qt::UserRole + 5, FileTypeRole = Qt::UserRole + 6, Md5SumRole = Qt::UserRole + 7, PartNoRole = Qt::UserRole + 8, SeriesPartIdRole = Qt::UserRole + 9, QualityRole = Qt::UserRole + 10, FilesIdRole = Qt::UserRole + 11 };
+ enum CustomRoles { FileNameRole = Qt::UserRole + 1, FullPathRole = Qt::UserRole + 2, SizeRole = Qt::UserRole + 3, DvdNoRole = Qt::UserRole + 4, SizeDisplayRole = Qt::UserRole + 5, FileTypeRole = Qt::UserRole + 6, Md5SumRole = Qt::UserRole + 7, PartNoRole = Qt::UserRole + 8, SeriesPartIdRole = Qt::UserRole + 9, QualityRole = Qt::UserRole + 10, FilesIdRole = Qt::UserRole + 11, SeriesPartRole = Qt::UserRole + 12, DisplayNameRole = Qt::UserRole + 13 };
enum FileTypes { Movie = 1, FrontCover = 2, BackCover = 3, GeneralCover = 4 };
- enum Fields { FileName = 0, PartNo = 1, SizeDisplay = 2, Quality = 3, DvdNo = 4, FullPath = 5, Size = 6, FileType = 7, Md5Sum = 8, SeriesPartId = 9, FilesId = 10 };
+ enum Fields { FileName = 0, PartNo = 1, SizeDisplay = 2, Quality = 3, DvdNo = 4, FullPath = 5, Size = 6, FileType = 7, Md5Sum = 8, SeriesPartId = 9, FilesId = 10, SeriesPart = 11, DisplayName = 12 };
explicit FilesTreeModel(QStringList &headers, QObject *parent = 0);
~FilesTreeModel();
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);
+}
diff --git a/filestreewidget.h b/filestreewidget.h
index fd06f30..55d80b5 100644
--- a/filestreewidget.h
+++ b/filestreewidget.h
@@ -10,9 +10,11 @@
#include <QWidget>
#include <QTreeView>
+#include <QSortFilterProxyModel>
class FilesTreeView;
class FilesTreeModel;
+class FilesTreeSortModel;
class FilesTreeWidget : public QWidget {
Q_OBJECT
@@ -23,6 +25,7 @@ class FilesTreeWidget : public QWidget {
private:
FilesTreeView *mView;
FilesTreeModel *mModel;
+ FilesTreeSortModel *mProxy;
};
class FilesTreeView : public QTreeView {
@@ -31,4 +34,14 @@ class FilesTreeView : public QTreeView {
explicit FilesTreeView(QWidget *parent = 0);
};
+class FilesTreeSortModel : public QSortFilterProxyModel {
+ Q_OBJECT
+ public:
+ FilesTreeSortModel(QObject *parent = 0);
+ ~FilesTreeSortModel() {}
+
+ protected:
+ virtual bool lessThan(const QModelIndex &left, const QModelIndex &right) const;
+};
+
#endif