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