summaryrefslogtreecommitdiffstats
path: root/filestreemodel.cpp
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2010-06-24 21:26:44 +0200
committerArno <am@disconnect.de>2010-06-24 21:26:44 +0200
commit7ad391f932c9ec33cccf49eff8996ccaf2d303d5 (patch)
tree0d6afdf4c4d69505a122c842424f9f9def7a7a8c /filestreemodel.cpp
parent32243b83a02e479e772d7d6fd94ddc35fd7d6880 (diff)
downloadSheMov-7ad391f932c9ec33cccf49eff8996ccaf2d303d5.tar.gz
SheMov-7ad391f932c9ec33cccf49eff8996ccaf2d303d5.tar.bz2
SheMov-7ad391f932c9ec33cccf49eff8996ccaf2d303d5.zip
Made FilesTreeWidget work
It wasn't as easy as I thought. Quite big changes: 1. I changed the query for setIds in FilesTreeModel. Initially it executed a database query for every id. Changed it to WHERE seriespart_id IN (ids). I didn't have a chance to test the first version, but this one is blazing fast. 2. Fixed a recursio ad infinitum in FilesTreeModel. This happens if you call data() from data(). Either use the *item or use a role different from what you've been called. 3. Introduce a new function in SeriesTreeModel: QList<QVariant> childrenColumnList. It returns a QList from the children values of the given column. 4. Lot's of UI changes. Hide unneded columns, align the remaining ones properly. What doesn't work: we can't let the database do the sorting of files. We need a proxy for this.
Diffstat (limited to 'filestreemodel.cpp')
-rw-r--r--filestreemodel.cpp83
1 files changed, 46 insertions, 37 deletions
diff --git a/filestreemodel.cpp b/filestreemodel.cpp
index 27d93df..87c1e8d 100644
--- a/filestreemodel.cpp
+++ b/filestreemodel.cpp
@@ -15,8 +15,6 @@
FilesTreeModel::FilesTreeModel(QStringList &headers, QObject *parent) : SmTreeModel(headers, parent){
mDb = QSqlDatabase::database("treedb");
- mFilesQuery = new QSqlQuery(mDb);
- mFilesQuery->prepare("SELECT iseriespart_id, tfilename, cmd5sum, bisize, idvd, sifiletype, sifileno, siquality, ifiles_id FROM files where iseriesparts_id = :id ORDER BY tfilename, sifileno");
mUpdateDvdQuery = new QSqlQuery(mDb);
mUpdateDvdQuery->prepare("UPDATE files SET idvd = :dvd WHERE ifiles_id = :id");
mUpdateQualityQuery = new QSqlQuery(mDb);
@@ -24,7 +22,6 @@ FilesTreeModel::FilesTreeModel(QStringList &headers, QObject *parent) : SmTreeMo
}
FilesTreeModel::~FilesTreeModel(){
- delete mFilesQuery;
delete mUpdateDvdQuery;
mDb = QSqlDatabase();
}
@@ -38,39 +35,40 @@ void FilesTreeModel::setIds(const QList<int> &seriesPartIds){
covers->setData(FileName, tr("Covers"));
root->appendChild(covers);
QLocale l;
+ QStringList ids;
foreach(int s, seriesPartIds){
- mFilesQuery->bindValue(":id", s);
- if(mFilesQuery->exec()){
- while(mFilesQuery->next()){
- QList<QVariant> data;
- data << mFilesQuery->value(1); //filename
- data << mFilesQuery->value(6); //partno
- data << l.toString(mFilesQuery->value(3).toLongLong()); //displaysize
- data << mFilesQuery->value(7); //quality
- data << mFilesQuery->value(4); //dvdno
- data << Helper::createArchivePath(mFilesQuery->value(1).toString(), mFilesQuery->value(2).toString()); //fullpath
- data << mFilesQuery->value(3); //size
- data << mFilesQuery->value(5); //filetype
- data << mFilesQuery->value(2); //md5sum
- data << mFilesQuery->value(0); //seriesparts_id
- data << mFilesQuery->value(8); //files_id
- switch(mFilesQuery->value(5).toInt()){
- case Movie:{
- SmTreeItem *item = new SmTreeItem(data, files);
- files->appendChild(item);
- break;
- }
- case FrontCover:
- case BackCover:
- case GeneralCover:{
- SmTreeItem *item = new SmTreeItem(data, covers);
- covers->appendChild(item);
- break;
- }
- default:
- ;
- }
+ 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(","));
+ QSqlQuery filesQuery(query, mDb);
+ while(filesQuery.next()){
+ QList<QVariant> data;
+ data << filesQuery.value(1); //filename
+ data << filesQuery.value(6); //partno
+ data << l.toString(filesQuery.value(3).toLongLong()); //displaysize
+ data << filesQuery.value(7); //quality
+ data << filesQuery.value(4); //dvdno
+ data << Helper::createArchivePath(filesQuery.value(1).toString(), filesQuery.value(2).toString()); //fullpath
+ data << filesQuery.value(3); //size
+ data << filesQuery.value(5); //filetype
+ data << filesQuery.value(2); //md5sum
+ data << filesQuery.value(0); //seriesparts_id
+ data << filesQuery.value(8); //files_id
+ switch(filesQuery.value(5).toInt()){
+ case Movie:{
+ SmTreeItem *item = new SmTreeItem(data, files);
+ files->appendChild(item);
+ break;
}
+ case FrontCover:
+ case BackCover:
+ case GeneralCover:{
+ SmTreeItem *item = new SmTreeItem(data, covers);
+ covers->appendChild(item);
+ break;
+ }
+ default:
+ ;
}
}
setRoot(root);
@@ -85,10 +83,13 @@ QVariant FilesTreeModel::data(const QModelIndex &index, int role) const{
if(role == Qt::DisplayRole){
if(index.column() == DvdNo){
- if(index.data().toInt() == -1){
+ if(index.data(FileTypeRole) == QVariant()){
+ return QVariant();
+ }
+ if(item->data(DvdNo).toInt() == -1){
return QString(tr("(local)"));
}else{
- QString retval = QString(tr("DVD #%1")).arg(index.data().toInt());
+ QString retval = QString(tr("DVD #%1")).arg(item->data(DvdNo).toInt());
return retval;
}
}
@@ -102,6 +103,11 @@ QVariant FilesTreeModel::data(const QModelIndex &index, int role) const{
return QIcon(":/dildo.png");
}
}
+ if(role == Qt::TextAlignmentRole){
+ if(index.column() > 0 && index.column() < 4){
+ return Qt::AlignRight;
+ }
+ }
if(role == FileNameRole){
return item->data(FileName);
}
@@ -168,9 +174,12 @@ bool FilesTreeModel::setData(const QModelIndex &index, const QVariant &value, in
}
Qt::ItemFlags FilesTreeModel::flags(const QModelIndex &index) const{
- if(!index.isValid() || index.data(FileTypeRole) == QVariant()){
+ if(!index.isValid()){
return 0;
}
+ if(index.data(FileTypeRole) == QVariant()){
+ return Qt::ItemIsEnabled;
+ }
Qt::ItemFlags retval = Qt::ItemIsEnabled | Qt::ItemIsSelectable;
if(index.column() == DvdNo || index.column() == Quality){
return retval | Qt::ItemIsEditable;