summaryrefslogtreecommitdiffstats
path: root/seriestreewidget.cpp
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2010-06-18 15:52:01 +0200
committerArno <am@disconnect.de>2010-06-18 15:52:01 +0200
commitb153f90a4c7f76a5ce5f4985bdbd687ba1602fdb (patch)
tree7e2bfc14e62e24b56a77b3afd2e40003956fb49d /seriestreewidget.cpp
parenta8bd9a2310bd630dd4e72fe0ff54a8be17e80064 (diff)
downloadSheMov-b153f90a4c7f76a5ce5f4985bdbd687ba1602fdb.tar.gz
SheMov-b153f90a4c7f76a5ce5f4985bdbd687ba1602fdb.tar.bz2
SheMov-b153f90a4c7f76a5ce5f4985bdbd687ba1602fdb.zip
Created frontend for SeriesTreeModel::deleteFromSeries
Implemented frontend for SeriesTreeModel::deleteFromSeries. I hope QPersistentModelIndexes work as advertised. From the qt-sources it seems that a QPersistentModelIndex is automatically updated by QAbstractItemModel when calling begin(Remove|Insert)Rows. Testing worked out fine. While at it I found a bug in SmTreeModel. removeRows has to be called with (i - 1) instead of (i) to remove the correct nodes.
Diffstat (limited to 'seriestreewidget.cpp')
-rw-r--r--seriestreewidget.cpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/seriestreewidget.cpp b/seriestreewidget.cpp
index 071667d..553a534 100644
--- a/seriestreewidget.cpp
+++ b/seriestreewidget.cpp
@@ -15,6 +15,7 @@
#include <QContextMenuEvent>
#include <QMenu>
#include <QAction>
+#include <QMessageBox>
#include "seriestreewidget.h"
#include "smubermodel.h"
@@ -75,7 +76,60 @@ void SeriesTreeWidget::deleteFromSeries(){
if(selected.isEmpty()){
return;
}
+ QList<QPersistentModelIndex> series;
+ QList<QPersistentModelIndex> parts;
+ foreach(QModelIndex s, selected){
+ QModelIndex real = mProxy->mapToSource(s);
+ if(real.data(SeriesTreeModel::TypeRole).toInt() == SeriesTreeModel::Series || real.data(SeriesTreeModel::TypeRole).toInt() == SeriesTreeModel::NewSeries){
+ series << QPersistentModelIndex(real);
+ }
+ if(real.data(SeriesTreeModel::TypeRole).toInt() == SeriesTreeModel::Part){
+ parts << QPersistentModelIndex(real);
+ }
+ }
+ QList<QPersistentModelIndex> removeParts;
+ foreach(QPersistentModelIndex s, parts){
+ if(series.contains(s.parent())){
+ removeParts << s;
+ }
+ }
+ foreach(QPersistentModelIndex s, removeParts){
+ parts.removeAll(s);
+ }
+ QFileInfoList files;
+ foreach(QPersistentModelIndex s, series){
+ files.append(mModel->findFiles(s));
+ }
+ QString message;
+ if(!files.isEmpty()){
+ message = QString(tr("<p>This operation will delete %1 file(s) permanently:</p>")).arg(files.count());
+ message.append(tr("<ul>"));
+ int ctr = 0;
+ foreach(QFileInfo f, files){
+ ++ctr;
+ QString li = QString(tr("<li>%1</li>")).arg(f.absoluteFilePath());
+ message.append(li);
+ if(ctr == 20){
+ QString elide = QString(tr("<li>(%1 more files)</li>")).arg(files.count() - ctr);
+ message.append(elide);
+ break;
+ }
+ }
+ message.append(tr("</ul>"));
+ message.append(tr("<p>Continue?</p>"));
+ }else{
+ message = QString(tr("<p>This operation will delete no files. Continue?</p>"));
+ }
+ int retval = QMessageBox::critical(this, tr("Delete Series"), message, QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
+ if(retval == QMessageBox::Yes){
+ foreach(QPersistentModelIndex s, series){
+ mModel->deleteFromSeries(s);
+ }
+ foreach(QPersistentModelIndex s, parts){
+ mModel->deleteFromSeries(s);
+ }
+ }
}
void SeriesTreeWidget::filter(){