From 9544f4d790695e707e7e8b9cb44f9cb0fed0dbcb Mon Sep 17 00:00:00 2001 From: Arno Date: Sat, 21 Mar 2015 09:15:16 +0100 Subject: Delete emtpy series Enable the delete option in ArchiveTree, but only allow delete when it has no children. --- archivecontroller.cpp | 4 +++- archivemodel.cpp | 7 +++++++ archivemodel.h | 1 + archiveview.cpp | 21 ++++++++++++++++++--- shemov.cpp | 5 ++++- 5 files changed, 33 insertions(+), 5 deletions(-) diff --git a/archivecontroller.cpp b/archivecontroller.cpp index 338a698..0c29373 100644 --- a/archivecontroller.cpp +++ b/archivecontroller.cpp @@ -319,7 +319,9 @@ void ArchiveController::treeSelectionChanged(const QItemSelection &selected, con int nodeType = sel.first().data(ArchiveModel::TypeRole).toInt(); foreach(QAction *a, mActionsForTree){ - a->setEnabled(a->data().toInt() & nodeType); + int aData = a->data().toInt(); + bool enabled = (aData >> nodeType) & 1; + a->setEnabled(enabled); } } diff --git a/archivemodel.cpp b/archivemodel.cpp index d1580de..483eb9f 100644 --- a/archivemodel.cpp +++ b/archivemodel.cpp @@ -552,6 +552,13 @@ bool ArchiveModel::deleteSeriesPart(int partId){ return deleteQ.exec(); } +bool ArchiveModel::deleteSeries(int seriesId){ + QSqlQuery seriesQ(mDb); + seriesQ.prepare("DELETE FROM series WHERE iseries_id = :id"); + seriesQ.bindValue(":id", seriesId); + return seriesQ.exec(); +} + bool ArchiveModel::addSeriesPart(int partno, QString subtitle, const QModelIndex &parent){ int seriesId = parent.data(ArchiveModel::GenericIdRole).toInt(); mDb.transaction(); diff --git a/archivemodel.h b/archivemodel.h index 27cd8cf..6e02855 100644 --- a/archivemodel.h +++ b/archivemodel.h @@ -54,6 +54,7 @@ class ArchiveModel : public SmTreeModel { void addFiles(int partId, const QStringList files); void removeFiles(const QList fileIds); bool deleteSeriesPart(int partId); + bool deleteSeries(int seriesId); bool addSeriesPart(int partno, QString subtitle, const QModelIndex &parent); int seriesPartIdFromMd5(const QString &md5); diff --git a/archiveview.cpp b/archiveview.cpp index b7ae5e6..9c05b09 100644 --- a/archiveview.cpp +++ b/archiveview.cpp @@ -425,10 +425,10 @@ void ArchiveTree::deleteFromTree(){ return; } int type = idx.data(ArchiveModel::TypeRole).toInt(); + ArchiveController *c = SmGlobals::instance()->archiveController(); + ArchiveFilesModel *fm = c->archiveFilesModel(); + ArchiveModel *am = c->archiveTreeModel(); if(type == ArchiveModel::SeriesPartNode){ - ArchiveController *c = SmGlobals::instance()->archiveController(); - ArchiveFilesModel *fm = c->archiveFilesModel(); - ArchiveModel *am = c->archiveTreeModel(); int seriesPartId = idx.data(ArchiveModel::SeriesPartIdRole).toInt(); QStringList files = fm->filesForSeriespart(seriesPartId); if(!files.isEmpty()){ @@ -448,6 +448,21 @@ void ArchiveTree::deleteFromTree(){ } am->refresh(); } + if(type == ArchiveModel::SeriesNode){ + if(mProxy->hasChildren(idx)){ + QMessageBox::critical(0, tr("Critical"), tr("Series is not empty!"), QMessageBox::Ok); + return; + } + int seriesId = idx.data(ArchiveModel::GenericIdRole).toInt(); + if(seriesId > 0){ + QString msg = QString(tr("Really delete series %1?")).arg(idx.data(ArchiveModel::NameRole).toString()); + int retval = QMessageBox::question(0, tr("Question"), msg, QMessageBox::Ok | QMessageBox::Cancel); + if(retval == QMessageBox::Ok){ + am->deleteSeries(seriesId); + am->refresh(); + } + } + } } void ArchiveTree::newPart(){ diff --git a/shemov.cpp b/shemov.cpp index 9158106..2a47a1e 100644 --- a/shemov.cpp +++ b/shemov.cpp @@ -673,7 +673,10 @@ void SheMov::createActions(){ connect(mArchiveViewMarkFavA, SIGNAL(triggered()), c->archiveTree(), SLOT(markAsFavorite())); //delete from Tree mArchiveViewDeleteA = new QAction(QIcon(":/delete.png"), tr("Delete..."), this); - mArchiveViewDeleteA->setData(ArchiveModel::SeriesPartNode); + int deleteMask = 0; + deleteMask |= (1 << ArchiveModel::SeriesNode); + deleteMask |= (1 << ArchiveModel::SeriesPartNode); + mArchiveViewDeleteA->setData(deleteMask); connect(mArchiveViewDeleteA, SIGNAL(triggered()), c->archiveTree(), SLOT(deleteFromTree())); //add new series part mArchiveViewNewPartA = new QAction(QIcon(":/french_maid_dress.png"), tr("New..."), this); -- cgit v1.2.3-70-g09d2