diff options
Diffstat (limited to 'pictureswidget.cpp')
-rw-r--r-- | pictureswidget.cpp | 49 |
1 files changed, 45 insertions, 4 deletions
diff --git a/pictureswidget.cpp b/pictureswidget.cpp index d5caa76..bc4b143 100644 --- a/pictureswidget.cpp +++ b/pictureswidget.cpp @@ -72,8 +72,13 @@ void PicturesWidget::readSettings(){ } void PicturesWidget::editMappings(){ - QList<int> currentMappings = mPictureView->fileMappings(); - mEditDialog->editWidget()->setMappings(currentMappings); + QModelIndexList selectedFids = mPictureView->selectionModel()->selectedRows(PicFilesModel::Id); + QList<int> fileIds; + foreach(QModelIndex idx, selectedFids){ + fileIds << idx.data().toInt(); + } + QList<MappingData> mappings = mPictureView->filesModel()->mappingDataFromFiles(fileIds); + mEditDialog->editWidget()->setMappings(mappings); int retval = mEditDialog->exec(); if(retval == QDialog::Accepted){ QList<int> selMappings = mEditDialog->editWidget()->mappingIds(); @@ -272,12 +277,14 @@ PicFilesModel::PicFilesModel(const QStringList &headers, QObject *parent) : SmTr //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_mappings WHERE ipics_id = :id"); + mDeleteMappingsQ->prepare("DELETE FROM pics_mappings2 WHERE ipics_id = :id"); mAddMappingsQ = new QSqlQuery(mDb); - mAddMappingsQ->prepare("INSERT INTO pics_mappings(ipics_id, imapping_id) VALUES(:pid, :id)"); + mAddMappingsQ->prepare("INSERT INTO pics_mappings2(ipics_id, imapping_id) VALUES(:pid, :id)"); + } PicFilesModel::~PicFilesModel(){ @@ -399,6 +406,40 @@ bool PicFilesModel::changeMappings(const QList<int> &fileIds, const QList<int> & 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::IdRole).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; |