summaryrefslogtreecommitdiffstats
path: root/filewidget.cpp
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 /filewidget.cpp
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...
Diffstat (limited to 'filewidget.cpp')
-rw-r--r--filewidget.cpp67
1 files changed, 65 insertions, 2 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());
+}