summaryrefslogtreecommitdiffstats
path: root/archivemodel.cpp
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2013-06-03 09:32:41 +0200
committerArno <am@disconnect.de>2013-06-03 09:32:41 +0200
commit35f5a0c5e13df3a0a41ef990b886a98ce2374a5c (patch)
tree6a72ab07c734f95af9d2e1b67cd3079e96e6e43a /archivemodel.cpp
parent953a291517022deaf22ec682e2d0971e999508d5 (diff)
downloadSheMov-35f5a0c5e13df3a0a41ef990b886a98ce2374a5c.tar.gz
SheMov-35f5a0c5e13df3a0a41ef990b886a98ce2374a5c.tar.bz2
SheMov-35f5a0c5e13df3a0a41ef990b886a98ce2374a5c.zip
Remove nodes
Implement remove nodes for ArchiveView. Only empty nodes without children can be removed. Everything else is too dangerous :)
Diffstat (limited to 'archivemodel.cpp')
-rw-r--r--archivemodel.cpp48
1 files changed, 43 insertions, 5 deletions
diff --git a/archivemodel.cpp b/archivemodel.cpp
index 21ee015..9ef2eac 100644
--- a/archivemodel.cpp
+++ b/archivemodel.cpp
@@ -94,11 +94,42 @@ bool ArchiveModel::setData(const QModelIndex &idx, const QVariant &value, int ro
return true;
}
}else{
- QSqlError e = updateQuery.lastError();
- QString databaseText = e.databaseText().isEmpty() ? tr("(none)") : e.databaseText();
- QString driverText = e.driverText().isEmpty() ? tr("(none)") : e.driverText();
- QString errormsg = QString(tr("<b>Database error:</b><br/><ul><li>driverText(): %1</li><li>databaseText(): %2</li></ul>")).arg(driverText).arg(databaseText);
- emit databaseError(errormsg);
+ emitDatabaseError(updateQuery.lastError());
+ }
+ return false;
+}
+
+bool ArchiveModel::removeNode(const QModelIndex &idx){
+ if(!idx.isValid()){
+ return false;
+ }
+ SmTreeItem *item = itemAt(idx);
+ if(item->childCount()){
+ return false;
+ }
+ int nodeType = item->data(Type).toInt();
+ QSqlQuery removeQuery(mDb);
+ if(nodeType == GenreNode){
+ removeQuery.prepare("DELETE FROM genres WHERE igenres_id = :id");
+ }else if(nodeType == ActorNode){
+ removeQuery.prepare("DELETE FROM actors WHERE iactors_id = :id");
+ }else if(nodeType == SeriesNode){
+ removeQuery.prepare("DELETE FROM series WHERE iseries_id = :id");
+ }else{
+ return false;
+ }
+ QVariant id = item->data(GenericId);
+ removeQuery.bindValue(":id", id);
+ if(removeQuery.exec()){
+ if(nodeType == GenreNode || nodeType == ActorNode){
+ removeRows(idx.row(), 1, idx.parent());
+ return true;
+ }else if(nodeType == SeriesNode){
+ emit needRefresh();
+ return true;
+ }
+ }else{
+ emitDatabaseError(removeQuery.lastError());
}
return false;
}
@@ -151,6 +182,13 @@ void ArchiveModel::collectorFinished(){
setRoot(item);
}
+void ArchiveModel::emitDatabaseError(const QSqlError &e){
+ QString databaseText = e.databaseText().isEmpty() ? tr("(none)") : e.databaseText();
+ QString driverText = e.driverText().isEmpty() ? tr("(none)") : e.driverText();
+ QString errormsg = QString(tr("<b>Database error:</b><br/><ul><li>driverText(): %1</li><li>databaseText(): %2</li></ul>")).arg(driverText).arg(databaseText);
+ emit databaseError(errormsg);
+}
+
ArchiveCollector::ArchiveCollector(int numFields, QObject *parent) : QThread(parent), mNumFields(numFields) {
mDb = QSqlDatabase::cloneDatabase(QSqlDatabase::database("treedb"), "archivedb");
mDb.open();