diff options
author | Arno <am@disconnect.de> | 2012-08-29 17:05:42 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2012-08-29 17:05:42 +0200 |
commit | e36afa2180ef93a1bbf0398b29be3d8c62ab90cc (patch) | |
tree | e113976315ac9793e03c3cfb60129b7110dbf687 | |
parent | 61b5308d704af70fc133b37c21c730387c8a9cc3 (diff) | |
download | SheMov-e36afa2180ef93a1bbf0398b29be3d8c62ab90cc.tar.gz SheMov-e36afa2180ef93a1bbf0398b29be3d8c62ab90cc.tar.bz2 SheMov-e36afa2180ef93a1bbf0398b29be3d8c62ab90cc.zip |
Play selected movies from archive
Well, it started out as a simple new QAction for the archive: Play
selected movies, but ended up in cleaning up the context menu madness in
shemov.cpp. Created a factory for context menu separators...
Well, and we can now play selected movies from the FilesTreeWidget :)
-rw-r--r-- | filestreewidget.cpp | 59 | ||||
-rw-r--r-- | filestreewidget.h | 2 | ||||
-rw-r--r-- | shemov.cpp | 122 | ||||
-rw-r--r-- | shemov.h | 2 |
4 files changed, 100 insertions, 85 deletions
diff --git a/filestreewidget.cpp b/filestreewidget.cpp index 2d36fdc..d510312 100644 --- a/filestreewidget.cpp +++ b/filestreewidget.cpp @@ -283,7 +283,19 @@ void FilesTreeWidget::suggest(){ } QString message = QString(tr("Selected %1 items: %2")).arg(QString::number(selectedFiles.count())).arg(selectedFiles.join(", ")); emit statusMessage(message); - mView->scrollTo(last, QAbstractItemView::PositionAtCenter); + mView->scrollTo(last, QAbstractItemView::PositionAtCenter); +} + +void FilesTreeWidget::playSelected(){ + QStringList fullPaths; + QModelIndexList selected = mView->selectionModel()->selectedRows(); + if(selected.isEmpty()){ + return; + } + foreach(QModelIndex idx, selected){ + fullPaths << idx.data(FilesTreeModel::FullPathRole).toString(); + } + playItems(fullPaths); } void FilesTreeWidget::fileSelectionChanged(){ @@ -316,25 +328,36 @@ void FilesTreeWidget::itemDoubleClicked(const QModelIndex &index){ QString mimeType = Helper::mimeType(file); if(mimeType.startsWith("image")){ mPictureViewer->setFile(file); + mPictureViewer->show(); return; - }else{ - int dvdNo = index.data(FilesTreeModel::DvdNoRole).toInt(); - if(dvdNo != -1){ - QString msg = QString(tr("%1 is archived on DVD %2.")).arg(index.data(FilesTreeModel::FileNameRole).toString()).arg(QString::number(index.data(FilesTreeModel::DvdNoRole).toInt())); - QMessageBox::critical(this, tr("Error"), msg); - return; - } - QPair<QString, QStringList> data = Helper::programData("movieviewer", QString()); - if(data.first.isEmpty()){ - QMessageBox::critical(this, tr("Error"), tr("No viedeo viewer configured.")); - return; - } - QString program = data.first; - QStringList args = data.second; - args << file; - QProcess::startDetached(program, args); + }else if(mimeType.startsWith("video")){ + playItems(QStringList() << file); } - } + }else{ + QString msg = QString(tr("File %1 not found!")).arg(file); + QMessageBox::critical(this, tr("Error"), msg); + } +} + +void FilesTreeWidget::playItems(const QStringList &paths){ + if(paths.isEmpty()){ + return; + } + QStringList existing; + foreach(QString p, paths){ + QFileInfo fi(p); + if(fi.exists()){ + existing << p; + } + } + if(existing.isEmpty()){ + return; + } + QPair<QString, QStringList> pData = Helper::programData("movieviewer", QString()); + QString prog = pData.first; + QStringList args = pData.second; + args << existing; + QProcess::startDetached(prog, args); } FilesTreeView::FilesTreeView(QWidget *parent) : QTreeView(parent), mHoverPics(false){ diff --git a/filestreewidget.h b/filestreewidget.h index 4a7e3f3..f6cd8e8 100644 --- a/filestreewidget.h +++ b/filestreewidget.h @@ -39,6 +39,7 @@ class FilesTreeWidget : public QWidget { void fileProperties(); void edit(int column); void suggest(); + void playSelected(); private slots: void fileSelectionChanged(); @@ -50,6 +51,7 @@ class FilesTreeWidget : public QWidget { void statusMessage(QString); private: + void playItems(const QStringList &paths); FilesTreeView *mView; FilesTreeModel *mModel; FilesTreeSortModel *mProxy; @@ -302,6 +302,12 @@ void SheMov::setSize(qint64 size){ mSelectedSize->setText(val); } +QAction *SheMov::createSeparator(){ + QAction *tmp = new QAction(this); + tmp->setSeparator(true); + return tmp; +} + void SheMov::createStatusbar(){ QLabel *selSizeL = new QLabel(tr("Sel. Size")); mSelectedSize = new QLabel(tr("nothing selected yet")); @@ -587,6 +593,8 @@ void SheMov::createActions(){ mSuggestFileA = new QAction(QIcon(":/analstretcher.png"), tr("Suggest file for burning"), this); connect(mSuggestFileA, SIGNAL(triggered()), mATree->filesWidget(), SLOT(suggest())); mShowTreeGroup->addAction(mSuggestFileA); + mPlaySelectedArchiveFilesA = new QAction(tr("Play selected...."), this); + connect(mPlaySelectedArchiveFilesA, SIGNAL(triggered()), mATree->filesWidget(), SLOT(playSelected())); //picture widget // delete + edit @@ -716,9 +724,7 @@ void SheMov::createMenus(){ mEditAVMenu->addAction(a); } mEditAVMenuA = menuBar()->addMenu(mEditAVMenu); - QAction *sep20 = new QAction(this); - sep20->setSeparator(true); - mEditAVMenu->addAction(sep20); + mEditAVMenu->addSeparator(); mEditAVMenu->addAction(mEditActorsA); mEditAVMenu->addAction(mEditGenresA); @@ -735,28 +741,24 @@ void SheMov::createMenus(){ mTreeViewMenu->addAction(mShowArchivedA); mTreeViewMenu->addAction(mShowAllFilesA); mTreeViewMenu->addAction(mSuggestFileA); - QAction *sep14 = new QAction(this); - sep14->setSeparator(true); - mTreeViewMenu->addAction(sep14); - mTreeHeaderMenu = new QMenu(tr("Show headers"), this); + mTreeViewMenu->addSeparator(); + + mTreeHeaderMenu = new QMenu(tr("Show headers"), this); mTreeHeaderMenu->addActions(mFilesTreeHeadersGroup->actions()); mTreeViewMenu->addMenu(mTreeHeaderMenu); - QAction *sep15 = new QAction(this); - sep15->setSeparator(true); - mTreeViewMenu->addAction(sep15); + mTreeViewMenu->addSeparator(); + mTreeHoverMenu = new QMenu(tr("Hover over"), this); mTreeHoverMenu->addActions(mHoverTreeGroup->actions()); mTreeViewMenu->addMenu(mTreeHoverMenu); mViewAVMenuA = menuBar()->addMenu(mTreeViewMenu); + mTreeViewMenu->addSeparator(); + mTreeFilterMenu = new QMenu(tr("Filter by"), this); mTreeFilterMenu->addActions(mFilterGroup->actions()); - QAction *sep17 = new QAction(this); - sep17->setSeparator(true); - mTreeViewMenu->addAction(sep17); mTreeViewMenu->addMenu(mTreeFilterMenu); - QAction *sep18 = new QAction(this); - sep18->setSeparator(true); - mTreeViewMenu->addAction(sep18); + mTreeViewMenu->addSeparator(); + mTreeViewMenu->addAction(mFilterFavoritesA); //FileSystem view menu @@ -790,36 +792,29 @@ void SheMov::createMenus(){ 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); + mFSWidget->fileView()->addAction(createSeparator()); + mFSWidget->fileView()->addAction(mCdupA); mFSWidget->fileView()->addAction(mBackDirA); - QAction *sep2 = new QAction(this); - sep2->setSeparator(true); - mFSWidget->fileView()->addAction(sep2); - mFSWidget->fileView()->addAction(mMarkFilesA); - mFSWidget->fileView()->addAction(mUnmarkFilesA); - QAction *sep3 = new QAction(this); - sep3->setSeparator(true); - mFSWidget->fileView()->addAction(sep3); + mFSWidget->fileView()->addAction(createSeparator()); + + mFSWidget->fileView()->addAction(mMarkFilesA); //Menu text: Select files... + mFSWidget->fileView()->addAction(mUnmarkFilesA); //Menu text: Deselect all files + mFSWidget->fileView()->addAction(createSeparator()); + mFSWidget->fileView()->addAction(mCreateFolderA); mFSWidget->fileView()->addAction(mDeleteFilesA); mFSWidget->fileView()->addAction(mRenameA); - //mFSWidget->fileView()->addAction(mRenameMenuA); - QAction *sep16 = new QAction(this); - sep16->setSeparator(true); - mFSWidget->fileView()->addAction(sep16); + mFSWidget->fileView()->addAction(createSeparator()); + mFSWidget->fileView()->addAction(mCopyA); mFSWidget->fileView()->addAction(mCutA); mFSWidget->fileView()->addAction(mPasteA); - QAction *sep10 = new QAction(this); - sep10->setSeparator(true); - mFSWidget->fileView()->addAction(sep10); + mFSWidget->fileView()->addAction(createSeparator()); + mFSWidget->fileView()->addAction(mMarkA); - QAction *sep11 = new QAction(this); - sep11->setSeparator(true); - mFSWidget->fileView()->addAction(sep11); + mFSWidget->fileView()->addAction(createSeparator()); + mFSWidget->fileView()->addAction(mNewPicsA); mFSWidget->fileView()->addAction(mArchiveSelectedA); @@ -827,63 +822,56 @@ void SheMov::createMenus(){ mATree->seriesWidget()->seriesTree()->addAction(mNewSeriesA); mATree->seriesWidget()->seriesTree()->addAction(mDeleteFromSeriesA); mATree->seriesWidget()->seriesTree()->addAction(mEditItemA); - QAction *sep4 = new QAction(this); - sep4->setSeparator(true); - mATree->seriesWidget()->seriesTree()->addAction(sep4); + mATree->seriesWidget()->seriesTree()->addAction(createSeparator()); + mOpenWithMenuAV = new QMenu(tr("Open with"), this); mATree->seriesWidget()->seriesTree()->addAction(mPlaySelectedAVA); createOpenWithMenuAV(); mOpenWithMenuAVA = new QAction(tr("Open with"), this); mOpenWithMenuAVA->setMenu(mOpenWithMenuAV); mATree->seriesWidget()->seriesTree()->addAction(mOpenWithMenuAVA); - QAction *sep5 = new QAction(this); - sep5->setSeparator(true); - mATree->seriesWidget()->seriesTree()->addAction(sep5); + mATree->seriesWidget()->seriesTree()->addAction(createSeparator()); + mATree->seriesWidget()->seriesTree()->addAction(mExpandCurrentA); mATree->seriesWidget()->seriesTree()->addAction(mExpandAllSeriesA); mATree->seriesWidget()->seriesTree()->addAction(mCollapseAllSeriesA); - QAction *sep6 = new QAction(this); - sep6->setSeparator(true); - mATree->seriesWidget()->seriesTree()->addAction(sep6); + mATree->seriesWidget()->seriesTree()->addAction(createSeparator()); + mATree->seriesWidget()->seriesTree()->addAction(mAddCoverA); - QAction *sep19 = new QAction(this); - sep19->setSeparator(true); - mATree->seriesWidget()->seriesTree()->addAction(sep19); + mATree->seriesWidget()->seriesTree()->addAction(createSeparator()); + mATree->seriesWidget()->seriesTree()->addAction(mToggleFavoriteA); //ArchiveTreeView fileWidget context menu + mATree->filesWidget()->filesTree()->addAction(mPlaySelectedArchiveFilesA); + mATree->filesWidget()->filesTree()->addAction(createSeparator()); + mATree->filesWidget()->filesTree()->addAction(mMoveToBurnA); mATree->filesWidget()->filesTree()->addAction(mMoveFilesA); - QAction *sep7 = new QAction(this); - sep7->setSeparator(true); - mATree->filesWidget()->filesTree()->addAction(sep7); + mATree->filesWidget()->filesTree()->addAction(createSeparator()); + mATree->filesWidget()->filesTree()->addActions(mEditGroup->actions()); - QAction *sep21 = new QAction(this); - sep21->setSeparator(true); - mATree->filesWidget()->filesTree()->addAction(sep20); + mATree->filesWidget()->filesTree()->addAction(createSeparator()); + mATree->filesWidget()->filesTree()->addAction(mShowAllFilesA); mATree->filesWidget()->filesTree()->addAction(mSuggestFileA); - QAction *sep8 = new QAction(this); - sep8->setSeparator(true); - mATree->filesWidget()->filesTree()->addAction(sep8); + mATree->filesWidget()->filesTree()->addAction(createSeparator()); + mATree->filesWidget()->filesTree()->addAction(mDeleteFilesFromTreeA); - QAction *sep9 = new QAction(this); - sep9->setSeparator(true); - mATree->filesWidget()->filesTree()->addAction(sep9); + mATree->filesWidget()->filesTree()->addAction(createSeparator()); + QMenu *copyMenu = new QMenu(this); copyMenu->addAction(mCopyUnixFullPathA); copyMenu->addAction(mCopyUnixDirA); - QAction *sep13 = new QAction(this); - sep13->setSeparator(true); - copyMenu->addAction(sep13); + copyMenu->addSeparator(); copyMenu->addAction(mCopyWindowsFullPathA); copyMenu->addAction(mCopyWindowsDirA); + QAction *copyAction = new QAction(tr("Copy to clipboard"), this); copyAction->setMenu(copyMenu); mATree->filesWidget()->filesTree()->addAction(copyAction); - QAction *sep12 = new QAction(this); - sep12->setSeparator(true); - mATree->filesWidget()->filesTree()->addAction(sep12); + mATree->filesWidget()->filesTree()->addAction(createSeparator()); + mATree->filesWidget()->filesTree()->addAction(mFilePropertiesA); } @@ -61,6 +61,7 @@ class SheMov : public QMainWindow { void configChanged(); private: + QAction *createSeparator(); void createStatusbar(); void createActions(); void createMenus(); @@ -155,6 +156,7 @@ class SheMov : public QMainWindow { QAction *mCopyWindowsFullPathA; QAction *mCopyWindowsDirA; QAction *mSuggestFileA; + QAction *mPlaySelectedArchiveFilesA; //Filesystem View Actions QActionGroup *mFSHoverGroup; |