summaryrefslogtreecommitdiffstats
path: root/newpicsdialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'newpicsdialog.cpp')
-rw-r--r--newpicsdialog.cpp84
1 files changed, 73 insertions, 11 deletions
diff --git a/newpicsdialog.cpp b/newpicsdialog.cpp
index 4395399..cc85a1b 100644
--- a/newpicsdialog.cpp
+++ b/newpicsdialog.cpp
@@ -6,6 +6,7 @@
*/
#include <QFileInfo>
+#include <QSqlDatabase>
#include <QSqlQuery>
#include <QLabel>
#include <QTreeView>
@@ -24,17 +25,24 @@
#include "mappingtreewidget.h"
#include "mappingtreemodel.h"
-NewPicsDialog::NewPicsDialog(QWidget *parent) : QWidget(parent) {
+NewPicsDialog::NewPicsDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f) {
+ //setup database
+ mDb = QSqlDatabase::database("treedb");
+ mAddFileQ = new QSqlQuery(mDb);
+ mAddFileQ->prepare("INSERT INTO pics (tfilename, cmd5sum, isize, tformat) VALUES(:fn, :md5, :size, :format)");
+ mAddMappingQ = new QSqlQuery(mDb);
+ mAddMappingQ->prepare("INSERT INTO pics_mappings (ipics_id, imapping_id) VALUES(:picid, :mapid)");
+
//files widget
mFilesWidget = new QWidget;
mFilesV = new QTreeView;
mFilesProxy = new QSortFilterProxyModel(this);
- mFilesModel = new NewPicFilesModel(QStringList() << tr("Filename") << tr("Val.") << tr("Md5") << tr("Mime type") << tr("Full path"), this);
+ mFilesModel = new NewPicFilesModel(QStringList() << tr("Filename") << tr("Size") << tr("Val.") << tr("Md5") << tr("Mime type") << tr("Full path"), this);
mFilesProxy->setSourceModel(mFilesModel);
mFilesV->setModel(mFilesProxy);
mFilesV->setSortingEnabled(true);
mFilesV->setAlternatingRowColors(true);
- mFilesV->setColumnHidden(1, true);
+ mFilesV->setColumnHidden(2, true);
mAddFiles = new QPushButton(tr("Select..."));
connect(mAddFiles, SIGNAL(clicked()), this, SLOT(addFiles()));
mRemoveFiles = new QPushButton(tr("Remove"));
@@ -52,32 +60,44 @@ NewPicsDialog::NewPicsDialog(QWidget *parent) : QWidget(parent) {
mMappingWidget = new QWidget;
mMappingTreeWidget = new MappingTreeWidget;
mResultView = new MappingTreeResultView;
- mResultModel = new MappingTreeResultModel(QStringList() << tr("Name"), this);
+ mResultModel = new MappingTreeResultModel(QStringList() << tr("Name") << tr("Id"), this);
mResultView->setModel(mResultModel);
mResultView->setAlternatingRowColors(true);
+ mResultView->setColumnHidden(1, true);
mAddMapping = new QPushButton(tr(">>"));
connect(mAddMapping, SIGNAL(clicked()), this, SLOT(addMapping()));
mRemoveMapping = new QPushButton(tr("<<"));
connect(mRemoveMapping, SIGNAL(clicked()), this, SLOT(removeMapping()));
- QVBoxLayout *buttonLayout = new QVBoxLayout;
- buttonLayout->addStretch();
- buttonLayout->addWidget(mAddMapping);
- buttonLayout->addWidget(mRemoveMapping);
- buttonLayout->addStretch();
+ QVBoxLayout *mappingButtonLayout = new QVBoxLayout;
+ mappingButtonLayout->addStretch();
+ mappingButtonLayout->addWidget(mAddMapping);
+ mappingButtonLayout->addWidget(mRemoveMapping);
+ mappingButtonLayout->addStretch();
QHBoxLayout *mappingLayout = new QHBoxLayout;
mappingLayout->addWidget(mMappingTreeWidget);
- mappingLayout->addLayout(buttonLayout);
+ mappingLayout->addLayout(mappingButtonLayout);
mappingLayout->addWidget(mResultView);
mMappingWidget->setLayout(mappingLayout);
+ //dialog buttons
+ mOk = new QPushButton(tr("Ok"));
+ connect(mOk, SIGNAL(clicked()), this, SLOT(accept()));
+ mCancel = new QPushButton(tr("Cancel"));
+ connect(mCancel, SIGNAL(clicked()), this, SLOT(reject()));
+ QHBoxLayout *dlgButtonLayout = new QHBoxLayout;
+ dlgButtonLayout->addStretch();
+ dlgButtonLayout->addWidget(mCancel);
+ dlgButtonLayout->addWidget(mOk);
+
//put it together
setMinimumWidth(600);
setMinimumHeight(400);
mTab = new QTabWidget;
mTab->addTab(mFilesWidget, tr("Files"));
mTab->addTab(mMappingWidget, tr("Mappings"));
- QHBoxLayout *mainLayout = new QHBoxLayout;
+ QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(mTab);
+ mainLayout->addLayout(dlgButtonLayout);
setLayout(mainLayout);
}
@@ -134,6 +154,43 @@ void NewPicsDialog::removeMapping(){
mResultModel->removeRows(firstIdx.row(), 1, firstIdx.parent());
}
+void NewPicsDialog::accept(){
+ QList<FileData> files = mFilesModel->validFiles();
+ if(files.isEmpty()){
+ return QDialog::accept();
+ }
+ QList<int> mappingIds = mResultModel->mappingsIds();
+ mDb.transaction();
+ foreach(FileData d, files){
+ mAddFileQ->bindValue(":fn", d.fileName);
+ mAddFileQ->bindValue(":md5", d.md5sum);
+ mAddFileQ->bindValue(":size", d.size);
+ mAddFileQ->bindValue(":format", d.mimeType);
+ if(mAddFileQ->exec()){
+ QSqlQuery curPicIdQ("SELECT currval('pics_ipicsid__seq')", mDb);
+ QVariant picId;
+ while(curPicIdQ.next()){
+ picId = curPicIdQ.value(0);
+ }
+ if(!picId.isValid()){
+ mDb.rollback();
+ return;
+ }
+ foreach(int mappingId, mappingIds){
+ mAddMappingQ->bindValue(":picid", picId);
+ mAddMappingQ->bindValue(":mapid", mappingId);
+ if(!mAddMappingQ->exec()){
+ mDb.rollback();
+ return;
+ }
+ }
+ }
+ Helper::moveToArchive(d.fullPath, d.md5sum);
+ }
+ mDb.commit();
+ return QDialog::accept();
+}
+
MappingTreeResultView::MappingTreeResultView(QWidget *parent) : QTreeView(parent) { }
NewPicFilesModel::NewPicFilesModel(const QStringList &header, QObject *parent) : SmTreeModel(header, parent){
@@ -194,6 +251,9 @@ bool NewPicFilesModel::setData(const QModelIndex &index, const QVariant &value,
if(role == FileNameRole){
item->setData(FileName, value);
}
+ if(role == SizeRole){
+ item->setData(Size, value);
+ }
if(role == ValidRole){
item->setData(Valid, value);
}
@@ -250,6 +310,7 @@ void NewPicFilesModel::addFile(const QString &path){
insertRows(0, 1, QModelIndex());
QModelIndex inserted = index(0, 1, QModelIndex());
setData(inserted, fi.fileName(), FileNameRole);
+ setData(inserted, fi.size(), SizeRole);
setData(inserted, valid, ValidRole);
setData(inserted, md5, Md5SumRole);
setData(inserted, mt, MimeTypeRole);
@@ -273,6 +334,7 @@ QList<FileData> NewPicFilesModel::validFiles() const {
}
FileData data;
data.fileName = child->data(FileName).toString();
+ data.size = child->data(Size).toInt();
data.valid = child->data(Valid).toBool();
data.md5sum = child->data(Md5Sum).toString();
data.mimeType = child->data(MimeType).toString();