diff options
Diffstat (limited to 'pictureswidget.cpp')
-rw-r--r-- | pictureswidget.cpp | 198 |
1 files changed, 4 insertions, 194 deletions
diff --git a/pictureswidget.cpp b/pictureswidget.cpp index 745a133..661aba6 100644 --- a/pictureswidget.cpp +++ b/pictureswidget.cpp @@ -21,6 +21,7 @@ #include <QSettings> #include "pictureswidget.h" +#include "picfilesmodel.h" #include "mappingtreewidget.h" #include "smtreeitem.h" #include "helper.h" @@ -62,7 +63,7 @@ void PicturesWidget::showPicViewer(bool toggled){ void PicturesWidget::writeSettings(){ QSettings s; MappingData selected = mMappingTree->selectedItem(); - s.setValue("ui/selectedmapping", selected.path); + s.setValue("ui/selectedmapping", selected.path.first()); } void PicturesWidget::readSettings(){ @@ -99,7 +100,7 @@ void PicturesWidget::constructWindowTitle(){ QString windowTitle = mWindowTitleBase; MappingData selected = mMappingTree->selectedItem(); if(selected.id != -1){ - windowTitle = QString("%1 - [%2]").arg(mWindowTitleBase).arg(selected.path.join("/")); + windowTitle = QString("%1 - [%2]").arg(mWindowTitleBase).arg(selected.path.first().join("/")); mPictureView->setHoverWinVisible(false); } emit needWindowTitleChange(windowTitle); @@ -120,7 +121,7 @@ void PicturesWidget::showInPicViewer(const QModelIndex &idx){ PictureView::PictureView(QWidget *parent) : QTreeView(parent) { //setup models - mModel = new PicFilesModel(QStringList() << tr("Filename") << tr("SizeNum") << tr("Format") << tr("Full Path") << tr("Id") << tr("Added") << tr("Md5Sum") << tr("Size"), this); + mModel = static_cast<PicFilesModel*>(SmGlobals::instance()->model("PicFiles")); mProxy = new QSortFilterProxyModel(this); mProxy->setSourceModel(mModel); setModel(mProxy); @@ -269,194 +270,3 @@ void PictureView::selectedFilesChanged(){ emit numSelected(sel.size()); emit selectedSize(selSize); } - -PicFilesModel::PicFilesModel(const QStringList &headers, QObject *parent) : SmTreeModel(headers, parent) { - //conjure up model - mMappingTreeModel = static_cast<MappingTreeModel*>(SmGlobals::instance()->model("MappingTree")); - - //setup database - mDb = QSqlDatabase::database("treedb"); - mPopulateQS = QString("SELECT DISTINCT(pics.ipicsid), pics.tfilename, pics.isize, pics.tformat, pics.dtadded, pics.cmd5sum FROM pics, pics_mappings2 WHERE pics_mappings2.imappings_parents_id IN (%1) AND pics_mappings2.ipics_id = pics.ipicsid ORDER BY pics.tfilename"); - mMappingsQS = QString("SELECT DISTINCT(pics_mappings2.imappings_parents_id) FROM pics_mappings2, pics WHERE pics_mappings2.ipics_id IN (%1)"); - mDeleteFileQ = new QSqlQuery(mDb); - mDeleteFileQ->prepare("DELETE FROM pics WHERE ipicsid = :id"); - mDeleteMappingsQ = new QSqlQuery(mDb); - mDeleteMappingsQ->prepare("DELETE FROM pics_mappings2 WHERE ipics_id = :id"); - mAddMappingsQ = new QSqlQuery(mDb); - mAddMappingsQ->prepare("INSERT INTO pics_mappings2(ipics_id, imappings_parents_id) VALUES(:pid, :id)"); - -} - -PicFilesModel::~PicFilesModel(){ - delete mDeleteFileQ; - delete mDeleteMappingsQ; - delete mAddMappingsQ; - mDb = QSqlDatabase::database(); -} - -void PicFilesModel::setMapping(int pMapId){ - QList<QVariant> ids = mMappingTreeModel->childList(pMapId, MappingTreeModel::MapParentId); - mMappingIds.clear(); - foreach(QVariant i, ids){ - mMappingIds << i.toInt(); - } -} - -QVariant PicFilesModel::data(const QModelIndex &index, int role) const { - if(role == Qt::FontRole){ - if(index.column() == Md5Sum){ - return QFont("courier"); - } - } - if(role == Qt::ForegroundRole){ - if(index.column() == SizeDisplay){ - int fileSize = index.data(SizeRole).toInt(); - if(fileSize > 1024 * 1024 * 1024){ - return QColor(Qt::red); - }else{ - return QColor(Qt::green); - } - } - } - SmTreeItem *item = itemAt(index); - if(role == FileNameRole){ - return item->data(FileName); - } - if(role == SizeRole){ - return item->data(Size); - } - if(role == MimeTypeRole){ - return item->data(MimeType); - } - if(role == FullPathRole){ - return item->data(FullPath); - } - if(role == IdRole){ - return item->data(Id); - } - if(role == AddedRole){ - return item->data(Added); - } - if(role == Md5SumRole){ - return item->data(Md5Sum); - } - if(role == SizeDisplayRole){ - return item->data(SizeDisplay); - } - return SmTreeModel::data(index, role); -} - -QList<QVariant> PicFilesModel::dataList(const QModelIndex &idx) const{ - QList<QVariant> retval; - if(!idx.isValid()){ - return retval; - } - SmTreeItem *item = itemAt(idx); - for(int i = 0; i < NumFields; ++i){ - retval << item->data(i); - } - return retval; -} - -QList<QList<QVariant> > PicFilesModel::allFiles() const { - QList<QList<QVariant> > retval; - //assume depth of exactly 1 - SmTreeItem *rootItem = root(); - for(int i = 0; i < rootItem->childCount(); ++i){ - SmTreeItem *cur = rootItem->child(i); - QList<QVariant> data; - for(int j = 0; j < cur->columnCount(); ++j){ - data << cur->data(j); - } - retval << data; - } - return retval; -} - -void PicFilesModel::removeFiles(const QList<QPersistentModelIndex> &files){ - foreach(QPersistentModelIndex pi, files){ - mDeleteFileQ->bindValue(":id", pi.data(IdRole)); - if(mDeleteFileQ->exec()){ - QFile::remove(pi.data(FullPathRole).toString()); - removeRows(pi.row(), 1, QModelIndex()); - } - } -} - -bool PicFilesModel::changeMappings(const QList<int> &fileIds, const QList<int> &mappingIds){ - mDb.transaction(); - foreach(int fid, fileIds){ - mDeleteMappingsQ->bindValue(":id", fid); - if(!mDeleteMappingsQ->exec()){ - goto error; - } - foreach(int mid, mappingIds){ - mAddMappingsQ->bindValue(":pid", fid); - mAddMappingsQ->bindValue(":id", mid); - if(!mAddMappingsQ->exec()){ - goto error; - } - } - } - mDb.commit(); - return true; - - error: - mDb.rollback(); - return false; -} - -QList<MappingData> PicFilesModel::mappingDataFromFiles(const QList<int> fileIds) const{ - QList<int> parentIds = mappingPIdsFromFiles(fileIds); - if(parentIds.isEmpty()){ - return QList<MappingData>(); - } - QList<MappingData> retval; - foreach(int pId, parentIds){ - QModelIndex curIdx = mMappingTreeModel->findRecursive(pId, MappingTreeModel::MapParentId, mMappingTreeModel->rootIndex()); - MappingData curData; - curData.id = curIdx.data(MappingTreeModel::MapParentIdRole).toInt(); - curData.name = curIdx.data(MappingTreeModel::NameRole).toString(); - curData.path = mMappingTreeModel->path(curIdx); - retval << curData; - } - return retval; -} - -QList<int> PicFilesModel::mappingPIdsFromFiles(QList<int> fileIds) const{ - if(fileIds.isEmpty()){ - return QList<int>(); - } - QStringList idList; - foreach(int id, fileIds){ - idList << QString::number(id); - } - QString query = mMappingsQS.arg(idList.join(",")); - QSqlQuery q(query, mDb); - QList<int> retval; - while(q.next()){ - retval << q.value(0).toInt(); - } - return retval; -} - -void PicFilesModel::populate(){ - SmTreeItem *root = new SmTreeItem(NumFields); - QStringList idList; - foreach(int id, mMappingIds){ - idList << QString::number(id); - } - QString query = mPopulateQS.arg(idList.join(",")); - QSqlQuery q(query, mDb); - while(q.next()){ - QList<QVariant> data; - data << q.value(1) << q.value(2) << q.value(3); // Filename, size and Mime type - data << Helper::createArchivePath(q.value(1).toString(), q.value(5).toString()); // full path; - data << q.value(0) << q.value(4) << q.value(5); //Id, added and md5 - QLocale l; - data << l.toString(q.value(2).toInt()); //sizedisplay - SmTreeItem *child = new SmTreeItem(data, root); - root->appendChild(child); - } - setRoot(root); -} |