summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2015-03-21 09:15:16 +0100
committerArno <am@disconnect.de>2015-03-21 09:15:16 +0100
commit9544f4d790695e707e7e8b9cb44f9cb0fed0dbcb (patch)
treebf6af4d83c91f5a2594a3777fb31f620e6a852d2
parente6b7e5e0fccef756398982bd51137bb433df7f4a (diff)
downloadSheMov-9544f4d790695e707e7e8b9cb44f9cb0fed0dbcb.tar.gz
SheMov-9544f4d790695e707e7e8b9cb44f9cb0fed0dbcb.tar.bz2
SheMov-9544f4d790695e707e7e8b9cb44f9cb0fed0dbcb.zip
Delete emtpy series
Enable the delete option in ArchiveTree, but only allow delete when it has no children.
-rw-r--r--archivecontroller.cpp4
-rw-r--r--archivemodel.cpp7
-rw-r--r--archivemodel.h1
-rw-r--r--archiveview.cpp21
-rw-r--r--shemov.cpp5
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<int> 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);