From c3f12950e16f519639cf987baf4f590abe6a0c2e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Enar=20V=C3=A4ikene?= Date: Fri, 2 Dec 2011 09:46:16 +0200 Subject: [PATCH] * Added commands to copy current file name or all names to the clipboard. * Hack to fix '?' characters in file/directory names. Needs testing on Windows. --- src/apps/FileFinder/GUI/gui.cpp | 54 +++++++++++++++++++++++++++---- src/apps/FileFinder/GUI/gui.h | 6 ++++ src/apps/FileFinder/GUI/version.h | 4 +-- 3 files changed, 56 insertions(+), 8 deletions(-) diff --git a/src/apps/FileFinder/GUI/gui.cpp b/src/apps/FileFinder/GUI/gui.cpp index d1f1c4b..e664dd7 100644 --- a/src/apps/FileFinder/GUI/gui.cpp +++ b/src/apps/FileFinder/GUI/gui.cpp @@ -83,6 +83,8 @@ FileFinder::GUI::Module::Module() , mFinder(0) , mOpenFileAction(0) , mOpenDirectoryAction(0) + , mCopyNameAction(0) + , mCopyAllNamesAction(0) , wMain(0) , wDirectory(0) , wRecursive(0) @@ -281,8 +283,7 @@ void FileFinder::GUI::Module::createWidgets() wResults = new QListWidget; wResults->setContextMenuPolicy(Qt::ActionsContextMenu); - wResults->addAction(mOpenFileAction); - wResults->addAction(mOpenDirectoryAction); + wResults->addActions(QList() << mOpenFileAction << mOpenDirectoryAction << mCopyNameAction << mCopyAllNamesAction); connect(wResults, SIGNAL(currentRowChanged(int)), this, SLOT(currentRowChanged(int))); connect(wResults, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(openFile(QModelIndex))); vbox->addWidget(wResults); @@ -315,6 +316,14 @@ void FileFinder::GUI::Module::createActions() mOpenDirectoryAction = new QAction(tr("Open &location"), wMain); mOpenDirectoryAction->setEnabled(false); connect(mOpenDirectoryAction, SIGNAL(triggered()), this, SLOT(openDirectory())); + + mCopyNameAction = new QAction(tr("&Copy name"), wMain); + mCopyNameAction->setEnabled(false); + connect(mCopyNameAction, SIGNAL(triggered()), this, SLOT(copyName())); + + mCopyAllNamesAction = new QAction(tr("Copy &all names"), wMain); + connect(mCopyAllNamesAction, SIGNAL(triggered()), this, SLOT(copyAllNames())); + } void FileFinder::GUI::Module::browseDirectory() @@ -397,19 +406,52 @@ void FileFinder::GUI::Module::currentRowChanged(int currentRow) { mOpenFileAction->setEnabled(currentRow >= 0); mOpenDirectoryAction->setEnabled(currentRow >= 0); + mCopyNameAction->setEnabled(currentRow >= 0); } void FileFinder::GUI::Module::openFile(QModelIndex const & index) { Q_UNUSED(index) - if (wResults->currentItem()) - QDesktopServices::openUrl(QUrl(QString("file:///%1").arg(wResults->currentItem()->text()))); + if (wResults->currentItem()) { + QString t = wResults->currentItem()->text(); + t.replace("?", "\0453f"); + QDesktopServices::openUrl(QUrl::fromEncoded(QString("file:///%1").arg(t).toUtf8())); + } } void FileFinder::GUI::Module::openDirectory() { if (wResults->currentItem()) { - QFileInfo fi(wResults->currentItem()->text()); - QDesktopServices::openUrl(QUrl(QString("file:///%1").arg(fi.path()))); + QString t = wResults->currentItem()->text(); + t.replace("?", "\0453f"); + QFileInfo fi(t); + QDesktopServices::openUrl(QUrl::fromEncoded(QString("file:///%1").arg(fi.path()).toUtf8())); + } +} + +void FileFinder::GUI::Module::copyName() +{ + if (wResults->currentItem()) { + QClipboard * cb = QApplication::clipboard(); + if (cb) + cb->setText(wResults->currentItem()->text()); + } +} + +void FileFinder::GUI::Module::copyAllNames() +{ +#ifdef Q_OS_WIN32 + static char const * const EOLN = "\r\n"; +#else + static char const * const EOLN = "\n"; +#endif + + QString t; + for (int i = 0; i < wResults->count(); ++i) + t.append(wResults->item(i)->text() + EOLN); + if (!t.isEmpty()) { + QClipboard * cb = QApplication::clipboard(); + if (cb) + cb->setText(t); } } diff --git a/src/apps/FileFinder/GUI/gui.h b/src/apps/FileFinder/GUI/gui.h index c8d3633..2c55cc5 100644 --- a/src/apps/FileFinder/GUI/gui.h +++ b/src/apps/FileFinder/GUI/gui.h @@ -112,6 +112,10 @@ private slots: void openDirectory(); + void copyName(); + + void copyAllNames(); + private: // Members @@ -127,6 +131,8 @@ private: // Members /// Actions QAction * mOpenFileAction; QAction * mOpenDirectoryAction; + QAction * mCopyNameAction; + QAction * mCopyAllNamesAction; /// Widgets on the screen Internal::MainWidget * wMain; diff --git a/src/apps/FileFinder/GUI/version.h b/src/apps/FileFinder/GUI/version.h index 481c3f1..248d5e0 100644 --- a/src/apps/FileFinder/GUI/version.h +++ b/src/apps/FileFinder/GUI/version.h @@ -25,12 +25,12 @@ /** * Module/library version number in the form major,minor,release,build */ -#define VER_FILE_VERSION 0,1,4,4 +#define VER_FILE_VERSION 0,1,5,5 /** * Module/library version number in the string format (shall end with \0) */ -#define VER_FILE_VERSION_STR "0.1.4.4\0" +#define VER_FILE_VERSION_STR "0.1.5.5\0" /** * Module/library name (shall end with \0) -- 2.47.0