diff options
author | Arno <am@disconnect.de> | 2012-02-26 14:15:45 +0100 |
---|---|---|
committer | Arno <am@disconnect.de> | 2012-02-26 14:15:45 +0100 |
commit | 11bf52b6cf1c27a75715a8379e7893b8d1e16bf0 (patch) | |
tree | d0d5366c585fb482716f44db3f9e22ea8acd914c /pictureswidget.cpp | |
parent | ff4a70f50e42152c5c391fd7801b916e64b181a4 (diff) | |
download | SheMov-11bf52b6cf1c27a75715a8379e7893b8d1e16bf0.tar.gz SheMov-11bf52b6cf1c27a75715a8379e7893b8d1e16bf0.tar.bz2 SheMov-11bf52b6cf1c27a75715a8379e7893b8d1e16bf0.zip |
Mark active Mappings
When selecting pictures, mark the active mappings with a different
color.
Diffstat (limited to 'pictureswidget.cpp')
-rw-r--r-- | pictureswidget.cpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/pictureswidget.cpp b/pictureswidget.cpp index 4bc2aad..29b6094 100644 --- a/pictureswidget.cpp +++ b/pictureswidget.cpp @@ -24,6 +24,8 @@ #include "smtreeitem.h" #include "helper.h" #include "hoverwindow.h" +#include "mappingtreemodel.h" +#include "smglobals.h" PicturesWidget::PicturesWidget(QWidget *parent) : QWidget(parent) { //setup gui @@ -31,6 +33,7 @@ PicturesWidget::PicturesWidget(QWidget *parent) : QWidget(parent) { mMappingTree = new MappingTreeWidget; mPictureView = new PictureView; connect(mMappingTree, SIGNAL(mappingChanged(int)), mPictureView, SLOT(mappingChanged(int))); + connect(mPictureView, SIGNAL(newFileMappigs()), this, SLOT(setMappingColors())); splitter->addWidget(mMappingTree); splitter->addWidget(mPictureView); splitter->setStretchFactor(0, 1); @@ -42,12 +45,18 @@ PicturesWidget::PicturesWidget(QWidget *parent) : QWidget(parent) { setLayout(mainLayout); } +void PicturesWidget::setMappingColors(){ + MappingTreeModel *mtm = static_cast<MappingTreeModel*>(SmGlobals::instance()->model("MappingTree")); + mtm->setSelectedMappings(mPictureView->fileMappings()); +} + 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); mProxy = new QSortFilterProxyModel(this); mProxy->setSourceModel(mModel); setModel(mProxy); + connect(selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(setFileMappings())); //read settings QSettings s; @@ -146,6 +155,19 @@ void PictureView::contextMenuEvent(QContextMenuEvent *e){ ctxMenu.exec(e->globalPos()); } +void PictureView::setFileMappings(){ + QModelIndexList sel = selectionModel()->selectedRows(); + if(sel.isEmpty()){ + return; + } + QList<QVariant> fileIds; + foreach(QModelIndex i, sel){ + fileIds << i.data(PicFilesModel::IdRole); + } + mFilesMappings = mModel->mappingIds(fileIds); + emit newFileMappigs(); +} + PicFilesModel::PicFilesModel(const QStringList &headers, QObject *parent) : SmTreeModel(headers, parent) { //setup database mDb = QSqlDatabase::database("treedb"); @@ -153,6 +175,23 @@ PicFilesModel::PicFilesModel(const QStringList &headers, QObject *parent) : SmTr mPopulateQ->prepare("SELECT pics.tfilename, pics.isize, pics.tformat, pics.dtadded, pics.cmd5sum, pics.ipicsid FROM pics, pics_mappings WHERE pics_mappings.imapping_id = :mapid AND pics_mappings.ipics_id = pics.ipicsid ORDER BY pics.tfilename"); mDeleteFileQ = new QSqlQuery(mDb); mDeleteFileQ->prepare("DELETE FROM pics WHERE ipicsid = :id"); + 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)"); +} + +QList<int> PicFilesModel::mappingIds(const QList<QVariant> &fileIds){ + QList<int> retval; + QStringList ids; + foreach(QVariant f, fileIds){ + ids << f.toString(); + } + QString mappingQuery = mCurMappingIdsQS.arg(ids.join(",")); + QSqlQuery idQ(mappingQuery, mDb); + while(idQ.next()){ + retval << idQ.value(0).toInt(); + } + return retval; } QVariant PicFilesModel::data(const QModelIndex &index, int role) const { @@ -223,6 +262,11 @@ void PicFilesModel::populate(){ SmTreeItem *child = new SmTreeItem(data, root); root->appendChild(child); } + mCurMappingsIds.clear(); + mCurMappingIdsQ->bindValue(":mid", mMappingId); + while(mCurMappingIdsQ->next()){ + mCurMappingsIds << mCurMappingIdsQ->value(0).toInt(); + } setRoot(root); } } |