From 5765bc90a01b743bce0300f968623510c2e8f468 Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@digia.com>
Date: Tue, 26 Mar 2013 12:32:52 +0100
Subject: [PATCH] Introduce private class for BaseFileFind.

Remove circular dependency between ITextEditor and ITextMark.

Change-Id: I2ab17a46e08ef7dd2d112320c8ab6f5d5bd91952
Reviewed-by: Fawzi Mohamed <fawzi.mohamed@digia.com>
---
 .../projectexplorer/allprojectsfind.cpp       |   1 +
 .../projectexplorer/currentprojectfind.cpp    |   1 +
 src/plugins/texteditor/basefilefind.cpp       | 104 +++++++++++-------
 src/plugins/texteditor/basefilefind.h         |  18 +--
 src/plugins/texteditor/findincurrentfile.cpp  |   1 +
 src/plugins/texteditor/findinfiles.cpp        |   7 ++
 src/plugins/texteditor/findinfiles.h          |   7 +-
 src/plugins/texteditor/findinopenfiles.cpp    |   1 +
 8 files changed, 82 insertions(+), 58 deletions(-)

diff --git a/src/plugins/projectexplorer/allprojectsfind.cpp b/src/plugins/projectexplorer/allprojectsfind.cpp
index dbb99c2488..2e7a7c5788 100644
--- a/src/plugins/projectexplorer/allprojectsfind.cpp
+++ b/src/plugins/projectexplorer/allprojectsfind.cpp
@@ -35,6 +35,7 @@
 #include "editorconfiguration.h"
 
 #include <texteditor/itexteditor.h>
+#include <utils/filesearch.h>
 
 #include <QSettings>
 #include <QRegExp>
diff --git a/src/plugins/projectexplorer/currentprojectfind.cpp b/src/plugins/projectexplorer/currentprojectfind.cpp
index 1a068a0b3f..193e41ec0e 100644
--- a/src/plugins/projectexplorer/currentprojectfind.cpp
+++ b/src/plugins/projectexplorer/currentprojectfind.cpp
@@ -35,6 +35,7 @@
 
 #include <coreplugin/idocument.h>
 #include <utils/qtcassert.h>
+#include <utils/filesearch.h>
 
 #include <QDebug>
 #include <QSettings>
diff --git a/src/plugins/texteditor/basefilefind.cpp b/src/plugins/texteditor/basefilefind.cpp
index 6cdf3d1a33..34b26dd93f 100644
--- a/src/plugins/texteditor/basefilefind.cpp
+++ b/src/plugins/texteditor/basefilefind.cpp
@@ -44,33 +44,55 @@
 #include <utils/stylehelper.h>
 #include <utils/fileutils.h>
 #include <utils/qtcassert.h>
+#include <utils/filesearch.h>
 
 #include <QDebug>
 #include <QDirIterator>
 #include <QSettings>
 #include <QHash>
 #include <QPair>
+#include <QStringListModel>
+#include <QFutureWatcher>
+#include <QPointer>
 #include <QFileDialog>
 #include <QCheckBox>
 #include <QComboBox>
+#include <QLabel>
 #include <QHBoxLayout>
 #include <QLabel>
 #include <QPushButton>
 #include <QTextBlock>
 
+namespace TextEditor {
+namespace Internal {
+class BaseFileFindPrivate {
+public:
+    BaseFileFindPrivate() : m_resultLabel(0), m_filterCombo(0) {}
+
+    QMap<QFutureWatcher<Utils::FileSearchResultList> *, QPointer<Find::SearchResult> > m_watchers;
+    QPointer<Find::IFindSupport> m_currentFindSupport;
+
+    QLabel *m_resultLabel;
+    QStringListModel m_filterStrings;
+    QString m_filterSetting;
+    QPointer<QComboBox> m_filterCombo;
+};
+} // namespace Internal
+} // namespace TextEditor
+
 using namespace Utils;
 using namespace Find;
 using namespace TextEditor;
 using namespace TextEditor::Internal;
 
-BaseFileFind::BaseFileFind()
-  : m_resultLabel(0),
-    m_filterCombo(0)
+
+BaseFileFind::BaseFileFind() : d(new BaseFileFindPrivate)
 {
 }
 
 BaseFileFind::~BaseFileFind()
 {
+    delete d;
 }
 
 bool BaseFileFind::isEnabled() const
@@ -82,7 +104,7 @@ void BaseFileFind::cancel()
 {
     SearchResult *search = qobject_cast<SearchResult *>(sender());
     QTC_ASSERT(search, return);
-    QFutureWatcher<FileSearchResultList> *watcher = m_watchers.key(search);
+    QFutureWatcher<FileSearchResultList> *watcher = d->m_watchers.key(search);
     QTC_ASSERT(watcher, return);
     watcher->cancel();
 }
@@ -91,7 +113,7 @@ void BaseFileFind::setPaused(bool paused)
 {
     SearchResult *search = qobject_cast<SearchResult *>(sender());
     QTC_ASSERT(search, return);
-    QFutureWatcher<FileSearchResultList> *watcher = m_watchers.key(search);
+    QFutureWatcher<FileSearchResultList> *watcher = d->m_watchers.key(search);
     QTC_ASSERT(watcher, return);
     if (!paused || watcher->isRunning()) // guard against pausing when the search is finished
         watcher->setPaused(paused);
@@ -100,8 +122,8 @@ void BaseFileFind::setPaused(bool paused)
 QStringList BaseFileFind::fileNameFilters() const
 {
     QStringList filters;
-    if (m_filterCombo && !m_filterCombo->currentText().isEmpty()) {
-        const QStringList parts = m_filterCombo->currentText().split(QLatin1Char(','));
+    if (d->m_filterCombo && !d->m_filterCombo->currentText().isEmpty()) {
+        const QStringList parts = d->m_filterCombo->currentText().split(QLatin1Char(','));
         foreach (const QString &part, parts) {
             const QString filter = part.trimmed();
             if (!filter.isEmpty())
@@ -114,9 +136,9 @@ QStringList BaseFileFind::fileNameFilters() const
 void BaseFileFind::runNewSearch(const QString &txt, Find::FindFlags findFlags,
                                     SearchResultWindow::SearchMode searchMode)
 {
-    m_currentFindSupport = 0;
-    if (m_filterCombo)
-        updateComboEntries(m_filterCombo, true);
+    d->m_currentFindSupport = 0;
+    if (d->m_filterCombo)
+        updateComboEntries(d->m_filterCombo, true);
     SearchResult *search = Find::SearchResultWindow::instance()->startNewSearch(label(),
                            toolTip().arg(Find::IFindFilter::descriptionForFindFlags(findFlags)),
                            txt, searchMode, QString::fromLatin1("TextEditor"));
@@ -150,7 +172,7 @@ void BaseFileFind::runSearch(Find::SearchResult *search)
     connect(search, SIGNAL(countChanged(int)), label, SLOT(updateCount(int)));
     Find::SearchResultWindow::instance()->popup(Core::IOutputPane::Flags(Core::IOutputPane::ModeSwitch | Core::IOutputPane::WithFocus));
     QFutureWatcher<FileSearchResultList> *watcher = new QFutureWatcher<FileSearchResultList>();
-    m_watchers.insert(watcher, search);
+    d->m_watchers.insert(watcher, search);
     watcher->setPendingResultsLimit(1);
     connect(watcher, SIGNAL(resultReadyAt(int)), this, SLOT(displayResult(int)));
     connect(watcher, SIGNAL(finished()), this, SLOT(searchFinished()));
@@ -197,7 +219,7 @@ void BaseFileFind::doReplace(const QString &text,
 void BaseFileFind::displayResult(int index) {
     QFutureWatcher<FileSearchResultList> *watcher =
             static_cast<QFutureWatcher<FileSearchResultList> *>(sender());
-    SearchResult *search = m_watchers.value(watcher);
+    SearchResult *search = d->m_watchers.value(watcher);
     if (!search) {
         // search was removed from search history while the search is running
         watcher->cancel();
@@ -223,47 +245,47 @@ void BaseFileFind::searchFinished()
 {
     QFutureWatcher<FileSearchResultList> *watcher =
             static_cast<QFutureWatcher<FileSearchResultList> *>(sender());
-    SearchResult *search = m_watchers.value(watcher);
+    SearchResult *search = d->m_watchers.value(watcher);
     if (search)
         search->finishSearch(watcher->isCanceled());
-    m_watchers.remove(watcher);
+    d->m_watchers.remove(watcher);
     watcher->deleteLater();
 }
 
 QWidget *BaseFileFind::createPatternWidget()
 {
     QString filterToolTip = tr("List of comma separated wildcard filters");
-    m_filterCombo = new QComboBox;
-    m_filterCombo->setEditable(true);
-    m_filterCombo->setModel(&m_filterStrings);
-    m_filterCombo->setMaxCount(10);
-    m_filterCombo->setMinimumContentsLength(10);
-    m_filterCombo->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLengthWithIcon);
-    m_filterCombo->setInsertPolicy(QComboBox::InsertAtBottom);
-    m_filterCombo->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
-    m_filterCombo->setToolTip(filterToolTip);
-    syncComboWithSettings(m_filterCombo, m_filterSetting);
-    return m_filterCombo;
+    d->m_filterCombo = new QComboBox;
+    d->m_filterCombo->setEditable(true);
+    d->m_filterCombo->setModel(&d->m_filterStrings);
+    d->m_filterCombo->setMaxCount(10);
+    d->m_filterCombo->setMinimumContentsLength(10);
+    d->m_filterCombo->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLengthWithIcon);
+    d->m_filterCombo->setInsertPolicy(QComboBox::InsertAtBottom);
+    d->m_filterCombo->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
+    d->m_filterCombo->setToolTip(filterToolTip);
+    syncComboWithSettings(d->m_filterCombo, d->m_filterSetting);
+    return d->m_filterCombo;
 }
 
 void BaseFileFind::writeCommonSettings(QSettings *settings)
 {
-    settings->setValue(QLatin1String("filters"), m_filterStrings.stringList());
-    if (m_filterCombo)
-        settings->setValue(QLatin1String("currentFilter"), m_filterCombo->currentText());
+    settings->setValue(QLatin1String("filters"), d->m_filterStrings.stringList());
+    if (d->m_filterCombo)
+        settings->setValue(QLatin1String("currentFilter"), d->m_filterCombo->currentText());
 }
 
 void BaseFileFind::readCommonSettings(QSettings *settings, const QString &defaultFilter)
 {
     QStringList filters = settings->value(QLatin1String("filters")).toStringList();
-    m_filterSetting = settings->value(QLatin1String("currentFilter")).toString();
+    d->m_filterSetting = settings->value(QLatin1String("currentFilter")).toString();
     if (filters.isEmpty())
         filters << defaultFilter;
-    if (m_filterSetting.isEmpty())
-        m_filterSetting = filters.first();
-    m_filterStrings.setStringList(filters);
-    if (m_filterCombo)
-        syncComboWithSettings(m_filterCombo, m_filterSetting);
+    if (d->m_filterSetting.isEmpty())
+        d->m_filterSetting = filters.first();
+    d->m_filterStrings.setStringList(filters);
+    if (d->m_filterCombo)
+        syncComboWithSettings(d->m_filterCombo, d->m_filterSetting);
 }
 
 void BaseFileFind::syncComboWithSettings(QComboBox *combo, const QString &setting)
@@ -303,25 +325,25 @@ void BaseFileFind::openEditor(const Find::SearchResultItem &item)
         openedEditor = Core::EditorManager::openEditor(QDir::fromNativeSeparators(item.text),
                                                         Core::Id(), Core::EditorManager::ModeSwitch);
     }
-    if (m_currentFindSupport)
-        m_currentFindSupport->clearResults();
-    m_currentFindSupport = 0;
+    if (d->m_currentFindSupport)
+        d->m_currentFindSupport->clearResults();
+    d->m_currentFindSupport = 0;
     if (!openedEditor)
         return;
     // highlight results
     if (IFindSupport *findSupport = Aggregation::query<IFindSupport>(openedEditor->widget())) {
         if (result) {
             FileFindParameters parameters = result->userData().value<FileFindParameters>();
-            m_currentFindSupport = findSupport;
-            m_currentFindSupport->highlightAll(parameters.text, parameters.flags);
+            d->m_currentFindSupport = findSupport;
+            d->m_currentFindSupport->highlightAll(parameters.text, parameters.flags);
         }
     }
 }
 
 void BaseFileFind::hideHighlightAll(bool visible)
 {
-    if (!visible && m_currentFindSupport)
-        m_currentFindSupport->clearResults();
+    if (!visible && d->m_currentFindSupport)
+        d->m_currentFindSupport->clearResults();
 }
 
 void BaseFileFind::searchAgain()
diff --git a/src/plugins/texteditor/basefilefind.h b/src/plugins/texteditor/basefilefind.h
index e1f489b374..8d84d42b7e 100644
--- a/src/plugins/texteditor/basefilefind.h
+++ b/src/plugins/texteditor/basefilefind.h
@@ -34,12 +34,6 @@
 
 #include <find/ifindfilter.h>
 #include <find/searchresultwindow.h>
-#include <utils/filesearch.h>
-
-#include <QStringListModel>
-
-#include <QFutureWatcher>
-#include <QPointer>
 
 QT_BEGIN_NAMESPACE
 class QLabel;
@@ -50,11 +44,15 @@ namespace Utils {
 class FileIterator;
 }
 namespace Find {
+class SearchResult;
 struct SearchResultItem;
 class IFindSupport;
 }
 
 namespace TextEditor {
+namespace Internal {
+class BaseFileFindPrivate;
+} // namespace Internal
 
 class TEXTEDITOR_EXPORT BaseFileFind : public Find::IFindFilter
 {
@@ -108,13 +106,7 @@ private:
                       Find::SearchResultWindow::SearchMode searchMode);
     void runSearch(Find::SearchResult *search);
 
-    QMap<QFutureWatcher<Utils::FileSearchResultList> *, QPointer<Find::SearchResult> > m_watchers;
-    QPointer<Find::IFindSupport> m_currentFindSupport;
-
-    QLabel *m_resultLabel;
-    QStringListModel m_filterStrings;
-    QString m_filterSetting;
-    QPointer<QComboBox> m_filterCombo;
+    Internal::BaseFileFindPrivate *d;
 };
 
 } // namespace TextEditor
diff --git a/src/plugins/texteditor/findincurrentfile.cpp b/src/plugins/texteditor/findincurrentfile.cpp
index cc4aa876f9..0eb5377ad5 100644
--- a/src/plugins/texteditor/findincurrentfile.cpp
+++ b/src/plugins/texteditor/findincurrentfile.cpp
@@ -30,6 +30,7 @@
 #include "findincurrentfile.h"
 #include "itexteditor.h"
 
+#include <utils/filesearch.h>
 #include <coreplugin/icore.h>
 #include <coreplugin/editormanager/editormanager.h>
 
diff --git a/src/plugins/texteditor/findinfiles.cpp b/src/plugins/texteditor/findinfiles.cpp
index 2759a28786..4ca3a0bf54 100644
--- a/src/plugins/texteditor/findinfiles.cpp
+++ b/src/plugins/texteditor/findinfiles.cpp
@@ -29,6 +29,7 @@
 
 #include "findinfiles.h"
 
+#include <utils/filesearch.h>
 #include <coreplugin/editormanager/editormanager.h>
 
 #include <QDebug>
@@ -37,6 +38,8 @@
 #include <QDirIterator>
 #include <QPushButton>
 #include <QFileDialog>
+#include <QLabel>
+#include <QComboBox>
 #include <QHBoxLayout>
 #include <QVBoxLayout>
 
@@ -49,6 +52,10 @@ FindInFiles::FindInFiles()
 {
 }
 
+FindInFiles::~FindInFiles()
+{
+}
+
 QString FindInFiles::id() const
 {
     return QLatin1String("Files on Disk");
diff --git a/src/plugins/texteditor/findinfiles.h b/src/plugins/texteditor/findinfiles.h
index 90f189dd32..5353a69d41 100644
--- a/src/plugins/texteditor/findinfiles.h
+++ b/src/plugins/texteditor/findinfiles.h
@@ -32,13 +32,11 @@
 
 #include "basefilefind.h"
 
-#include <find/ifindfilter.h>
-
 #include <QPointer>
-#include <QLabel>
-#include <QComboBox>
 #include <QStringListModel>
 
+QT_FORWARD_DECLARE_CLASS(QLabel)
+QT_FORWARD_DECLARE_CLASS(QComboBox)
 
 namespace TextEditor {
 
@@ -48,6 +46,7 @@ class TEXTEDITOR_EXPORT FindInFiles : public BaseFileFind
 
 public:
     FindInFiles();
+    ~FindInFiles();
 
     QString id() const;
     QString displayName() const;
diff --git a/src/plugins/texteditor/findinopenfiles.cpp b/src/plugins/texteditor/findinopenfiles.cpp
index bf6a467d71..c109e17126 100644
--- a/src/plugins/texteditor/findinopenfiles.cpp
+++ b/src/plugins/texteditor/findinopenfiles.cpp
@@ -30,6 +30,7 @@
 #include "findinopenfiles.h"
 #include "itexteditor.h"
 
+#include <utils/filesearch.h>
 #include <coreplugin/icore.h>
 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/editormanager/openeditorsmodel.h>
-- 
GitLab