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