diff options
author | Arno <am@disconnect.de> | 2010-05-11 21:29:29 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2010-05-11 21:29:29 +0200 |
commit | d2d6656531e5ec5c088a30ecb93318956e8fb096 (patch) | |
tree | 9216e3afc93e8081d8f4195f947b9c4e96a4b7cb | |
parent | 73a1c0d8c76c5f6bd0213ad9c1bb759b1c86c2f8 (diff) | |
download | SheMov-d2d6656531e5ec5c088a30ecb93318956e8fb096.tar.gz SheMov-d2d6656531e5ec5c088a30ecb93318956e8fb096.tar.bz2 SheMov-d2d6656531e5ec5c088a30ecb93318956e8fb096.zip |
Revamp actions for FilesystemWidget
Make actions for FilesystemWidget more Qt-like. Wrapped Rename menu into
an Action and got rid of the ugly findAction(). Use signal instead.
Also added actions for OpenWith.
-rw-r--r-- | filesystemwidget.cpp | 1 | ||||
-rw-r--r-- | fileview.cpp | 31 | ||||
-rw-r--r-- | fileview.h | 2 | ||||
-rw-r--r-- | shemov.cpp | 97 | ||||
-rw-r--r-- | shemov.h | 8 |
5 files changed, 85 insertions, 54 deletions
diff --git a/filesystemwidget.cpp b/filesystemwidget.cpp index 5ed80e3..6b1e1a8 100644 --- a/filesystemwidget.cpp +++ b/filesystemwidget.cpp @@ -88,6 +88,7 @@ FilesystemWidget::FilesystemWidget(QWidget *parent) : QWidget(parent) { connect(mFileView, SIGNAL(enterPressed(const QModelIndex &)), this, SLOT(fileViewActivated(const QModelIndex &))); connect(mFileView, SIGNAL(upDir()), this, SLOT(parentDir())); connect(mDirEdit, SIGNAL(returnPressed()), this, SLOT(directoryEdited())); + connect(mFileView, SIGNAL(delFiles()), this, SLOT(deleteFiles())); mFileView->resizeColumnToContents(0); diff --git a/fileview.cpp b/fileview.cpp index 4e20e47..649ef3c 100644 --- a/fileview.cpp +++ b/fileview.cpp @@ -30,15 +30,6 @@ FileView::FileView(QWidget *parent) : QTreeView(parent), mDeleteA(0) { connect(mCreateFolderDialog, SIGNAL(accepted()), this, SLOT(doCreateFolder())); } -void FileView::findActions(){ - foreach(QAction *a, actions()){ - if(a->data().toString() == "DA"){ - mDeleteA = a; - } - } - Q_ASSERT(mDeleteA != 0); -} - void FileView::markFiles(){ mMarkDialog->show(); } @@ -109,26 +100,8 @@ void FileView::doCreateFolder(){ void FileView::contextMenuEvent(QContextMenuEvent *e){ QMenu contextMenu(this); - QMenu renameMenu(tr("Rename...")); - QMenu extractMenu(tr("Extract To...")); - int ctr(0); foreach(QAction *a, actions()){ - if(a->data() == "RenameMenu"){ - renameMenu.addAction(a); - }else if(a->data() == "ExtractMenu"){ - extractMenu.addAction(a); - }else{ - contextMenu.addAction(a); - if((ctr == 0) || (ctr == 1) || (ctr == 3)){ - contextMenu.addSeparator(); - } - if(ctr == 8){ - contextMenu.addMenu(&renameMenu); - contextMenu.addSeparator(); - contextMenu.addMenu(&extractMenu); - } - ++ctr; - } + contextMenu.addAction(a); } contextMenu.exec(e->globalPos()); } @@ -145,7 +118,7 @@ void FileView::keyPressEvent(QKeyEvent *e){ e->accept(); break; case Qt::Key_Delete: - mDeleteA->trigger(); + emit delFiles(); e->accept(); break; default: @@ -22,10 +22,10 @@ class FileView : public QTreeView { public: FileView(QWidget *parent = 0); ~FileView() {}; - void findActions(); signals: void upDir(); + void delFiles(); void enterPressed(const QModelIndex &); void statusbarMessage(const QString &); @@ -25,6 +25,7 @@ #include <QFontMetrics> #include <QLocale> #include <QCloseEvent> +#include <QActionGroup> #include <sys/vfs.h> #include "shemov.h" @@ -87,8 +88,6 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla createMenus(); setFsFree(); - mFSWidget->fileView()->findActions(); - connect(mFSWidget->fileView()->selectionModel(), SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), this, SLOT(updateSelectionCount(const QItemSelection &, const QItemSelection &))); connect(mAVWidget->fileView()->selectionModel(), SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), this, SLOT(updateSelectionCount(const QItemSelection &, const QItemSelection &))); connect(mFSWidget, SIGNAL(windowTitle(const QString &)), this, SLOT(newWindowTitle(const QString &))); @@ -260,82 +259,66 @@ void SheMov::createActions(){ //File menu mPlaySelectedA = new QAction(tr("Play selected movies..."), this); connect(mPlaySelectedA, SIGNAL(triggered()), mFSWidget, SLOT(playSelected())); - mFSWidget->fileView()->addAction(mPlaySelectedA); mQuitA = new QAction(tr("Quit"), this); mQuitA->setShortcut(tr("CTRL+q")); //Edit menu (FS) mCdupA = new QAction(tr("Go up"), this); connect(mCdupA, SIGNAL(triggered()), mFSWidget, SLOT(parentDir())); - mFSWidget->fileView()->addAction(mCdupA); connect(mQuitA, SIGNAL(triggered()), qApp, SLOT(quit())); mMarkFilesA = new QAction(tr("Select files..."), this); mMarkFilesA->setShortcut(tr("CTRL++")); - mFSWidget->fileView()->addAction(mMarkFilesA); connect(mMarkFilesA, SIGNAL(triggered()), mFSWidget->fileView(), SLOT(markFiles())); mUnmarkFilesA = new QAction(tr("Deselect all files"), this); mUnmarkFilesA->setShortcut(tr("CTRL+-")); - mFSWidget->fileView()->addAction(mUnmarkFilesA); connect(mUnmarkFilesA, SIGNAL(triggered()), mFSWidget->fileView(), SLOT(unmarkFiles())); mCreateFolderA = new QAction(tr("Create folder..."), this); mCreateFolderA->setShortcut(tr("CTRL+n")); connect(mCreateFolderA, SIGNAL(triggered()), mFSWidget->fileView(), SLOT(createFolder())); - mFSWidget->fileView()->addAction(mCreateFolderA); mDeleteFilesA = new QAction(tr("Delete selected..."), this); mDeleteFilesA->setShortcut(tr("CTRL+d")); - mDeleteFilesA->setData("DA"); connect(mDeleteFilesA, SIGNAL(triggered()), mFSWidget, SLOT(deleteFiles())); - mFSWidget->fileView()->addAction(mDeleteFilesA); mRefreshA = new QAction(tr("Refresh"), this); mRefreshA->setShortcut(Qt::Key_F4); mRefreshA->setData("RE"); connect(mRefreshA, SIGNAL(triggered()), mFSWidget->fileView(), SLOT(refresh())); connect(mRefreshA, SIGNAL(triggered()), this, SLOT(setFsFree())); - mFSWidget->fileView()->addAction(mRefreshA); mCopyA = new QAction(tr("Copy file(s)..."), this); mCopyA->setShortcut(tr("CTRL+v")); connect(mCopyA, SIGNAL(triggered()), mFSWidget, SLOT(copyFiles())); - mFSWidget->fileView()->addAction(mCopyA); mMoveA = new QAction(tr("Move file(s)..."), this); mMoveA->setShortcut(tr("CTRL+m")); connect(mMoveA, SIGNAL(triggered()), mFSWidget, SLOT(moveFiles())); - mFSWidget->fileView()->addAction(mMoveA); mRenameA = new QAction(tr("Rename file..."), this); mRenameA->setShortcut(tr("CTRL+r")); connect(mRenameA, SIGNAL(triggered()), mFSWidget, SLOT(renameFile())); - mFSWidget->fileView()->addAction(mRenameA); mConfigA = new QAction(tr("Configure..."), this); connect(mConfigA, SIGNAL(triggered()), this, SLOT(configure())); mArchiveA = new QAction(tr("Archive files..."), this); mArchiveA->setShortcut(tr("CTRL+a")); connect(mArchiveA, SIGNAL(triggered()), mFSWidget, SLOT(archiveFiles())); - mFSWidget->fileView()->addAction(mArchiveA); //Edit menu rename submenu mTemplateA = new QAction(tr("Set as template"), this); mTemplateA->setShortcut(tr("CTRL+t")); connect(mTemplateA, SIGNAL(triggered()), mFSWidget, SLOT(setTemplate())); mTemplateA->setData("RenameMenu"); - mFSWidget->fileView()->addAction(mTemplateA); mRenameMapper = new QSignalMapper(this); mRenameCoverFA = new QAction(tr("Rename to front cover"), this); mRenameCoverFA->setShortcut(tr("CTRL+f")); connect(mRenameCoverFA, SIGNAL(triggered()), mRenameMapper, SLOT(map())); mRenameMapper->setMapping(mRenameCoverFA, tr("front")); mRenameCoverFA->setData("RenameMenu"); - mFSWidget->fileView()->addAction(mRenameCoverFA); mRenameCoverBA = new QAction(tr("Rename to back cover"), this); mRenameCoverBA->setShortcut(tr("CTRL+b")); connect(mRenameCoverBA, SIGNAL(triggered()), mRenameMapper, SLOT(map())); mRenameMapper->setMapping(mRenameCoverBA, tr("back")); mRenameCoverBA->setData("RenameMenu"); - mFSWidget->fileView()->addAction(mRenameCoverBA); mRenameCoverCA = new QAction(tr("Rename to cover"), this); mRenameCoverCA->setShortcut(tr("CTRL+c")); connect(mRenameCoverCA, SIGNAL(triggered()), mRenameMapper, SLOT(map())); mRenameMapper->setMapping(mRenameCoverCA, tr("cover")); mRenameCoverCA->setData("RenameMenu"); - mFSWidget->fileView()->addAction(mRenameCoverCA); connect(mRenameMapper, SIGNAL(mapped(const QString &)), mFSWidget, SLOT(renameCover(const QString &))); //Edit menu extract submenu @@ -376,6 +359,10 @@ void SheMov::createActions(){ connect(mAboutQtA, SIGNAL(triggered()), qApp, SLOT(aboutQt())); mStatisticsA = new QAction(tr("Some statistics..."), this); connect(mStatisticsA, SIGNAL(triggered()), this, SLOT(showStatistics())); + + // misc + mOpenWithGroup = new QActionGroup(this); + mOpenWithMapper = new QSignalMapper(this); } void SheMov::createMenus(){ @@ -396,12 +383,14 @@ void SheMov::createMenus(){ mEditFSMenu->addAction(mMoveA); mEditFSMenu->addAction(mRenameA); mEditFSMenu->addAction(mArchiveA); - QMenu *renameMenu = new QMenu(tr("&Rename..."), this); - renameMenu->addAction(mTemplateA); - renameMenu->addAction(mRenameCoverFA); - renameMenu->addAction(mRenameCoverBA); - renameMenu->addAction(mRenameCoverCA); - mEditFSMenu->addMenu(renameMenu); + mRenameMenu = new QMenu(tr("&Rename..."), this); + mRenameMenu->addAction(mTemplateA); + mRenameMenu->addAction(mRenameCoverFA); + mRenameMenu->addAction(mRenameCoverBA); + mRenameMenu->addAction(mRenameCoverCA); + mRenameMenuA = new QAction(tr("&Rename"), this); + mRenameMenuA->setMenu(mRenameMenu); + mEditFSMenu->addAction(mRenameMenuA); mEditFSMenu->addSeparator(); mEditFSMenu->addMenu(mExtractMenu); mEditFSMenu->addSeparator(); @@ -431,6 +420,66 @@ void SheMov::createMenus(){ helpMenu->addSeparator(); helpMenu->addAction(mStatisticsA); 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); + QAction *sep1 = new QAction(this); + sep1->setSeparator(true); + mFSWidget->fileView()->addAction(sep1); + mFSWidget->fileView()->addAction(mCdupA); + 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(mCreateFolderA); + mFSWidget->fileView()->addAction(mDeleteFilesA); + mFSWidget->fileView()->addAction(mRefreshA); + mFSWidget->fileView()->addAction(mCopyA); + mFSWidget->fileView()->addAction(mMoveA); + mFSWidget->fileView()->addAction(mRenameMenuA); + QAction *sep4 = new QAction(this); + sep4->setSeparator(true); + mFSWidget->fileView()->addAction(sep4); + mFSWidget->fileView()->addAction(mArchiveA); +} + +void SheMov::createOpenWithMenu(){ + foreach(QAction *a, mOpenWithGroup->actions()){ + mOpenWithMenu->removeAction(a); + mOpenWithGroup->removeAction(a); + delete a; + } + 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 *sep = new QAction(this); + sep->setSeparator(true); + mOpenWithMenu->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())); + } } void SheMov::createExtractMenu(){ @@ -19,6 +19,7 @@ class QLabel; class QItemSelection; class QSignalMapper; class QMenu; +class QActionGroup; class ArchiveEditDialog; class MovieModel; class ListModel; @@ -50,6 +51,7 @@ class SheMov : public QMainWindow { void createStatusbar(); void createActions(); void createMenus(); + void createOpenWithMenu(); void createExtractMenu(); void writeSettings(); void readSettings(); @@ -88,15 +90,21 @@ class SheMov : public QMainWindow { QAction *mAboutQtA; QAction *mStatisticsA; QAction *mPlaySelectedA; + QAction *mOpenWithMenuA; + QAction *mRenameMenuA; QList<QAction*> mExtractToA; + QActionGroup *mOpenWithGroup; //EndActions QSignalMapper *mRenameMapper; QSignalMapper *mExtractMapper; + QSignalMapper *mOpenWithMapper; QMenu *mExtractMenu; QMenu *mEditFSMenu; QMenu *mEditArchiveMenu; + QMenu *mOpenWithMenu; + QMenu *mRenameMenu; QAction *mEditFSMenuA; QAction *mEditArchiveMenuA; |