summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--archiveviewwidget.cpp50
-rw-r--r--archiveviewwidget.h4
-rw-r--r--shemov.cpp101
-rw-r--r--shemov.h18
4 files changed, 130 insertions, 43 deletions
diff --git a/archiveviewwidget.cpp b/archiveviewwidget.cpp
index 22a51f1..42532c5 100644
--- a/archiveviewwidget.cpp
+++ b/archiveviewwidget.cpp
@@ -18,6 +18,7 @@
#include <QProcess>
#include <QDir>
#include <QRegExp>
+#include <QHash>
#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<QString, QStringList> 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<QString, QStringList> 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<QString, QStringList> ArchiveViewWidget::playerData(const QString &preferred){
+ QSettings s;
+ QHash<QString, QVariant> data = s.value("programs_movieviewer/data").toHash();
+ if(!preferred.isEmpty()){
+ if(data.keys().contains(preferred)){
+ QHash<QString, QVariant> pData = data.value(preferred).toHash();
+ return qMakePair(pData.value("path").toString(), pData.value("args").toStringList());
+ }
+ return QPair<QString, QStringList>();
+ }
+ QString defaultPlayer = s.value("programs_movieviewer/default").toString();
+ if(data.keys().contains(defaultPlayer)){
+ QHash<QString, QVariant> pData = data.value(defaultPlayer).toHash();
+ return qMakePair(pData.value("path").toString(), pData.value("args").toStringList());
+ }
+ return QPair<QString, QStringList>();
+}
+
+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;
+}
diff --git a/archiveviewwidget.h b/archiveviewwidget.h
index 6a9823b..4f56af5 100644
--- a/archiveviewwidget.h
+++ b/archiveviewwidget.h
@@ -9,6 +9,7 @@
#define ARCHIVEVIEWWIDGET_H
#include <QWidget>
+#include <QPair>
#include "archivefileview.h"
@@ -46,6 +47,7 @@ class ArchiveViewWidget : public QWidget {
void moveBurn();
void setDvdNo();
void deleteFromArchive();
+ void playSelected(const QString &player = QString());
signals:
void statusbarMessage(const QString &message);
@@ -58,6 +60,8 @@ class ArchiveViewWidget : public QWidget {
private:
const QModelIndex getSourceColumnZero();
+ QPair<QString, QStringList> playerData(const QString &preferred);
+ QStringList selectedFiles();
QComboBox *mGenre;
QComboBox *mActors;
QLineEdit *mName;
diff --git a/shemov.cpp b/shemov.cpp
index ceacdbb..503a2bc 100644
--- a/shemov.cpp
+++ b/shemov.cpp
@@ -43,7 +43,7 @@
#include "statisticsdialog.h"
#include "filesystemfileproxy.h"
-SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, flags) {
+SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, flags), mOpenWithGroupFS(0), mOpenWithGroupAV(0) {
qApp->setWindowIcon(QIcon(":/shemov.png"));
QSettings s;
@@ -161,6 +161,8 @@ void SheMov::configure(){
ConfigurationDialog dlg(this);
dlg.exec();
createExtractMenu();
+ createOpenWithMenuFS();
+ createOpenWithMenuAV();
}
void SheMov::tabChanged(int newTab){
@@ -258,8 +260,8 @@ void SheMov::createStatusbar(){
void SheMov::createActions(){
//File menu
- mPlaySelectedA = new QAction(tr("Play selected movies..."), this);
- connect(mPlaySelectedA, SIGNAL(triggered()), mFSWidget, SLOT(playSelected()));
+ mPlaySelectedFSA = new QAction(tr("Play selected movies..."), this);
+ connect(mPlaySelectedFSA, SIGNAL(triggered()), mFSWidget, SLOT(playSelected()));
mQuitA = new QAction(tr("Quit"), this);
mQuitA->setShortcut(tr("CTRL+q"));
@@ -324,6 +326,8 @@ void SheMov::createActions(){
createExtractMenu();
//Edit menu (archive)
+ mPlaySelectedAVA = new QAction(tr("Play selected movies..."), this);
+ connect(mPlaySelectedAVA, SIGNAL(triggered()), mAVWidget, SLOT(playSelected()));
mEditArchiveFileA = new QAction(tr("Edit file..."), this);
mEditArchiveFileA->setShortcut(tr("CTRL+e"));
connect(mEditArchiveFileA, SIGNAL(triggered()), mAVWidget, SLOT(editFile()));
@@ -350,16 +354,17 @@ void SheMov::createActions(){
connect(mStatisticsA, SIGNAL(triggered()), this, SLOT(showStatistics()));
// misc
- mOpenWithGroup = new QActionGroup(this);
- mOpenWithMapper = new QSignalMapper(this);
- connect(mOpenWithMapper, SIGNAL(mapped(QString)), mFSWidget, SLOT(playSelected(QString)));
+ mOpenWithMapperFS = new QSignalMapper(this);
+ mOpenWithMapperAV = new QSignalMapper(this);
+ connect(mOpenWithMapperFS, SIGNAL(mapped(QString)), mFSWidget, SLOT(playSelected(QString)));
+ connect(mOpenWithMapperAV, SIGNAL(mapped(QString)), mAVWidget, SLOT(playSelected(QString)));
connect(mFSWidget->dirModel(), SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(setFsFree()));
connect(mFSWidget->dirModel(), SIGNAL(layoutChanged()), this, SLOT(setFsFree()));
}
void SheMov::createMenus(){
QMenu *fileMenu = new QMenu(tr("&File"), this);
- fileMenu->addAction(mPlaySelectedA);
+ fileMenu->addAction(mPlaySelectedFSA);
fileMenu->addSeparator();
fileMenu->addAction(mQuitA);
mEditFSMenu = new QMenu(tr("&Edit"), this);
@@ -412,12 +417,12 @@ void SheMov::createMenus(){
menuBar()->addMenu(helpMenu);
// FilesystemWidget context menu
- mOpenWithMenu = new QMenu(tr("Open with"), this);
- mFSWidget->fileView()->addAction(mPlaySelectedA);
- createOpenWithMenu();
- mOpenWithMenuA = new QAction(tr("Open with"), this);
- mOpenWithMenuA->setMenu(mOpenWithMenu);
- mFSWidget->fileView()->addAction(mOpenWithMenuA);
+ mOpenWithMenuFS = new QMenu(tr("Open with"), this);
+ mFSWidget->fileView()->addAction(mPlaySelectedFSA);
+ createOpenWithMenuFS();
+ mOpenWithMenuFSA = new QAction(tr("Open with"), this);
+ mOpenWithMenuFSA->setMenu(mOpenWithMenuFS);
+ mFSWidget->fileView()->addAction(mOpenWithMenuFSA);
QAction *sep1 = new QAction(this);
sep1->setSeparator(true);
mFSWidget->fileView()->addAction(sep1);
@@ -442,48 +447,76 @@ void SheMov::createMenus(){
mFSWidget->fileView()->addAction(mArchiveA);
//ArchiveViewWidget context menu
+ mOpenWithMenuAV = new QMenu(tr("Open with"), this);
+ mAVWidget->fileView()->addAction(mPlaySelectedAVA);
+ createOpenWithMenuAV();
+ mOpenWithMenuAVA = new QAction(tr("Open with"), this);
+ mOpenWithMenuAVA->setMenu(mOpenWithMenuAV);
+ mAVWidget->fileView()->addAction(mOpenWithMenuAVA);
+ QAction *sep5 = new QAction(this);
+ sep5->setSeparator(true);
+ mAVWidget->fileView()->addAction(sep5);
mAVWidget->fileView()->addAction(mEditArchiveFileA);
mAVWidget->fileView()->addAction(mEditArchiveCoverA);
mAVWidget->fileView()->addAction(mAddMovieManuallyA);
mAVWidget->fileView()->addAction(mDeleteFromArchiveA);
mAVWidget->fileView()->addAction(mSetDvdA);
- QAction *sep5 = new QAction(this);
- sep5->setSeparator(true);
- mAVWidget->fileView()->addAction(sep5);
- mAVWidget->fileView()->addAction(mMoveBurnA);
QAction *sep6 = new QAction(this);
sep6->setSeparator(true);
mAVWidget->fileView()->addAction(sep6);
+ mAVWidget->fileView()->addAction(mMoveBurnA);
+ QAction *sep7 = new QAction(this);
+ sep7->setSeparator(true);
+ mAVWidget->fileView()->addAction(sep7);
mAVWidget->fileView()->addAction(mPropertiesA);
}
-void SheMov::createOpenWithMenu(){
- foreach(QAction *a, mOpenWithGroup->actions()){
- mOpenWithMenu->removeAction(a);
- mOpenWithGroup->removeAction(a);
- delete a;
+void SheMov::createOpenWithMenuFS(){
+ if(mOpenWithGroupFS){
+ foreach(QAction *a, mOpenWithGroupFS->actions()){
+ mOpenWithMenuFS->removeAction(a);
+ }
}
+ mOpenWithGroupFS->deleteLater();
+ mOpenWithGroupFS = new QActionGroup(this);
QSettings s;
QStringList moviePlayers = s.value("programs_movieviewer/data").toHash().keys();
moviePlayers.sort();
foreach(QString p, moviePlayers){
- QAction *a = new QAction(p, this);
- mOpenWithGroup->addAction(a);
- mOpenWithMenu->addAction(a);
- mOpenWithMapper->setMapping(a, p);
- connect(a, SIGNAL(triggered()), mOpenWithMapper, SLOT(map()));
+ QAction *a = new QAction(p, mOpenWithGroupFS);
+ mOpenWithMenuFS->addAction(a);
+ mOpenWithMapperFS->setMapping(a, p);
+ connect(a, SIGNAL(triggered()), mOpenWithMapperFS, SLOT(map()));
}
- QAction *sep = new QAction(this);
+ QAction *sep = new QAction(mOpenWithGroupFS);
sep->setSeparator(true);
- mOpenWithMenu->addAction(sep);
+ mOpenWithMenuFS->addAction(sep);
QStringList picViewers = s.value("programs_pictureviewer/data").toHash().keys();
picViewers.sort();
foreach(QString p, picViewers){
- QAction *a = new QAction(p, this);
- mOpenWithGroup->addAction(a);
- mOpenWithMenu->addAction(a);
- mOpenWithMapper->setMapping(a, p);
- connect(a, SIGNAL(triggered()), mOpenWithMapper, SLOT(map()));
+ QAction *a = new QAction(p, mOpenWithGroupFS);
+ mOpenWithMenuFS->addAction(a);
+ mOpenWithMapperFS->setMapping(a, p);
+ connect(a, SIGNAL(triggered()), mOpenWithMapperFS, SLOT(map()));
+ }
+}
+
+void SheMov::createOpenWithMenuAV(){
+ if(mOpenWithGroupAV){
+ foreach(QAction *a, mOpenWithGroupAV->actions()){
+ mOpenWithMenuAV->removeAction(a);
+ }
+ }
+ //this deletes all actions in the group also!
+ mOpenWithGroupAV->deleteLater();
+ mOpenWithGroupAV = new QActionGroup(this);
+ QSettings s;
+ QStringList players = s.value("programs_movieviewer/data").toHash().keys();
+ foreach(QString p, players){
+ QAction *a = new QAction(p, mOpenWithGroupAV);
+ mOpenWithMenuAV->addAction(a);
+ mOpenWithMapperAV->setMapping(a, p);
+ connect(a, SIGNAL(triggered()), mOpenWithMapperAV, SLOT(map()));
}
}
diff --git a/shemov.h b/shemov.h
index 8d5ea56..5d6dc46 100644
--- a/shemov.h
+++ b/shemov.h
@@ -51,7 +51,8 @@ class SheMov : public QMainWindow {
void createStatusbar();
void createActions();
void createMenus();
- void createOpenWithMenu();
+ void createOpenWithMenuFS();
+ void createOpenWithMenuAV();
void createExtractMenu();
void writeSettings();
void readSettings();
@@ -89,21 +90,26 @@ class SheMov : public QMainWindow {
QAction *mAboutShemovA;
QAction *mAboutQtA;
QAction *mStatisticsA;
- QAction *mPlaySelectedA;
- QAction *mOpenWithMenuA;
+ QAction *mPlaySelectedFSA;
+ QAction *mPlaySelectedAVA;
+ QAction *mOpenWithMenuFSA;
+ QAction *mOpenWithMenuAVA;
QAction *mRenameMenuA;
QList<QAction*> mExtractToA;
- QActionGroup *mOpenWithGroup;
+ QActionGroup *mOpenWithGroupFS;
+ QActionGroup *mOpenWithGroupAV;
//EndActions
QSignalMapper *mRenameMapper;
QSignalMapper *mExtractMapper;
- QSignalMapper *mOpenWithMapper;
+ QSignalMapper *mOpenWithMapperFS;
+ QSignalMapper *mOpenWithMapperAV;
QMenu *mExtractMenu;
QMenu *mEditFSMenu;
QMenu *mEditArchiveMenu;
- QMenu *mOpenWithMenu;
+ QMenu *mOpenWithMenuFS;
+ QMenu *mOpenWithMenuAV;
QMenu *mRenameMenu;
QAction *mEditFSMenuA;
QAction *mEditArchiveMenuA;