diff options
Diffstat (limited to 'pictureswidget.cpp')
-rw-r--r-- | pictureswidget.cpp | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/pictureswidget.cpp b/pictureswidget.cpp index 29b6094..6b587d7 100644 --- a/pictureswidget.cpp +++ b/pictureswidget.cpp @@ -34,11 +34,16 @@ PicturesWidget::PicturesWidget(QWidget *parent) : QWidget(parent) { mPictureView = new PictureView; connect(mMappingTree, SIGNAL(mappingChanged(int)), mPictureView, SLOT(mappingChanged(int))); connect(mPictureView, SIGNAL(newFileMappigs()), this, SLOT(setMappingColors())); + connect(mPictureView, SIGNAL(editPicsMappings()), this, SLOT(editMappings())); splitter->addWidget(mMappingTree); splitter->addWidget(mPictureView); splitter->setStretchFactor(0, 1); splitter->setStretchFactor(1, 3); + //mis + mEditDialog = new MappingEditDialog(this); + //connect() + //put it all togehter QHBoxLayout *mainLayout = new QHBoxLayout; mainLayout->addWidget(splitter); @@ -50,6 +55,25 @@ void PicturesWidget::setMappingColors(){ mtm->setSelectedMappings(mPictureView->fileMappings()); } +void PicturesWidget::editMappings(){ + QList<int> currentMappings = mPictureView->fileMappings(); + mEditDialog->editWidget()->setMappings(currentMappings); + int retval = mEditDialog->exec(); + if(retval == QDialog::Accepted){ + QList<int> selMappings = mEditDialog->editWidget()->mappingIds(); + if(selMappings.isEmpty()){ + QMessageBox::critical(this, tr("Error"), tr("No mappings selected! Cowardly bailing out.")); + return; + } + QModelIndexList selectedFids = mPictureView->selectionModel()->selectedRows(PicFilesModel::Id); + QList<int> fileIds; + foreach(QModelIndex idx, selectedFids){ + fileIds << idx.data().toInt(); + } + mPictureView->filesModel()->changeMappings(fileIds, selMappings); + } +} + PictureView::PictureView(QWidget *parent) : QTreeView(parent) { //setup model mModel = new PicFilesModel(QStringList() << tr("Filename") << tr("SizeNum") << tr("Format") << tr("Full Path") << tr("Id") << tr("Added") << tr("Md5Sum") << tr("Size"), this); @@ -178,6 +202,10 @@ PicFilesModel::PicFilesModel(const QStringList &headers, QObject *parent) : SmTr mCurMappingIdsQ = new QSqlQuery(mDb); mCurMappingIdsQ->prepare("SELECT DISTINCT(pics_mappings.imapping_id) FROM pics_mappings, pics WHERE pics_mappings.ipics_id IN (SELECT ipicsid FROM pics, pics_mappings WHERE pics_mappings.imapping_id = :mid AND pics_mappings.ipics_id = pics.ipicsid)"); mCurMappingIdsQS = QString("SELECT DISTINCT(pics_mappings.imapping_id) FROM pics_mappings, pics WHERE pics_mappings.ipics_id IN (%1)"); + mDeleteMappingsQ = new QSqlQuery(mDb); + mDeleteMappingsQ->prepare("DELETE FROM pics_mappings WHERE ipics_id = :id"); + mAddMappingsQ = new QSqlQuery(mDb); + mAddMappingsQ->prepare("INSERT INTO pics_mappings(ipics_id, imapping_id) VALUES(:pid, :id)"); } QList<int> PicFilesModel::mappingIds(const QList<QVariant> &fileIds){ @@ -248,6 +276,29 @@ void PicFilesModel::removeFiles(const QList<QPersistentModelIndex> &files){ } } +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; +} + void PicFilesModel::populate(){ SmTreeItem *root = new SmTreeItem(NumFields); mPopulateQ->bindValue(":mapid", mMappingId); |