diff options
| -rw-r--r-- | archiveviewwidget.cpp | 50 | ||||
| -rw-r--r-- | archiveviewwidget.h | 4 | ||||
| -rw-r--r-- | shemov.cpp | 101 | ||||
| -rw-r--r-- | shemov.h | 18 | 
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; @@ -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()));  	}  } @@ -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;  | 
