summaryrefslogtreecommitdiffstats
path: root/pictureswidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'pictureswidget.cpp')
-rw-r--r--pictureswidget.cpp49
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;