summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2016-09-04 18:31:38 +0200
committerArno <arno@disconnect.de>2016-09-04 18:31:38 +0200
commit8f5b287ea0038a7f1d6bfcd3934c53eb631af72b (patch)
treebadcc4e04957cd81a5b24d070167cc36c8e3f7a9
parent51b8435880013f1d4533379811a9b89c1ea3173c (diff)
downloadShemovCleaner-8f5b287ea0038a7f1d6bfcd3934c53eb631af72b.tar.gz
ShemovCleaner-8f5b287ea0038a7f1d6bfcd3934c53eb631af72b.tar.bz2
ShemovCleaner-8f5b287ea0038a7f1d6bfcd3934c53eb631af72b.zip
Implement Copy&Paste for FileWidget
While at it, do the context menu, too...
-rw-r--r--filewidget.cpp67
-rw-r--r--filewidget.h6
-rw-r--r--shemovcleaner.cpp1
3 files changed, 70 insertions, 4 deletions
diff --git a/filewidget.cpp b/filewidget.cpp
index c5df913..1614d15 100644
--- a/filewidget.cpp
+++ b/filewidget.cpp
@@ -26,6 +26,11 @@
#include <QKeyEvent>
#include <QMessageBox>
#include <QProgressBar>
+#include <QUrl>
+#include <QMimeData>
+#include <QClipboard>
+#include <QApplication>
+#include <QContextMenuEvent>
#include "filewidget.h"
#include "filesorter.h"
@@ -111,6 +116,7 @@ void FileWidget::setupGui(){
connect(mFileView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(fileSelectionChanged(QItemSelection,QItemSelection)));
createActions();
+ mMimeData = new QMimeData;
mFileView->setFocus();
}
@@ -136,6 +142,9 @@ void FileWidget::createActions(){
mPasteA = new QAction(QIcon(":/edit-paste.png"), tr("Paste"), this);
mPasteA->setShortcut(tr("CTRL+V"));
connect(mPasteA, SIGNAL(triggered()), this, SLOT(paste()));
+ mDeleteA = new QAction(QIcon(":/delete.png"), tr("Delete..."), this);
+ mDeleteA->setShortcut(Qt::Key_Delete);
+ connect(mDeleteA, SIGNAL(triggered()), this, SLOT(deleteFiles()));
mPropertiesA = new QAction(QIcon(":/diaper.png"), tr("Properties..."), this);
mPropertiesA->setShortcut(Qt::Key_Return);
connect(mPropertiesA, SIGNAL(triggered()), this, SLOT(properties()));
@@ -153,6 +162,7 @@ void FileWidget::createActions(){
editMenu->addAction(mCopyA);
editMenu->addAction(mCutA);
editMenu->addAction(mPasteA);
+ editMenu->addAction(mDeleteA);
editMenu->addSeparator();
editMenu->addAction(mPropertiesA);
editMenu->addSeparator();
@@ -170,10 +180,13 @@ void FileWidget::createActions(){
mToolBar->addAction(mCopyA);
mToolBar->addAction(mCutA);
mToolBar->addAction(mPasteA);
+ mToolBar->addAction(mDeleteA);
mToolBar->addAction(createSeparator());
mToolBar->addAction(mPropertiesA);
mToolBar->addAction(createSeparator());
mToolBar->addAction(Globals::instance()->action(Globals::ConfigAction));
+
+ addActions(QList<QAction*>() << mRefreshA << mSelDirA << createSeparator() << mDirUpA << mDirBackA << createSeparator() << mCopyA << mCutA << mPasteA << mDeleteA);
}
void FileWidget::fileData(const QString &fullPath, const QString &md5){
@@ -358,15 +371,59 @@ void FileWidget::clearFilter(){
}
void FileWidget::copy(){
-
+ mFileAction = Copy;
+ cutOrCopy();
}
void FileWidget::cut(){
+ mFileAction = Cut;
+ cutOrCopy();
+}
+void FileWidget::cutOrCopy(){
+ mMimeData->clear();
+ QModelIndexList idxL = mFileView->selectionModel()->selectedRows(NameColumn);
+ QList<QUrl> files;
+ foreach(QModelIndex i, idxL){
+ QUrl url = QUrl::fromLocalFile(i.data(FullPathRole).toString());
+ files << url;
+ }
+ mMimeData->setUrls(files);
+ QClipboard *clip = qApp->clipboard();
+ clip->setMimeData(mMimeData);
}
void FileWidget::paste(){
-
+ QClipboard *clip = qApp->clipboard();
+ const QMimeData *md = clip->mimeData();
+ if(md->hasUrls()){
+ qApp->setOverrideCursor(Qt::WaitCursor);
+ QList<QUrl> urls = md->urls();
+ int count = 0;
+ mProgressBar->reset();
+ mProgressBar->setMaximum(urls.count() - 1);
+ foreach (QUrl u, urls){
+ QString path = u.toLocalFile();
+ QString newDir = mDir->text();
+ QFileInfo fi(path);
+ QString newFile = QString("%1/%2").arg(newDir).arg(fi.fileName());
+ mProgressBar->setValue(++count);
+ if(mFileAction == Copy){
+ QString msg = QString(tr("Copying %1").arg(path));
+ emit statusMessage(msg);
+ qApp->processEvents();
+ QFile::copy(path, newFile);
+ }else if(mFileAction == Cut){
+ QString msg = QString(tr("Moving %1").arg(path));
+ emit statusMessage(msg);
+ qApp->processEvents();
+ QFile::rename(path, newFile);
+ }
+ emit statusMessage("Finished Paste!");
+ }
+ gatherData();
+ qApp->restoreOverrideCursor();
+ }
}
@@ -487,3 +544,9 @@ void FileWidget::keyPressEvent(QKeyEvent *e){
exit:
e->accept();
}
+
+void FileWidget::contextMenuEvent(QContextMenuEvent *e){
+ QMenu contextMenu(this);
+ contextMenu.addActions(actions());
+ contextMenu.exec(e->globalPos());
+}
diff --git a/filewidget.h b/filewidget.h
index f4458d5..b2060fb 100644
--- a/filewidget.h
+++ b/filewidget.h
@@ -15,6 +15,7 @@ class QTreeView;
class QProgressBar;
class QKeyEvent;
class QAction;
+class QMimeData;
class VideoSorter;
class FileDisplay;
@@ -26,7 +27,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 };
+ enum FileAction { Copy, Cut, Paste };
explicit FileWidget(QWidget *parent = 0);
QTreeView *fileView() { return mFileView; }
QMenuBar *menuBar() { return mMenuBar; }
@@ -57,6 +58,7 @@ class FileWidget : public QWidget {
protected:
virtual void keyPressEvent(QKeyEvent *e);
+ virtual void contextMenuEvent(QContextMenuEvent *e);
private:
void setupGui();
@@ -68,6 +70,7 @@ class FileWidget : public QWidget {
void readSettings();
void writeSettings();
void deleteRecursive(const QFileInfo &start);
+ void cutOrCopy();
QAction *createSeparator();
QLineEdit *mDir;
QLineEdit *mFilter;
@@ -80,6 +83,7 @@ class FileWidget : public QWidget {
QSqlDatabase mDb;
QSqlQuery mQOrigin;
QSqlQuery mQFiles;
+ QMimeData *mMimeData;
QAction *mSelDirA;
QAction *mRefreshA;
QAction *mDirUpA;
diff --git a/shemovcleaner.cpp b/shemovcleaner.cpp
index a0f7f4a..3ba0802 100644
--- a/shemovcleaner.cpp
+++ b/shemovcleaner.cpp
@@ -120,7 +120,6 @@ void ShemovCleaner::createGlobalActions(){
}
void ShemovCleaner::createActions(){
-
//TorrentWidget
mTorRefreshA = new QAction(QIcon(":/refresh.png"), tr("Refresh"), this);
connect(mTorRefreshA, SIGNAL(triggered()), mTorrentTab, SLOT(gatherData()));