From 6d7bf0f7e721f15f10846e30ed84e5c993e2dfdb Mon Sep 17 00:00:00 2001
From: Orgad Shaneh <orgad.shaneh@audiocodes.com>
Date: Tue, 24 Sep 2013 12:12:09 +0300
Subject: [PATCH] EditorManager: Add "Find in this directory..." for open files

Also add in Projects view

Change-Id: I42145c742a38f5538a4ed44574963136aa18e134
Reviewed-by: Eike Ziller <eike.ziller@digia.com>
---
 .../coreplugin/editormanager/editormanager.cpp       | 12 ++++++++++++
 src/plugins/coreplugin/editormanager/editormanager.h |  2 ++
 src/plugins/coreplugin/fileutils.cpp                 |  5 +++++
 src/plugins/coreplugin/fileutils.h                   |  1 +
 .../projectexplorer/foldernavigationwidget.cpp       |  7 +------
 src/plugins/projectexplorer/foldernavigationwidget.h |  2 --
 src/plugins/projectexplorer/projectexplorer.cpp      |  4 +++-
 src/plugins/texteditor/findinfiles.cpp               |  2 ++
 src/plugins/texteditor/findinfiles.h                 |  2 +-
 9 files changed, 27 insertions(+), 10 deletions(-)

diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index 508f2ce8e8e..4a9890f05ed 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -198,6 +198,7 @@ public:
     QAction *m_closeAllEditorsExceptVisibleContextAction;
     QAction *m_openGraphicalShellAction;
     QAction *m_openTerminalAction;
+    QAction *m_findInDirectoryAction;
     DocumentModel::Entry *m_contextMenuEntry;
 
     Internal::OpenEditorsWindow *m_windowPopup;
@@ -240,6 +241,7 @@ EditorManagerPrivate::EditorManagerPrivate(QWidget *parent) :
     m_closeAllEditorsExceptVisibleContextAction(new QAction(EditorManager::tr("Close All Except Visible"), parent)),
     m_openGraphicalShellAction(new QAction(FileUtils::msgGraphicalShellAction(), parent)),
     m_openTerminalAction(new QAction(FileUtils::msgTerminalAction(), parent)),
+    m_findInDirectoryAction(new QAction(FileUtils::msgFindInDirectory(), parent)),
     m_windowPopup(0),
     m_coreListener(0),
     m_reloadSetting(IDocument::AlwaysAsk),
@@ -345,6 +347,7 @@ EditorManager::EditorManager(QWidget *parent) :
 
     connect(d->m_openGraphicalShellAction, SIGNAL(triggered()), this, SLOT(showInGraphicalShell()));
     connect(d->m_openTerminalAction, SIGNAL(triggered()), this, SLOT(openTerminal()));
+    connect(d->m_findInDirectoryAction, SIGNAL(triggered()), this, SLOT(findInDirectory()));
 
     // Goto Previous In History Action
     cmd = ActionManager::registerAction(d->m_gotoPreviousDocHistoryAction, Constants::GOTOPREVINHISTORY, editDesignContext);
@@ -813,8 +816,10 @@ void EditorManager::addNativeDirActions(QMenu *contextMenu, DocumentModel::Entry
     bool enabled = entry && !entry->fileName().isEmpty();
     d->m_openGraphicalShellAction->setEnabled(enabled);
     d->m_openTerminalAction->setEnabled(enabled);
+    d->m_findInDirectoryAction->setEnabled(enabled);
     contextMenu->addAction(d->m_openGraphicalShellAction);
     contextMenu->addAction(d->m_openTerminalAction);
+    contextMenu->addAction(d->m_findInDirectoryAction);
 }
 
 static void setFocusToEditorViewAndUnmaximizePanes(EditorView *view)
@@ -958,6 +963,13 @@ void EditorManager::openTerminal()
     Core::FileUtils::openTerminal(QFileInfo(d->m_contextMenuEntry->fileName()).path());
 }
 
+void EditorManager::findInDirectory()
+{
+    if (!d->m_contextMenuEntry || d->m_contextMenuEntry->fileName().isEmpty())
+        return;
+    emit m_instance->findOnFileSystemRequest(QFileInfo(d->m_contextMenuEntry->fileName()).path());
+}
+
 void EditorManager::rootDestroyed(QObject *root)
 {
     QWidget *activeWin = qApp->activeWindow();
diff --git a/src/plugins/coreplugin/editormanager/editormanager.h b/src/plugins/coreplugin/editormanager/editormanager.h
index 0648051fb54..5987b9e8b50 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.h
+++ b/src/plugins/coreplugin/editormanager/editormanager.h
@@ -195,6 +195,7 @@ signals:
     void editorOpened(Core::IEditor *editor);
     void editorAboutToClose(Core::IEditor *editor);
     void editorsClosed(QList<Core::IEditor *> editors);
+    void findOnFileSystemRequest(const QString &path);
 
 public slots:
     static bool closeAllEditors(bool askAboutModifiedEditors = true);
@@ -229,6 +230,7 @@ private slots:
 
     static void showInGraphicalShell();
     static void openTerminal();
+    static void findInDirectory();
 
     static void rootDestroyed(QObject *root);
     static void setCurrentEditorFromContextChange();
diff --git a/src/plugins/coreplugin/fileutils.cpp b/src/plugins/coreplugin/fileutils.cpp
index 1d127d679ab..716baa3030e 100644
--- a/src/plugins/coreplugin/fileutils.cpp
+++ b/src/plugins/coreplugin/fileutils.cpp
@@ -140,6 +140,11 @@ void FileUtils::openTerminal(const QString &path)
     QProcess::startDetached(terminalEmulator, args, pwd);
 }
 
+QString FileUtils::msgFindInDirectory()
+{
+    return QApplication::translate("Core::Internal", "Find in This Directory...");
+}
+
 QString FileUtils::msgGraphicalShellAction()
 {
     if (HostOsInfo::isWindowsHost())
diff --git a/src/plugins/coreplugin/fileutils.h b/src/plugins/coreplugin/fileutils.h
index aa025f2a543..92ffa12a89f 100644
--- a/src/plugins/coreplugin/fileutils.h
+++ b/src/plugins/coreplugin/fileutils.h
@@ -43,6 +43,7 @@ struct CORE_EXPORT FileUtils
     // Helpers for common directory browser options.
     static void showInGraphicalShell(QWidget *parent, const QString &path);
     static void openTerminal(const QString &path);
+    static QString msgFindInDirectory();
     // Platform-dependent action descriptions
     static QString msgGraphicalShellAction();
     static QString msgTerminalAction();
diff --git a/src/plugins/projectexplorer/foldernavigationwidget.cpp b/src/plugins/projectexplorer/foldernavigationwidget.cpp
index fea4543db30..6aad3a6b208 100644
--- a/src/plugins/projectexplorer/foldernavigationwidget.cpp
+++ b/src/plugins/projectexplorer/foldernavigationwidget.cpp
@@ -307,7 +307,7 @@ void FolderNavigationWidget::contextMenuEvent(QContextMenuEvent *ev)
     QAction *actionTerminal = menu.addAction(Core::FileUtils::msgTerminalAction());
     actionTerminal->setEnabled(hasCurrentItem);
 
-    QAction *actionFind = menu.addAction(msgFindOnFileSystem());
+    QAction *actionFind = menu.addAction(Core::FileUtils::msgFindInDirectory());
     actionFind->setEnabled(hasCurrentItem);
     // open with...
     if (!m_fileSystemModel->isDir(current)) {
@@ -349,11 +349,6 @@ void FolderNavigationWidget::contextMenuEvent(QContextMenuEvent *ev)
     Core::DocumentManager::executeOpenWithMenuAction(action);
 }
 
-QString FolderNavigationWidget::msgFindOnFileSystem()
-{
-    return tr("Find in this directory...");
-}
-
 void FolderNavigationWidget::setHiddenFilesFilter(bool filter)
 {
     QDir::Filters filters = m_fileSystemModel->filter();
diff --git a/src/plugins/projectexplorer/foldernavigationwidget.h b/src/plugins/projectexplorer/foldernavigationwidget.h
index e154a4a1096..6b6aaed266e 100644
--- a/src/plugins/projectexplorer/foldernavigationwidget.h
+++ b/src/plugins/projectexplorer/foldernavigationwidget.h
@@ -60,8 +60,6 @@ public:
     FolderNavigationWidget(QWidget *parent = 0);
 
     bool autoSynchronization() const;
-
-    static QString msgFindOnFileSystem();
     bool hiddenFilesFilter() const;
 
 public slots:
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index 16c20331175..dad6d1720f8 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -584,8 +584,10 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er
                        projecTreeContext);
     mfileContextMenu->addAction(cmd, Constants::G_FILE_OPEN);
 
-    d->m_searchOnFileSystem = new QAction(FolderNavigationWidget::msgFindOnFileSystem(), this);
+    d->m_searchOnFileSystem = new QAction(FileUtils::msgFindInDirectory(), this);
     cmd = ActionManager::registerAction(d->m_searchOnFileSystem, ProjectExplorer::Constants::SEARCHONFILESYSTEM, projecTreeContext);
+
+    mfileContextMenu->addAction(cmd, Constants::G_FILE_OTHER);
     mfolderContextMenu->addAction(cmd, Constants::G_FOLDER_CONFIG);
     msubProjectContextMenu->addAction(cmd, Constants::G_PROJECT_LAST);
     mprojectContextMenu->addAction(cmd, Constants::G_PROJECT_LAST);
diff --git a/src/plugins/texteditor/findinfiles.cpp b/src/plugins/texteditor/findinfiles.cpp
index 7885d5508a3..e103ced903c 100644
--- a/src/plugins/texteditor/findinfiles.cpp
+++ b/src/plugins/texteditor/findinfiles.cpp
@@ -53,6 +53,8 @@ FindInFiles::FindInFiles()
     m_directory(0)
 {
     m_instance = this;
+    connect(Core::EditorManager::instance(), SIGNAL(findOnFileSystemRequest(QString)),
+            this, SLOT(findOnFileSystem(QString)));
 }
 
 FindInFiles::~FindInFiles()
diff --git a/src/plugins/texteditor/findinfiles.h b/src/plugins/texteditor/findinfiles.h
index 736521bd612..e3c6f9ba634 100644
--- a/src/plugins/texteditor/findinfiles.h
+++ b/src/plugins/texteditor/findinfiles.h
@@ -64,7 +64,7 @@ protected:
     QString label() const;
     QString toolTip() const;
 
-public:
+public slots:
     static void findOnFileSystem(const QString &path);
 
 private slots:
-- 
GitLab