diff options
author | Arno <am@disconnect.de> | 2010-06-18 15:52:01 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2010-06-18 15:52:01 +0200 |
commit | b153f90a4c7f76a5ce5f4985bdbd687ba1602fdb (patch) | |
tree | 7e2bfc14e62e24b56a77b3afd2e40003956fb49d /seriestreewidget.cpp | |
parent | a8bd9a2310bd630dd4e72fe0ff54a8be17e80064 (diff) | |
download | SheMov-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.cpp | 54 |
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(){ |