diff options
Diffstat (limited to 'fswidget.cpp')
-rw-r--r-- | fswidget.cpp | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/fswidget.cpp b/fswidget.cpp index 0215e3a..1e7f2b6 100644 --- a/fswidget.cpp +++ b/fswidget.cpp @@ -37,6 +37,8 @@ FSWidget::FSWidget(QWidget *parent) : QWidget(parent) { mMovieWizard->setMinimumWidth(1024); mViewer = new Viewer; mNewPicsDlg = new NewPicsDialog; + mPlayer = new QProcess(qApp); + connect(mPlayer, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished), this, &FSWidget::doPlay); setPalette(qApp->palette()); setupWidget(); } @@ -588,19 +590,41 @@ void FSWidget::playSelected(int count, QString player){ wv->setVisible(true); wv->player()->play(); }else{ + if(mPlayer->state() != QProcess::NotRunning){ + int retval = QMessageBox::question(this, tr("Terminate player?"), tr("Terminate running instance?")); + if(retval == QMessageBox::No){ + return; + } + mPlayer->terminate(); + mPlayer->waitForFinished(); + } if(player.isEmpty()){ QSettings s; player = s.value("programs_movieviewer/default").toString(); } QPair<QString, QStringList> playerData = Helper::programData("movieviewer", player); - QStringList args = playerData.second; + mPlayerArgs = playerData.second; + mPlaylist.clear(); for(int i = 0; i < count; ++i){ - args << paths; + mPlaylist << paths; } - QProcess::startDetached(playerData.first, args); + mPlayer->setProgram(playerData.first); + doPlay(); } } +void FSWidget::doPlay(){ + if(mPlaylist.isEmpty()){ + emit message(tr("Playlist is empty!")); + return; + } + QStringList curArgs = mPlayerArgs; + curArgs << mPlaylist.takeFirst(); + mPlayer->setArguments(curArgs); + mPlayer->start(); + +} + void FSWidget::playQt(){ QModelIndexList selected = mFileView->selectionModel()->selectedRows(); if(selected.isEmpty()){ |