diff options
author | Arno <am@disconnect.de> | 2010-06-20 15:51:42 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2010-06-20 15:51:42 +0200 |
commit | f81a83e91b77d41384667eec02409be05e088a06 (patch) | |
tree | 87b940010c56ba6da83961eb77483ba6853c7c6a /filestreemodel.cpp | |
parent | bdbc5a75e82f3635449848977cbefa19d51c0c9b (diff) | |
download | SheMov-f81a83e91b77d41384667eec02409be05e088a06.tar.gz SheMov-f81a83e91b77d41384667eec02409be05e088a06.tar.bz2 SheMov-f81a83e91b77d41384667eec02409be05e088a06.zip |
Started implementation of FilesTreeModel
No visible representation yet. Implemented setData for quality and
dvdno, but not tested yet. Dunno yet if anything else has to be
editable.
Diffstat (limited to 'filestreemodel.cpp')
-rw-r--r-- | filestreemodel.cpp | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/filestreemodel.cpp b/filestreemodel.cpp new file mode 100644 index 0000000..27d93df --- /dev/null +++ b/filestreemodel.cpp @@ -0,0 +1,179 @@ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version + 2 of the License, or (at your option) any later version. +*/ + +#include <QSqlQuery> +#include <QLocale> +#include <QIcon> + +#include "filestreemodel.h" +#include "smtreeitem.h" +#include "helper.h" + +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); + mUpdateQualityQuery->prepare("UPDATE files SET iquality = :quality WHERE ifiles_id = :id"); +} + +FilesTreeModel::~FilesTreeModel(){ + delete mFilesQuery; + delete mUpdateDvdQuery; + mDb = QSqlDatabase(); +} + +void FilesTreeModel::setIds(const QList<int> &seriesPartIds){ + SmTreeItem *root = new SmTreeItem(11); + SmTreeItem *files = new SmTreeItem(11, root); + files->setData(FileName, tr("Files")); + root->appendChild(files); + SmTreeItem *covers = new SmTreeItem(11, root); + covers->setData(FileName, tr("Covers")); + root->appendChild(covers); + QLocale l; + 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: + ; + } + } + } + } + setRoot(root); +} + +QVariant FilesTreeModel::data(const QModelIndex &index, int role) const{ + if(!index.isValid()){ + return QVariant(); + } + + SmTreeItem *item = static_cast<SmTreeItem*>(index.internalPointer()); + + if(role == Qt::DisplayRole){ + if(index.column() == DvdNo){ + if(index.data().toInt() == -1){ + return QString(tr("(local)")); + }else{ + QString retval = QString(tr("DVD #%1")).arg(index.data().toInt()); + return retval; + } + } + return item->data(index.column()); + } + if(role == Qt::EditRole){ + return item->data(index.column()); + } + if(role == Qt::DecorationRole){ + if(index.column() == 0){ + return QIcon(":/dildo.png"); + } + } + if(role == FileNameRole){ + return item->data(FileName); + } + if(role == FullPathRole){ + return item->data(FullPath); + } + if(role == SizeRole){ + return item->data(Size); + } + if(role == DvdNoRole){ + return item->data(DvdNo); + } + if(role == SizeDisplay){ + return item->data(SizeDisplay); + } + if(role == FileTypeRole){ + return item->data(FileType); + } + if(role == Md5SumRole){ + return item->data(Md5Sum); + } + if(role == PartNoRole){ + return item->data(PartNo); + } + if(role == SeriesPartIdRole){ + return item->data(SeriesPartId); + } + if(role == QualityRole){ + return item->data(Quality); + } + if(role == FilesIdRole){ + return item->data(FilesId); + } + return QVariant(); +} + +bool FilesTreeModel::setData(const QModelIndex &index, const QVariant &value, int role){ + if(!index.isValid()){ + return false; + } + if(role == Qt::EditRole){ + SmTreeItem *item = static_cast<SmTreeItem*>(index.internalPointer()); + if(index.column() == DvdNo){ + mUpdateDvdQuery->bindValue(":id", index.data(FilesIdRole)); + mUpdateDvdQuery->bindValue(":dvd", value); + if(mUpdateDvdQuery->exec()){ + item->setData(DvdNo, value); + return true; + } + } + if(index.column() == Quality){ + if(value.toInt() > 10 || value.toInt() < 0){ + return false; + } + mUpdateQualityQuery->bindValue(":id", index.data(FilesIdRole)); + mUpdateQualityQuery->bindValue(":quality", value); + if(mUpdateQualityQuery->exec()){ + item->setData(Quality, value); + return true; + } + } + } + return false; +} + +Qt::ItemFlags FilesTreeModel::flags(const QModelIndex &index) const{ + if(!index.isValid() || index.data(FileTypeRole) == QVariant()){ + return 0; + } + Qt::ItemFlags retval = Qt::ItemIsEnabled | Qt::ItemIsSelectable; + if(index.column() == DvdNo || index.column() == Quality){ + return retval | Qt::ItemIsEditable; + } + return retval; +} |