summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2016-09-04 17:06:53 +0200
committerArno <arno@disconnect.de>2016-09-04 17:06:53 +0200
commit51b8435880013f1d4533379811a9b89c1ea3173c (patch)
treeec5642e7b80766af184a9a839c5830ebb40659f7
parentc930104f93104649ad4ae5b9e23e65a3fa2c058d (diff)
downloadShemovCleaner-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.pro6
-rw-r--r--edit-cut.pngbin0 -> 892 bytes
-rw-r--r--edit-paste.pngbin0 -> 1406 bytes
-rw-r--r--filewidget.cpp83
-rw-r--r--filewidget.h36
-rw-r--r--globals.cpp22
-rw-r--r--globals.h25
-rw-r--r--shemovcleaner.cpp72
-rw-r--r--shemovcleaner.h1
-rw-r--r--shemovcleaner.qrc2
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
new file mode 100644
index 0000000..0732328
--- /dev/null
+++ b/edit-cut.png
Binary files differ
diff --git a/edit-paste.png b/edit-paste.png
new file mode 100644
index 0000000..6788b02
--- /dev/null
+++ b/edit-paste.png
Binary files differ
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>