diff options
author | Arno <am@disconnect.de> | 2013-06-03 09:32:41 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2013-06-03 09:32:41 +0200 |
commit | 35f5a0c5e13df3a0a41ef990b886a98ce2374a5c (patch) | |
tree | 6a72ab07c734f95af9d2e1b67cd3079e96e6e43a /archivemodel.cpp | |
parent | 953a291517022deaf22ec682e2d0971e999508d5 (diff) | |
download | SheMov-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.cpp | 48 |
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(); |