summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2010-05-11 21:29:29 +0200
committerArno <am@disconnect.de>2010-05-11 21:29:29 +0200
commitd2d6656531e5ec5c088a30ecb93318956e8fb096 (patch)
tree9216e3afc93e8081d8f4195f947b9c4e96a4b7cb
parent73a1c0d8c76c5f6bd0213ad9c1bb759b1c86c2f8 (diff)
downloadSheMov-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.cpp1
-rw-r--r--fileview.cpp31
-rw-r--r--fileview.h2
-rw-r--r--shemov.cpp97
-rw-r--r--shemov.h8
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:
diff --git a/fileview.h b/fileview.h
index 50f176a..da5a483 100644
--- a/fileview.h
+++ b/fileview.h
@@ -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 &);
diff --git a/shemov.cpp b/shemov.cpp
index 53ae8de..4a6c94e 100644
--- a/shemov.cpp
+++ b/shemov.cpp
@@ -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(){
diff --git a/shemov.h b/shemov.h
index 7b79372..8d5ea56 100644
--- a/shemov.h
+++ b/shemov.h
@@ -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;