From 92c0ab74e931ba8846de50cb0572df94472a40ce Mon Sep 17 00:00:00 2001 From: Arno Date: Fri, 14 May 2010 13:52:30 +0200 Subject: Added "Play selected" and "Open with" to ArchiveViewWidget Implemented "Play selected movies" and "Open with" functions in ArchiveViewWidget. Also fixed a potential crash when re-creating the "Open with"-submenus. It's not possible to remove actions from an ActionGroup while iterating over the group with foreach. The ActionGroup is modified when calling removeAction() thus throwing the iterator of the loop off. Solution: First remove the actions from the ActionGroup and then delete the ActionGroup itself. The QObject destructor will take care of the contained Actions. --- archiveviewwidget.cpp | 50 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 3 deletions(-) (limited to 'archiveviewwidget.cpp') diff --git a/archiveviewwidget.cpp b/archiveviewwidget.cpp index 22a51f1..42532c5 100644 --- a/archiveviewwidget.cpp +++ b/archiveviewwidget.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include "archiveviewwidget.h" #include "archivefileview.h" @@ -155,9 +156,9 @@ void ArchiveViewWidget::showMovie(const QModelIndex &movie){ emit statusbarMessage(tr("Movie is not present on filesystem")); return; } - QSettings s; - QString playerPath = s.value("paths/movieviewer").toString(); - QStringList args = s.value("paths/movieviewerargs").toStringList(); + QPair pData = playerData(QString()); + QString playerPath = pData.first; + QStringList args = pData.second; args << real.data(MovieModel::FullPathRole).toString(); QProcess::startDetached(playerPath, args); } @@ -295,6 +296,18 @@ void ArchiveViewWidget::deleteFromArchive(){ } } +void ArchiveViewWidget::playSelected(const QString &player){ + QStringList selectedMovies = selectedFiles(); + if(selectedMovies.isEmpty()){ + return; + } + QPair pData = playerData(player); + QString prog = pData.first; + QStringList args = pData.second; + args << selectedMovies; + QProcess::startDetached(prog, args); +} + void ArchiveViewWidget::rowChanged(const QModelIndex &/*current*/, const QModelIndex & /*prev*/){ QModelIndex idx = getSourceColumnZero(); mWindowTitle = QString(tr("%1 - %2")).arg(qApp->applicationName()).arg(idx.data().toString()); @@ -324,3 +337,34 @@ const QModelIndex ArchiveViewWidget::getSourceColumnZero(){ return retval; } +QPair ArchiveViewWidget::playerData(const QString &preferred){ + QSettings s; + QHash data = s.value("programs_movieviewer/data").toHash(); + if(!preferred.isEmpty()){ + if(data.keys().contains(preferred)){ + QHash pData = data.value(preferred).toHash(); + return qMakePair(pData.value("path").toString(), pData.value("args").toStringList()); + } + return QPair(); + } + QString defaultPlayer = s.value("programs_movieviewer/default").toString(); + if(data.keys().contains(defaultPlayer)){ + QHash pData = data.value(defaultPlayer).toHash(); + return qMakePair(pData.value("path").toString(), pData.value("args").toStringList()); + } + return QPair(); +} + +QStringList ArchiveViewWidget::selectedFiles(){ + QModelIndexList selected = fileView()->selectionModel()->selectedRows(); + if(selected.isEmpty()){ + return QStringList(); + } + QStringList retval; + foreach(QModelIndex idx, selected){ + if(idx.data(MovieModel::DvdRole).toInt() == -1){ + retval << idx.data(MovieModel::FullPathRole).toString(); + } + } + return retval; +} -- cgit v1.2.3-70-g09d2