From 35f5a0c5e13df3a0a41ef990b886a98ce2374a5c Mon Sep 17 00:00:00 2001 From: Arno Date: Mon, 3 Jun 2013 09:32:41 +0200 Subject: Remove nodes Implement remove nodes for ArchiveView. Only empty nodes without children can be removed. Everything else is too dangerous :) --- archivemodel.cpp | 48 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 5 deletions(-) (limited to 'archivemodel.cpp') 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("Database error:
")).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("Database error:
")).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(); -- cgit v1.2.3-70-g09d2