summaryrefslogtreecommitdiffstats
path: root/pictureswidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'pictureswidget.cpp')
-rw-r--r--pictureswidget.cpp198
1 files changed, 4 insertions, 194 deletions
diff --git a/pictureswidget.cpp b/pictureswidget.cpp
index 745a133..661aba6 100644
--- a/pictureswidget.cpp
+++ b/pictureswidget.cpp
@@ -21,6 +21,7 @@
#include <QSettings>
#include "pictureswidget.h"
+#include "picfilesmodel.h"
#include "mappingtreewidget.h"
#include "smtreeitem.h"
#include "helper.h"
@@ -62,7 +63,7 @@ void PicturesWidget::showPicViewer(bool toggled){
void PicturesWidget::writeSettings(){
QSettings s;
MappingData selected = mMappingTree->selectedItem();
- s.setValue("ui/selectedmapping", selected.path);
+ s.setValue("ui/selectedmapping", selected.path.first());
}
void PicturesWidget::readSettings(){
@@ -99,7 +100,7 @@ void PicturesWidget::constructWindowTitle(){
QString windowTitle = mWindowTitleBase;
MappingData selected = mMappingTree->selectedItem();
if(selected.id != -1){
- windowTitle = QString("%1 - [%2]").arg(mWindowTitleBase).arg(selected.path.join("/"));
+ windowTitle = QString("%1 - [%2]").arg(mWindowTitleBase).arg(selected.path.first().join("/"));
mPictureView->setHoverWinVisible(false);
}
emit needWindowTitleChange(windowTitle);
@@ -120,7 +121,7 @@ void PicturesWidget::showInPicViewer(const QModelIndex &idx){
PictureView::PictureView(QWidget *parent) : QTreeView(parent) {
//setup models
- mModel = new PicFilesModel(QStringList() << tr("Filename") << tr("SizeNum") << tr("Format") << tr("Full Path") << tr("Id") << tr("Added") << tr("Md5Sum") << tr("Size"), this);
+ mModel = static_cast<PicFilesModel*>(SmGlobals::instance()->model("PicFiles"));
mProxy = new QSortFilterProxyModel(this);
mProxy->setSourceModel(mModel);
setModel(mProxy);
@@ -269,194 +270,3 @@ void PictureView::selectedFilesChanged(){
emit numSelected(sel.size());
emit selectedSize(selSize);
}
-
-PicFilesModel::PicFilesModel(const QStringList &headers, QObject *parent) : SmTreeModel(headers, parent) {
- //conjure up model
- mMappingTreeModel = static_cast<MappingTreeModel*>(SmGlobals::instance()->model("MappingTree"));
-
- //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_mappings2 WHERE ipics_id = :id");
- mAddMappingsQ = new QSqlQuery(mDb);
- mAddMappingsQ->prepare("INSERT INTO pics_mappings2(ipics_id, imappings_parents_id) VALUES(:pid, :id)");
-
-}
-
-PicFilesModel::~PicFilesModel(){
- delete mDeleteFileQ;
- delete mDeleteMappingsQ;
- delete mAddMappingsQ;
- mDb = QSqlDatabase::database();
-}
-
-void PicFilesModel::setMapping(int pMapId){
- QList<QVariant> ids = mMappingTreeModel->childList(pMapId, MappingTreeModel::MapParentId);
- mMappingIds.clear();
- foreach(QVariant i, ids){
- mMappingIds << i.toInt();
- }
-}
-
-QVariant PicFilesModel::data(const QModelIndex &index, int role) const {
- if(role == Qt::FontRole){
- if(index.column() == Md5Sum){
- return QFont("courier");
- }
- }
- if(role == Qt::ForegroundRole){
- if(index.column() == SizeDisplay){
- int fileSize = index.data(SizeRole).toInt();
- if(fileSize > 1024 * 1024 * 1024){
- return QColor(Qt::red);
- }else{
- return QColor(Qt::green);
- }
- }
- }
- SmTreeItem *item = itemAt(index);
- if(role == FileNameRole){
- return item->data(FileName);
- }
- if(role == SizeRole){
- return item->data(Size);
- }
- if(role == MimeTypeRole){
- return item->data(MimeType);
- }
- if(role == FullPathRole){
- return item->data(FullPath);
- }
- if(role == IdRole){
- return item->data(Id);
- }
- if(role == AddedRole){
- return item->data(Added);
- }
- if(role == Md5SumRole){
- return item->data(Md5Sum);
- }
- if(role == SizeDisplayRole){
- return item->data(SizeDisplay);
- }
- return SmTreeModel::data(index, role);
-}
-
-QList<QVariant> PicFilesModel::dataList(const QModelIndex &idx) const{
- QList<QVariant> retval;
- if(!idx.isValid()){
- return retval;
- }
- SmTreeItem *item = itemAt(idx);
- for(int i = 0; i < NumFields; ++i){
- retval << item->data(i);
- }
- return retval;
-}
-
-QList<QList<QVariant> > PicFilesModel::allFiles() const {
- QList<QList<QVariant> > retval;
- //assume depth of exactly 1
- SmTreeItem *rootItem = root();
- for(int i = 0; i < rootItem->childCount(); ++i){
- SmTreeItem *cur = rootItem->child(i);
- QList<QVariant> data;
- for(int j = 0; j < cur->columnCount(); ++j){
- data << cur->data(j);
- }
- retval << data;
- }
- return retval;
-}
-
-void PicFilesModel::removeFiles(const QList<QPersistentModelIndex> &files){
- foreach(QPersistentModelIndex pi, files){
- mDeleteFileQ->bindValue(":id", pi.data(IdRole));
- if(mDeleteFileQ->exec()){
- QFile::remove(pi.data(FullPathRole).toString());
- removeRows(pi.row(), 1, QModelIndex());
- }
- }
-}
-
-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;
-}
-
-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::MapParentIdRole).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;
- foreach(int id, mMappingIds){
- idList << QString::number(id);
- }
- QString query = mPopulateQS.arg(idList.join(","));
- QSqlQuery q(query, mDb);
- while(q.next()){
- QList<QVariant> data;
- data << q.value(1) << q.value(2) << q.value(3); // Filename, size and Mime type
- data << Helper::createArchivePath(q.value(1).toString(), q.value(5).toString()); // full path;
- data << q.value(0) << q.value(4) << q.value(5); //Id, added and md5
- QLocale l;
- data << l.toString(q.value(2).toInt()); //sizedisplay
- SmTreeItem *child = new SmTreeItem(data, root);
- root->appendChild(child);
- }
- setRoot(root);
-}