diff options
author | Arno <arno@disconnect.de> | 2016-09-04 17:06:53 +0200 |
---|---|---|
committer | Arno <arno@disconnect.de> | 2016-09-04 17:06:53 +0200 |
commit | 51b8435880013f1d4533379811a9b89c1ea3173c (patch) | |
tree | ec5642e7b80766af184a9a839c5830ebb40659f7 | |
parent | c930104f93104649ad4ae5b9e23e65a3fa2c058d (diff) | |
download | ShemovCleaner-51b8435880013f1d4533379811a9b89c1ea3173c.tar.gz ShemovCleaner-51b8435880013f1d4533379811a9b89c1ea3173c.tar.bz2 ShemovCleaner-51b8435880013f1d4533379811a9b89c1ea3173c.zip |
Make QActions local to FileWidget
Introduce Globals singleton for global actions.
-rw-r--r-- | ShemovCleaner.pro | 6 | ||||
-rw-r--r-- | edit-cut.png | bin | 0 -> 892 bytes | |||
-rw-r--r-- | edit-paste.png | bin | 0 -> 1406 bytes | |||
-rw-r--r-- | filewidget.cpp | 83 | ||||
-rw-r--r-- | filewidget.h | 36 | ||||
-rw-r--r-- | globals.cpp | 22 | ||||
-rw-r--r-- | globals.h | 25 | ||||
-rw-r--r-- | shemovcleaner.cpp | 72 | ||||
-rw-r--r-- | shemovcleaner.h | 1 | ||||
-rw-r--r-- | shemovcleaner.qrc | 2 |
10 files changed, 184 insertions, 63 deletions
diff --git a/ShemovCleaner.pro b/ShemovCleaner.pro index 7990762..ffdd7e3 100644 --- a/ShemovCleaner.pro +++ b/ShemovCleaner.pro @@ -23,7 +23,8 @@ SOURCES += main.cpp\ configurationwidget.cpp \ filewidget.cpp \ helper.cpp \ - filedisplay.cpp + filedisplay.cpp \ + globals.cpp HEADERS += \ filesorter.h \ @@ -34,7 +35,8 @@ HEADERS += \ configurationwidget.h \ filewidget.h \ helper.h \ - filedisplay.h + filedisplay.h \ + globals.h DISTFILES += diff --git a/edit-cut.png b/edit-cut.png Binary files differnew file mode 100644 index 0000000..0732328 --- /dev/null +++ b/edit-cut.png diff --git a/edit-paste.png b/edit-paste.png Binary files differnew file mode 100644 index 0000000..6788b02 --- /dev/null +++ b/edit-paste.png diff --git a/filewidget.cpp b/filewidget.cpp index c92f2df..c5df913 100644 --- a/filewidget.cpp +++ b/filewidget.cpp @@ -31,6 +31,7 @@ #include "filesorter.h" #include "filedisplay.h" #include "helper.h" +#include "globals.h" FileWidget::FileWidget(QWidget *parent) : QWidget(parent) { setupGui(); @@ -109,9 +110,72 @@ void FileWidget::setupGui(){ setLayout(mainLayout); connect(mFileView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(fileSelectionChanged(QItemSelection,QItemSelection))); + createActions(); mFileView->setFocus(); } +void FileWidget::createActions(){ + mSelDirA = new QAction(QIcon(":/folder.png"), tr("Select Folder..."), this); + mSelDirA->setShortcut(tr("CTRL+O")); + connect(mSelDirA, SIGNAL(triggered()), this, SLOT(selectDir())); + mRefreshA = new QAction(QIcon(":/refresh.png"), tr("Refresh"), this); + mRefreshA->setShortcut(tr("CTRL+R")); + connect(mRefreshA, SIGNAL(triggered()), this, SLOT(gatherData())); + mDirUpA = new QAction(QIcon(":/up_dick.png"), tr("Dir up"), this); + mDirUpA->setShortcut(Qt::Key_Backspace); + connect(mDirUpA, SIGNAL(triggered()), this, SLOT(cdUp())); + mDirBackA = new QAction(QIcon(":/back_dick.png"), tr("Back"), this); + mDirBackA->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Left)); + connect(mDirBackA, SIGNAL(triggered()), this, SLOT(cdLast())); + mCopyA = new QAction(QIcon(":/edit-copy.png"), tr("Copy"), this); + mCopyA->setShortcut(tr("CTRL+C")); + connect(mCopyA, SIGNAL(triggered()), this, SLOT(copy())); + mCutA = new QAction(QIcon(":/edit-cut.png"), tr("Cut"), this); + mCutA->setShortcut(tr("CTRL+X")); + connect(mCutA, SIGNAL(triggered()), this, SLOT(cut())); + mPasteA = new QAction(QIcon(":/edit-paste.png"), tr("Paste"), this); + mPasteA->setShortcut(tr("CTRL+V")); + connect(mPasteA, SIGNAL(triggered()), this, SLOT(paste())); + mPropertiesA = new QAction(QIcon(":/diaper.png"), tr("Properties..."), this); + mPropertiesA->setShortcut(Qt::Key_Return); + connect(mPropertiesA, SIGNAL(triggered()), this, SLOT(properties())); + + QMenu *fileMenu = new QMenu(tr("&File")); + fileMenu->addAction(mSelDirA); + fileMenu->addAction(mRefreshA); + fileMenu->addSeparator(); + fileMenu->addAction(Globals::instance()->action(Globals::QuitAction)); + + QMenu *editMenu = new QMenu(tr("&Edit")); + editMenu->addAction(mDirUpA); + editMenu->addAction(mDirBackA); + editMenu->addSeparator(); + editMenu->addAction(mCopyA); + editMenu->addAction(mCutA); + editMenu->addAction(mPasteA); + editMenu->addSeparator(); + editMenu->addAction(mPropertiesA); + editMenu->addSeparator(); + editMenu->addAction(Globals::instance()->action(Globals::ConfigAction)); + + mMenuBar->addMenu(fileMenu); + mMenuBar->addMenu(editMenu); + + mToolBar->addAction(mRefreshA); + mToolBar->addAction(mSelDirA); + mToolBar->addAction(createSeparator()); + mToolBar->addAction(mDirUpA); + mToolBar->addAction(mDirBackA); + mToolBar->addAction(createSeparator()); + mToolBar->addAction(mCopyA); + mToolBar->addAction(mCutA); + mToolBar->addAction(mPasteA); + mToolBar->addAction(createSeparator()); + mToolBar->addAction(mPropertiesA); + mToolBar->addAction(createSeparator()); + mToolBar->addAction(Globals::instance()->action(Globals::ConfigAction)); +} + void FileWidget::fileData(const QString &fullPath, const QString &md5){ mFileDisplay->setFileData(fullPath, md5); mFileDisplay->show(); @@ -276,6 +340,12 @@ void FileWidget::deleteRecursive(const QFileInfo &start){ } } +QAction *FileWidget::createSeparator(){ + QAction *retval = new QAction(this); + retval->setSeparator(true); + return retval; +} + void FileWidget::filter(){ mProxy->setFilterRegExp(mFilter->text()); mProxy->setFilterKeyColumn(NameColumn); @@ -287,6 +357,19 @@ void FileWidget::clearFilter(){ filter(); } +void FileWidget::copy(){ + +} + +void FileWidget::cut(){ + +} + +void FileWidget::paste(){ + +} + + void FileWidget::fileSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected){ Q_UNUSED(selected); Q_UNUSED(deselected); diff --git a/filewidget.h b/filewidget.h index 11be6c0..f4458d5 100644 --- a/filewidget.h +++ b/filewidget.h @@ -13,9 +13,11 @@ class QLineEdit; class QStandardItemModel; class QTreeView; class QProgressBar; +class QKeyEvent; +class QAction; class VideoSorter; class FileDisplay; -class QKeyEvent; + class FileWidget : public QWidget { Q_OBJECT @@ -24,6 +26,7 @@ class FileWidget : public QWidget { enum CustomRoles { AttrsRole = Qt::UserRole + 1, FullPathRole = Qt::UserRole + 2, DurationRole = Qt::UserRole + 3, MD5SumRole = Qt::UserRole + 4, SecondsRole = Qt::UserRole + 5 }; enum { ColumnCount = 5 }; enum Columns { IconColumn = 0, NameColumn = 1, MimeColumn = 2, DurationColumn = 3, Md5Column = 4 }; + enum FileAction { Copy, Paste }; explicit FileWidget(QWidget *parent = 0); QTreeView *fileView() { return mFileView; } QMenuBar *menuBar() { return mMenuBar; } @@ -44,18 +47,20 @@ class FileWidget : public QWidget { void deleteFiles(); void gatherData(); void selectDir(); - - private slots: - void filter(); - void clearFilter(); void properties(); void properties(const QModelIndex &idx); + void filter(); + void clearFilter(); + void copy(); + void cut(); + void paste(); protected: virtual void keyPressEvent(QKeyEvent *e); private: void setupGui(); + void createActions(); void fileData(const QString &fullPath, const QString &md5); int md5Count(const QString &md5); void readHeaderData(); @@ -63,19 +68,30 @@ class FileWidget : public QWidget { void readSettings(); void writeSettings(); void deleteRecursive(const QFileInfo &start); + QAction *createSeparator(); QLineEdit *mDir; QLineEdit *mFilter; QStandardItemModel *mModel; QTreeView *mFileView; - VideoSorter *mProxy; - QSqlDatabase mDb; - QSqlQuery mQOrigin; - QSqlQuery mQFiles; - FileDisplay *mFileDisplay; QMenuBar *mMenuBar; QToolBar *mToolBar; QProgressBar *mProgressBar; QString mLastDir; + QSqlDatabase mDb; + QSqlQuery mQOrigin; + QSqlQuery mQFiles; + QAction *mSelDirA; + QAction *mRefreshA; + QAction *mDirUpA; + QAction *mDirBackA; + QAction *mPropertiesA; + QAction *mCopyA; + QAction *mCutA; + QAction *mPasteA; + QAction *mDeleteA; + FileDisplay *mFileDisplay; + VideoSorter *mProxy; + int mFileAction; }; #endif // FILEWIDGET_H diff --git a/globals.cpp b/globals.cpp new file mode 100644 index 0000000..2bdb175 --- /dev/null +++ b/globals.cpp @@ -0,0 +1,22 @@ +#include <QAction> + +#include "globals.h" + +Globals *Globals::mInstance = nullptr; + +Globals *Globals::instance(){ + if(!mInstance){ + mInstance = new Globals; + } + return mInstance; +} + +void Globals::addAction(QAction *a){ + mActions.insert(a->data().toInt(), a); +} + +QAction *Globals::action(int actionType){ + return mActions.value(actionType); +} + +Globals::Globals(){} diff --git a/globals.h b/globals.h new file mode 100644 index 0000000..f659088 --- /dev/null +++ b/globals.h @@ -0,0 +1,25 @@ +#ifndef GLOBALS_H +#define GLOBALS_H + +#include <QObject> +#include <QHash> + +class QAction; + +class Globals : public QObject { + Q_OBJECT + public: + enum ActionType { QuitAction = 0, ConfigAction = 1 }; + static Globals *instance(); + void addAction(QAction *a); + QAction *action(int actionType); + + private: + Globals(); + Globals(const Globals &other); + Globals &operator=(const Globals &other); + static Globals *mInstance; + QHash<int, QAction*> mActions; +}; + +#endif // GLOBALS_H diff --git a/shemovcleaner.cpp b/shemovcleaner.cpp index dc45fc6..a0f7f4a 100644 --- a/shemovcleaner.cpp +++ b/shemovcleaner.cpp @@ -19,6 +19,7 @@ #include "filewidget.h" #include "torrentdisplay.h" #include "configurationwidget.h" +#include "globals.h" ShemovCleaner::ShemovCleaner(QWidget *parent, Qt::WindowFlags f) : QMainWindow(parent, f) { //general setup @@ -27,6 +28,7 @@ ShemovCleaner::ShemovCleaner(QWidget *parent, Qt::WindowFlags f) : QMainWindow(p setMinimumHeight(600); openDatabase(); createStatusBar(); + createGlobalActions(); mTorrentTab = new TorrentWidget; mTab = new QTabWidget; @@ -36,8 +38,8 @@ ShemovCleaner::ShemovCleaner(QWidget *parent, Qt::WindowFlags f) : QMainWindow(p mTab->addTab(mTorrentTab, tr("&Torrents")); mTab->addTab(mFileTab, tr("Fi&les")); setCentralWidget(mTab); - createActions(); + connect(mTorrentTab, SIGNAL(statusMessage(QString)), this, SLOT(statusBarMessage(QString))); connect(mTorrentTab, SIGNAL(selectionCountChanged(QString)), this, SLOT(setSelectionCount(QString))); connect(mFileTab, SIGNAL(statusMessage(QString)), this, SLOT(statusBarMessage(QString))); @@ -81,9 +83,12 @@ void ShemovCleaner::tabChanged(int idx){ } void ShemovCleaner::closeEvent(QCloseEvent *e){ - QSettings s; - s.setValue("geometry", saveGeometry()); - QMainWindow::closeEvent(e); + int retval = QMessageBox::question(this, tr("Exit"), tr("Really close?")); + if(retval == QMessageBox::Yes){ + QSettings s; + s.setValue("geometry", saveGeometry()); + QMainWindow::closeEvent(e); + } } void ShemovCleaner::createStatusBar(){ @@ -102,12 +107,19 @@ void ShemovCleaner::createStatusBar(){ statusBar()->addPermanentWidget(mDuration); } -void ShemovCleaner::createActions(){ - //Application +void ShemovCleaner::createGlobalActions(){ QAction *quitA = new QAction(tr("Quit"), this); + quitA->setShortcut(tr("CTRL+Q")); connect(quitA, SIGNAL(triggered()), qApp, SLOT(closeAllWindows())); + quitA->setData(Globals::QuitAction); + Globals::instance()->addAction(quitA); QAction *configA = new QAction(QIcon(":/chastity_belt.png"), tr("Configure..."), this); connect(configA, SIGNAL(triggered()), this, SLOT(configure())); + configA->setData(Globals::ConfigAction); + Globals::instance()->addAction(configA); +} + +void ShemovCleaner::createActions(){ //TorrentWidget mTorRefreshA = new QAction(QIcon(":/refresh.png"), tr("Refresh"), this); @@ -132,12 +144,12 @@ void ShemovCleaner::createActions(){ mTorrentTab->toolBar()->addSeparator(); mTorrentTab->toolBar()->addAction(mTorInfoA); mTorrentTab->toolBar()->addSeparator(); - mTorrentTab->toolBar()->addAction(configA); + //mTorrentTab->toolBar()->addAction(configA); QMenu *torFileM = new QMenu(tr("File")); torFileM->addAction(mTorDirA); torFileM->addAction(mTorRefreshA); torFileM->addSeparator(); - torFileM->addAction(quitA); + //torFileM->addAction(quitA); mTorrentTab->menuBar()->addMenu(torFileM); QMenu *torEditM = new QMenu(tr("Edit")); torEditM->addAction(mTorInfoA); @@ -148,7 +160,7 @@ void ShemovCleaner::createActions(){ torEditM->addAction(mTorMoveA); torEditM->addAction(mTorDeleteA); torEditM->addSeparator(); - torEditM->addAction(configA); + //torEditM->addAction(configA); torEditM->addSeparator(); torEditM->addAction(mTorInfoA); mTorrentTab->menuBar()->addMenu(torEditM); @@ -166,48 +178,6 @@ void ShemovCleaner::createActions(){ mTorCopyToClipA = new QAction(QIcon(":/edit-copy.png"), tr("Copy"), this); connect(mTorCopyToClipA, SIGNAL(triggered()), mTorrentTab->torrentDisplay(), SLOT(copyToClipboard())); mTorrentTab->torrentDisplay()->addAction(mTorCopyToClipA); - - //FileWidget - mFileDirA = new QAction(QIcon(":/folder.png"), tr("Select folder..."), this); - connect(mFileDirA, SIGNAL(triggered()), mFileTab, SLOT(selectDir())); - mFileRefreshA = new QAction(QIcon(":/refresh.png"), tr("Refresh"), this); - connect(mFileRefreshA, SIGNAL(triggered()), mFileTab, SLOT(gatherData())); - mFileUpA = new QAction(QIcon(":/up_dick.png"), tr("Up directory"), this); - connect(mFileUpA, SIGNAL(triggered()), mFileTab, SLOT(cdUp())); - mFileBackDirA = new QAction(QIcon(":/back_dick"), tr("Back"), this); - connect(mFileBackDirA, SIGNAL(triggered()), mFileTab, SLOT(cdLast())); - mFilePropertiesA = new QAction(QIcon(":/diaper.png"), tr("Properties..."), this); - connect(mFilePropertiesA, SIGNAL(triggered()), mFileTab, SLOT(properties())); - mFileDeleteA = new QAction(QIcon(":/delete.png"), tr("Delete..."), this); - connect(mFileDeleteA, SIGNAL(triggered()), mFileTab, SLOT(deleteFiles())); - - mFileTab->toolBar()->addAction(mFileRefreshA); - mFileTab->toolBar()->addAction(mFileDirA); - mFileTab->toolBar()->addAction(createSeparator()); - mFileTab->toolBar()->addAction(mFileUpA); - mFileTab->toolBar()->addAction(mFileBackDirA); - mFileTab->toolBar()->addAction(mFileDeleteA); - mFileTab->toolBar()->addAction(createSeparator()); - mFileTab->toolBar()->addAction(mFilePropertiesA); - mFileTab->toolBar()->addAction(createSeparator()); - mFileTab->toolBar()->addAction(configA); - - QMenu *fileFileM = new QMenu(tr("File")); - fileFileM->addAction(mFileDirA); - fileFileM->addAction(mFileRefreshA); - fileFileM->addSeparator(); - fileFileM->addAction(quitA); - mFileTab->menuBar()->addMenu(fileFileM); - QMenu *fileEditM = new QMenu(tr("Edit")); - fileEditM->addAction(mFileUpA); - fileEditM->addAction(mFileBackDirA); - fileEditM->addSeparator(); - fileEditM->addAction(mFileDeleteA); - fileEditM->addSeparator(); - fileEditM->addAction(configA); - fileEditM->addSeparator(); - fileEditM->addAction(mFilePropertiesA); - mFileTab->menuBar()->addMenu(fileEditM); } void ShemovCleaner::openDatabase(){ diff --git a/shemovcleaner.h b/shemovcleaner.h index 9828e32..c3485bf 100644 --- a/shemovcleaner.h +++ b/shemovcleaner.h @@ -29,6 +29,7 @@ class ShemovCleaner : public QMainWindow { private: void createStatusBar(); + void createGlobalActions(); void createActions(); void openDatabase(); QAction *createSeparator(); diff --git a/shemovcleaner.qrc b/shemovcleaner.qrc index ff20233..ba0f137 100644 --- a/shemovcleaner.qrc +++ b/shemovcleaner.qrc @@ -12,5 +12,7 @@ <file>edit-copy.png</file> <file>up_dick.png</file> <file>back_dick.png</file> + <file>edit-cut.png</file> + <file>edit-paste.png</file> </qresource> </RCC> |