diff options
author | Arno <arno@disconnect.de> | 2016-09-04 18:31:38 +0200 |
---|---|---|
committer | Arno <arno@disconnect.de> | 2016-09-04 18:31:38 +0200 |
commit | 8f5b287ea0038a7f1d6bfcd3934c53eb631af72b (patch) | |
tree | badcc4e04957cd81a5b24d070167cc36c8e3f7a9 /filewidget.cpp | |
parent | 51b8435880013f1d4533379811a9b89c1ea3173c (diff) | |
download | ShemovCleaner-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.cpp | 67 |
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()); +} |