diff options
-rw-r--r-- | filestreemodel.cpp | 13 | ||||
-rw-r--r-- | filestreemodel.h | 4 | ||||
-rw-r--r-- | filestreewidget.cpp | 24 | ||||
-rw-r--r-- | filestreewidget.h | 13 |
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 |