diff options
author | Arno <am@disconnect.de> | 2010-06-24 21:26:44 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2010-06-24 21:26:44 +0200 |
commit | 7ad391f932c9ec33cccf49eff8996ccaf2d303d5 (patch) | |
tree | 0d6afdf4c4d69505a122c842424f9f9def7a7a8c /filestreemodel.cpp | |
parent | 32243b83a02e479e772d7d6fd94ddc35fd7d6880 (diff) | |
download | SheMov-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.cpp | 83 |
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; |