summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2012-10-27 13:02:16 +0200
committerArno <am@disconnect.de>2012-10-27 13:02:16 +0200
commitdc7cc269a4fffe43bdac2ae2dc6548fbd1e3bb5e (patch)
tree30de1f390ad33f067ba1cb9872f994df620fd8c6
parenta4054f1c7b38e5996081efd7583c06ebf7758e61 (diff)
downloadSheMov-dc7cc269a4fffe43bdac2ae2dc6548fbd1e3bb5e.tar.gz
SheMov-dc7cc269a4fffe43bdac2ae2dc6548fbd1e3bb5e.tar.bz2
SheMov-dc7cc269a4fffe43bdac2ae2dc6548fbd1e3bb5e.zip
Fix archiving pictures
Well, what can I say. Lost in recursion and parent pointers. This commit actually boils down to using the proper database tables and inserting the right values. 'Nuff said...
-rw-r--r--mappingtreemodel.cpp53
-rw-r--r--mappingtreemodel.h16
-rw-r--r--mappingtreewidget.cpp18
-rw-r--r--mappingtreewidget.h3
-rw-r--r--newpicsdialog.cpp8
-rw-r--r--picfilesmodel.cpp10
-rw-r--r--picfilesmodel.h2
-rw-r--r--pictureswidget.cpp4
8 files changed, 64 insertions, 50 deletions
diff --git a/mappingtreemodel.cpp b/mappingtreemodel.cpp
index 07e3a24..2c636e6 100644
--- a/mappingtreemodel.cpp
+++ b/mappingtreemodel.cpp
@@ -123,6 +123,9 @@ QVariant MappingTreeModel::data(const QModelIndex &index, int role) const{
if(role == MyIdRole){
return item->data(MyId);
}
+ if(role == ParentIdRole){
+ return item->data(ParentId);
+ }
return SmTreeModel::data(index, role);
}
@@ -302,11 +305,13 @@ bool MappingTreeModel::deleteChild(const QModelIndex &idx){
}
MappingData MappingTreeModel::mappingDataFromIndex(QModelIndex &idx) const{
- MappingData retval = { -1, QString(), QList<QStringList>() };
+ MappingData retval = { -1, -1, -1, QString(), QList<QStringList>() };
if(!idx.isValid()){
return retval;
}
- retval.id = idx.data(MappingTreeModel::MyIdRole).toInt();
+ retval.mappingId = idx.data(MappingTreeModel::MappingIdRole).toInt();
+ retval.parentId = idx.data(MappingTreeModel::ParentIdRole).toInt();
+ retval.myId = idx.data(MappingTreeModel::MyIdRole).toInt();
retval.name = idx.data(MappingTreeModel::NameRole).toString();
retval.path << path(idx);
return retval;
@@ -480,8 +485,16 @@ bool MappingTreeResultModel::setData(const QModelIndex &index, const QVariant &v
item->setData(Name, value);
return true;
}
- if(role == IdRole){
- item->setData(Id, value);
+ if(role == MappingIdRole){
+ item->setData(MappingId, value);
+ return true;
+ }
+ if(role == ParentIdRole){
+ item->setData(ParentId, value);
+ return true;
+ }
+ if(role == MyIdRole){
+ item->setData(MyId, value);
return true;
}
return SmTreeModel::setData(index, value, role);
@@ -499,18 +512,22 @@ void MappingTreeResultModel::addItem(const MappingData &data){
continue;
}else{
//insert child
- int id = -1;
+ int mappingId = -1;
+ int parentId = -1;
+ int myId = -1;
if(i == p.count() - 1){
- id = data.id;
+ mappingId = data.mappingId;
+ parentId = data.parentId;
+ myId = data.myId;
}
- QModelIndex curIdx = insertChild(p.at(i), id, curItem);
+ QModelIndex curIdx = insertChild(p.at(i), mappingId, parentId, myId, curItem);
curItem = itemAt(curIdx);
}
}
}
}
-QModelIndex MappingTreeResultModel::insertChild(const QVariant &data, int id, SmTreeItem *parent){
+QModelIndex MappingTreeResultModel::insertChild(const QVariant &data, int mappingId, int parentId, int myId, SmTreeItem *parent){
QModelIndex parentIdx;
int row = parent->childCount();
if(parent != root()){
@@ -524,12 +541,14 @@ QModelIndex MappingTreeResultModel::insertChild(const QVariant &data, int id, Sm
insertRows(row, 1, parentIdx);
QModelIndex newIdx = index(row, 0, parentIdx);
setData(newIdx, data, NameRole);
- setData(newIdx, id, IdRole);
+ setData(newIdx, mappingId, MappingIdRole);
+ setData(newIdx, myId, MyIdRole);
+ setData(newIdx, parentId, ParentIdRole);
return newIdx;
}
-QList<int> MappingTreeResultModel::mappingsIds() const {
- return mappingIdsRecursive(root());
+QList<QVariant> MappingTreeResultModel::columnValues(int column) const {
+ return columnValuesRecursive(root(), column);
}
void MappingTreeResultModel::clearData(){
@@ -545,18 +564,18 @@ int MappingTreeResultModel::hasChild(SmTreeItem *item, const QVariant &name, int
return -1;
}
-QList<int> MappingTreeResultModel::mappingIdsRecursive(SmTreeItem *parent) const {
- QList<int> retval;
+QList<QVariant> MappingTreeResultModel::columnValuesRecursive(SmTreeItem *parent, int column) const {
+ QList<QVariant> retval;
if(!parent->childCount()){
return retval;
}
for(int i = 0; i < parent->childCount(); ++i){
SmTreeItem *child = parent->child(i);
- int id = child->data(Id).toInt();
- if(id != -1){
- retval << id;
+ QVariant value = child->data(column);
+ if(value.canConvert(QVariant::Int) && (value.toInt() != -1)){
+ retval << value;
}
- retval << mappingIdsRecursive(child);
+ retval << columnValuesRecursive(child, column);
}
return retval;
}
diff --git a/mappingtreemodel.h b/mappingtreemodel.h
index 38c0c7b..a4a1ae8 100644
--- a/mappingtreemodel.h
+++ b/mappingtreemodel.h
@@ -96,16 +96,16 @@ class MappingTreeModel : public SmTreeModel {
class MappingTreeResultModel : public SmTreeModel {
Q_OBJECT
public:
- enum Roles { NameRole = Qt::UserRole + 1, IdRole = Qt::UserRole + 2 };
- enum Fields { Name = 0, Id = 1 };
- enum { NumFields = 2 };
+ enum Roles { NameRole = Qt::UserRole + 1, MappingIdRole = Qt::UserRole + 2, ParentIdRole = Qt::UserRole + 3, MyIdRole = Qt::UserRole + 4 };
+ enum Fields { Name = 0, MappingId = 1, ParentId = 2, MyId = 3 };
+ enum { NumFields = 4 };
explicit MappingTreeResultModel(const QStringList &headers, QObject *parent = 0);
//data + flags
Qt::ItemFlags flags(const QModelIndex &index) const;
bool setData(const QModelIndex &index, const QVariant &value, int role);
- QModelIndex insertChild(const QVariant &data, int id, SmTreeItem *parent);
- QList<int> mappingsIds() const;
+ QModelIndex insertChild(const QVariant &data, int mappingId, int parentId, int myId, SmTreeItem *parent);
+ QList<QVariant> columnValues(int column) const;
void clearData();
public slots:
@@ -113,11 +113,13 @@ class MappingTreeResultModel : public SmTreeModel {
private:
int hasChild(SmTreeItem *item, const QVariant &name, int column = 0) const;
- QList<int> mappingIdsRecursive(SmTreeItem *parent) const;
+ QList<QVariant> columnValuesRecursive(SmTreeItem *parent, int column) const;
};
struct MappingData {
- int id;
+ int mappingId;
+ int parentId;
+ int myId;
QString name;
QList<QStringList> path;
};
diff --git a/mappingtreewidget.cpp b/mappingtreewidget.cpp
index 31a7c8e..e9d0c93 100644
--- a/mappingtreewidget.cpp
+++ b/mappingtreewidget.cpp
@@ -94,7 +94,7 @@ MappingTreeWidget::MappingTreeWidget(QWidget *parent) : QWidget(parent){
}
MappingData MappingTreeWidget::selectedItem() const {
- MappingData retval = { -1, QString(), QList<QStringList>() };
+ MappingData retval = { -1, -1, -1, QString(), QList<QStringList>() };
QModelIndex sel = selected();
if(!sel.isValid()){
return retval;
@@ -270,10 +270,12 @@ MappingEditWidget::MappingEditWidget(QWidget *parent) : QWidget(parent){
//the views
mMappingTree = new MappingTreeWidget;
mMappingResult = new MappingTreeResultView;
- mResultModel = new MappingTreeResultModel(QStringList() << tr("Name") << tr("Id"), this);
+ mResultModel = new MappingTreeResultModel(QStringList() << tr("Name") << tr("MappingId") << tr("ParentId") << tr("MyId"), this);
mMappingResult->setModel(mResultModel);
mMappingResult->setAlternatingRowColors(true);
mMappingResult->setColumnHidden(1, true);
+ mMappingResult->setColumnHidden(2, true);
+ mMappingResult->setColumnHidden(3, true);
//buttons
mAddMapping = new QPushButton(tr(">>"));
@@ -294,15 +296,8 @@ MappingEditWidget::MappingEditWidget(QWidget *parent) : QWidget(parent){
setLayout(mainLayout);
}
-QList<int> MappingEditWidget::mappingIds() const {
- return mResultModel->mappingsIds();
-}
-
void MappingEditWidget::addMapping(){
MappingData selected = mMappingTree->selectedItem();
- if(selected.id == -1){
- return;
- }
mResultModel->addItem(selected);
mMappingResult->expandAll();
}
@@ -320,14 +315,9 @@ void MappingEditWidget::setMappings(const QList<MappingData> &mappings){
if(mappings.isEmpty()){
return;
}
- //MappingTreeModel *mModel = static_cast<MappingTreeModel*>(SmGlobals::instance()->model("MappingTree"));
mResultModel->clearData();
foreach(MappingData d, mappings){
mResultModel->addItem(d);
- /*MappingData curData = mModel->mappingDataFromId(i);
- if(curData.id != -1){
- mResultModel->addItem(curData);
- }*/
}
mMappingResult->expandAll();
}
diff --git a/mappingtreewidget.h b/mappingtreewidget.h
index 600c6d5..50bbddf 100644
--- a/mappingtreewidget.h
+++ b/mappingtreewidget.h
@@ -23,6 +23,7 @@ class QStringListModel;
class QAction;
class MappingTreeResultModel;
+// defined in mappingtreemodel.h
struct MappingData;
class MappingTreeWidget : public QWidget {
@@ -84,7 +85,7 @@ class MappingEditWidget : public QWidget {
Q_OBJECT
public:
explicit MappingEditWidget(QWidget *parent = 0);
- QList<int> mappingIds() const;
+ const MappingTreeResultModel *model() const { return mResultModel; }
public slots:
void addMapping();
diff --git a/newpicsdialog.cpp b/newpicsdialog.cpp
index 822065a..0ededef 100644
--- a/newpicsdialog.cpp
+++ b/newpicsdialog.cpp
@@ -40,7 +40,7 @@ void NewPicsDialog::setupDlg(){
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)");
+ mAddMappingQ->prepare("INSERT INTO pics_mappings2 (ipics_id, imappings_parents_id) VALUES(:picid, :mapid)");
//files widget
mFilesWidget = new QWidget;
@@ -138,7 +138,7 @@ void NewPicsDialog::accept(){
if(files.isEmpty()){
return QDialog::accept();
}
- QList<int> mappingIds = mMappingEditWidget->mappingIds();
+ QList<QVariant> parentIds = mMappingEditWidget->model()->columnValues(MappingTreeResultModel::MyId);
mDb.transaction();
foreach(FileData d, files){
mAddFileQ->bindValue(":fn", d.fileName);
@@ -155,9 +155,9 @@ void NewPicsDialog::accept(){
mDb.rollback();
return;
}
- foreach(int mappingId, mappingIds){
+ foreach(QVariant myId, parentIds){
mAddMappingQ->bindValue(":picid", picId);
- mAddMappingQ->bindValue(":mapid", mappingId);
+ mAddMappingQ->bindValue(":mapid", myId);
if(!mAddMappingQ->exec()){
mDb.rollback();
return;
diff --git a/picfilesmodel.cpp b/picfilesmodel.cpp
index cab7235..56d9522 100644
--- a/picfilesmodel.cpp
+++ b/picfilesmodel.cpp
@@ -135,16 +135,16 @@ void PicFilesModel::removeFiles(const QList<QPersistentModelIndex> &files){
}
}
-bool PicFilesModel::changeMappings(const QList<int> &fileIds, const QList<int> &mappingIds){
+bool PicFilesModel::changeMappings(const QList<int> &fileIds, const QList<QVariant> &parentIds){
mDb.transaction();
foreach(int fid, fileIds){
mDeleteMappingsQ->bindValue(":id", fid);
if(!mDeleteMappingsQ->exec()){
goto error;
}
- foreach(int mid, mappingIds){
+ foreach(QVariant pid, parentIds){
mAddMappingsQ->bindValue(":pid", fid);
- mAddMappingsQ->bindValue(":id", mid);
+ mAddMappingsQ->bindValue(":id", pid);
if(!mAddMappingsQ->exec()){
goto error;
}
@@ -172,7 +172,9 @@ QList<MappingData> PicFilesModel::mappingDataFromFiles(const QList<int> fileIds)
foreach(int pId, parentIds){
QModelIndex curIdx = mMappingTreeModel->findRecursive(pId, MappingTreeModel::MyId, mMappingTreeModel->rootIndex());
MappingData curData;
- curData.id = curIdx.data(MappingTreeModel::MyIdRole).toInt();
+ //curData.id = curIdx.data(MappingTreeModel::MyIdRole).toInt();
+ curData.mappingId = curIdx.data(MappingTreeModel::MappingIdRole).toInt();
+ curData.parentId = curIdx.data(MappingTreeModel::ParentIdRole).toInt();
curData.name = curIdx.data(MappingTreeModel::NameRole).toString();
curData.path << mMappingTreeModel->path(curIdx); //.join("/");
retval << curData;
diff --git a/picfilesmodel.h b/picfilesmodel.h
index 146fbfc..a27372d 100644
--- a/picfilesmodel.h
+++ b/picfilesmodel.h
@@ -27,7 +27,7 @@ class PicFilesModel : public SmTreeModel {
QList<QVariant> dataList(const QModelIndex &idx) const;
QList<QList<QVariant> > allFiles() const;
void removeFiles(const QList<QPersistentModelIndex> &files);
- bool changeMappings(const QList<int> &fileIds, const QList<int> &mappingIds);
+ bool changeMappings(const QList<int> &fileIds, const QList<QVariant> &parentIds);
QList<MappingData> mappingDataFromFile(int fileId) const;
QList<MappingData> mappingDataFromFiles(const QList<int> fileIds) const;
diff --git a/pictureswidget.cpp b/pictureswidget.cpp
index 99091c9..92b0490 100644
--- a/pictureswidget.cpp
+++ b/pictureswidget.cpp
@@ -85,7 +85,7 @@ void PicturesWidget::editMappings(){
mEditDialog->editWidget()->setMappings(mappings);
int retval = mEditDialog->exec();
if(retval == QDialog::Accepted){
- QList<int> selMappings = mEditDialog->editWidget()->mappingIds();
+ QList<QVariant> selMappings = mEditDialog->editWidget()->model()->columnValues(MappingTreeResultModel::ParentId);
if(selMappings.isEmpty()){
QMessageBox::critical(this, tr("Error"), tr("No mappings selected! Cowardly bailing out."));
return;
@@ -102,7 +102,7 @@ void PicturesWidget::editMappings(){
void PicturesWidget::constructWindowTitle(){
QString windowTitle = mWindowTitleBase;
MappingData selected = mMappingTree->selectedItem();
- if(selected.id != -1){
+ if(!selected.path.isEmpty()){
windowTitle = QString("%1 - [%2]").arg(mWindowTitleBase).arg(selected.path.first().join("/"));
mPictureView->setHoverWinVisible(false);
}