From b153f90a4c7f76a5ce5f4985bdbd687ba1602fdb Mon Sep 17 00:00:00 2001 From: Arno Date: Fri, 18 Jun 2010 15:52:01 +0200 Subject: 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. --- seriestreewidget.cpp | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'seriestreewidget.cpp') diff --git a/seriestreewidget.cpp b/seriestreewidget.cpp index 071667d..553a534 100644 --- a/seriestreewidget.cpp +++ b/seriestreewidget.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include "seriestreewidget.h" #include "smubermodel.h" @@ -75,7 +76,60 @@ void SeriesTreeWidget::deleteFromSeries(){ if(selected.isEmpty()){ return; } + QList series; + QList 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 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("

This operation will delete %1 file(s) permanently:

")).arg(files.count()); + message.append(tr("
    ")); + int ctr = 0; + foreach(QFileInfo f, files){ + ++ctr; + QString li = QString(tr("
  • %1
  • ")).arg(f.absoluteFilePath()); + message.append(li); + if(ctr == 20){ + QString elide = QString(tr("
  • (%1 more files)
  • ")).arg(files.count() - ctr); + message.append(elide); + break; + } + } + message.append(tr("
")); + message.append(tr("

Continue?

")); + }else{ + message = QString(tr("

This operation will delete no files. Continue?

")); + } + 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(){ -- cgit v1.2.3-70-g09d2