From c49412ac3acd672dd66af43be035e028303e241d Mon Sep 17 00:00:00 2001
From: con <qtc-committer@nokia.com>
Date: Fri, 29 May 2009 16:12:19 +0200
Subject: [PATCH] Prepare for being able to add find flags that are not in
 QTextDocument

---
 src/plugins/bineditor/bineditorplugin.cpp | 24 +++---
 src/plugins/find/basetextfind.cpp         | 26 +++----
 src/plugins/find/basetextfind.h           | 12 +--
 src/plugins/find/currentdocumentfind.cpp  | 10 +--
 src/plugins/find/currentdocumentfind.h    | 12 +--
 src/plugins/find/findplugin.cpp           |  2 +
 src/plugins/find/findplugin.h             |  1 -
 src/plugins/find/findtoolbar.cpp          | 89 +++++++++++++++++++----
 src/plugins/find/findtoolbar.h            | 10 ++-
 src/plugins/find/ifindfilter.h            |  4 +-
 src/plugins/find/ifindsupport.h           | 36 +++++++--
 src/plugins/help/helpfindsupport.cpp      | 28 +++----
 src/plugins/help/helpfindsupport.h        | 20 ++---
 src/plugins/texteditor/basetexteditor.cpp | 10 +--
 src/plugins/texteditor/basetexteditor.h   |  4 +-
 src/plugins/texteditor/basetexteditor_p.h |  2 +-
 16 files changed, 190 insertions(+), 100 deletions(-)

diff --git a/src/plugins/bineditor/bineditorplugin.cpp b/src/plugins/bineditor/bineditorplugin.cpp
index c2e53063c34..4e6cb540639 100644
--- a/src/plugins/bineditor/bineditorplugin.cpp
+++ b/src/plugins/bineditor/bineditorplugin.cpp
@@ -69,51 +69,51 @@ public:
     QString completedFindString() const { return QString(); }
 
 
-    int find(const QByteArray &pattern, int pos, QTextDocument::FindFlags findFlags) {
+    int find(const QByteArray &pattern, int pos, Find::IFindSupport::FindFlags findFlags) {
         if (pattern.isEmpty()) {
             m_editor->setCursorPosition(pos);
             return pos;
         }
 
-        int found = m_editor->find(pattern, pos, findFlags);
+        int found = m_editor->find(pattern, pos, Find::IFindSupport::textDocumentFlagsForFindFlags(findFlags));
         if (found < 0)
             found = m_editor->find(pattern,
-                                   (findFlags & QTextDocument::FindBackward)?m_editor->data().size()-1:0,
-                                   findFlags);
+                                   (findFlags & Find::IFindSupport::FindBackward)?m_editor->data().size()-1:0,
+                                   Find::IFindSupport::textDocumentFlagsForFindFlags(findFlags));
         return found;
     }
 
-    bool findIncremental(const QString &txt, QTextDocument::FindFlags findFlags) {
+    bool findIncremental(const QString &txt, Find::IFindSupport::FindFlags findFlags) {
         QByteArray pattern = txt.toLatin1();
         if (m_incrementalStartPos < 0)
             m_incrementalStartPos = m_editor->selectionStart();
         int pos = m_incrementalStartPos;
-        findFlags &= ~QTextDocument::FindBackward;
+        findFlags &= ~Find::IFindSupport::FindBackward;
         int found =  find(pattern, pos, findFlags);
         if (found >= 0)
-            m_editor->highlightSearchResults(pattern, findFlags);
+            m_editor->highlightSearchResults(pattern, Find::IFindSupport::textDocumentFlagsForFindFlags(findFlags));
         else
             m_editor->highlightSearchResults(QByteArray(), 0);
         return found >= 0;
     }
 
-    bool findStep(const QString &txt, QTextDocument::FindFlags findFlags) {
+    bool findStep(const QString &txt, Find::IFindSupport::FindFlags findFlags) {
         QByteArray pattern = txt.toLatin1();
         bool wasReset = (m_incrementalStartPos < 0);
         int pos = m_editor->cursorPosition();
-        if (findFlags & QTextDocument::FindBackward)
+        if (findFlags & Find::IFindSupport::FindBackward)
             pos = m_editor->selectionStart()-1;
         int found = find(pattern, pos, findFlags);
         if (found)
             m_incrementalStartPos = found;
         if (wasReset && found >= 0)
-            m_editor->highlightSearchResults(pattern, findFlags);
+            m_editor->highlightSearchResults(pattern, Find::IFindSupport::textDocumentFlagsForFindFlags(findFlags));
         return found >= 0;
     }
     bool replaceStep(const QString &, const QString &,
-                     QTextDocument::FindFlags) { return false;}
+                     Find::IFindSupport::FindFlags) { return false;}
     int replaceAll(const QString &, const QString &,
-                   QTextDocument::FindFlags) { return 0; }
+                   Find::IFindSupport::FindFlags) { return 0; }
 
 private:
     BinEditor *m_editor;
diff --git a/src/plugins/find/basetextfind.cpp b/src/plugins/find/basetextfind.cpp
index 6aa62fce2d5..fad7d469aa8 100644
--- a/src/plugins/find/basetextfind.cpp
+++ b/src/plugins/find/basetextfind.cpp
@@ -119,13 +119,13 @@ QString BaseTextFind::completedFindString() const
     return cursor.selectedText();
 }
 
-bool BaseTextFind::findIncremental(const QString &txt, QTextDocument::FindFlags findFlags)
+bool BaseTextFind::findIncremental(const QString &txt, IFindSupport::FindFlags findFlags)
 {
     QTextCursor cursor = textCursor();
     if (m_incrementalStartPos < 0)
         m_incrementalStartPos = cursor.selectionStart();
     cursor.setPosition(m_incrementalStartPos);
-    findFlags &= ~QTextDocument::FindBackward;
+    findFlags &= ~IFindSupport::FindBackward;
     bool found =  find(txt, findFlags, cursor);
     if (found)
         emit highlightAll(txt, findFlags);
@@ -134,7 +134,7 @@ bool BaseTextFind::findIncremental(const QString &txt, QTextDocument::FindFlags
     return found;
 }
 
-bool BaseTextFind::findStep(const QString &txt, QTextDocument::FindFlags findFlags)
+bool BaseTextFind::findStep(const QString &txt, IFindSupport::FindFlags findFlags)
 {
     bool found = find(txt, findFlags, textCursor());
     if (found)
@@ -143,21 +143,21 @@ bool BaseTextFind::findStep(const QString &txt, QTextDocument::FindFlags findFla
 }
 
 bool BaseTextFind::replaceStep(const QString &before, const QString &after,
-    QTextDocument::FindFlags findFlags)
+    IFindSupport::FindFlags findFlags)
 {
     QTextCursor cursor = textCursor();
     if (cursor.selectedText().compare(before,
-            ((findFlags&QTextDocument::FindCaseSensitively)!=0) ? Qt::CaseSensitive : Qt::CaseInsensitive) == 0) {
+            ((findFlags&IFindSupport::FindCaseSensitively)!=0) ? Qt::CaseSensitive : Qt::CaseInsensitive) == 0) {
         int start = cursor.selectionStart();
         cursor.insertText(after);
-        if ((findFlags&QTextDocument::FindBackward) != 0)
+        if ((findFlags&IFindSupport::FindBackward) != 0)
             cursor.setPosition(start);
     }
     return find(before, findFlags, cursor);
 }
 
 int BaseTextFind::replaceAll(const QString &before, const QString &after,
-    QTextDocument::FindFlags findFlags)
+    IFindSupport::FindFlags findFlags)
 {
     QTextCursor editCursor = textCursor();
     if (!m_findScope.isNull())
@@ -167,27 +167,27 @@ int BaseTextFind::replaceAll(const QString &before, const QString &after,
     editCursor.beginEditBlock();
     int count = 0;
     QTextCursor found;
-    found = document()->find(before, editCursor, findFlags);
+    found = document()->find(before, editCursor, IFindSupport::textDocumentFlagsForFindFlags(findFlags));
     while (!found.isNull() && inScope(found.selectionStart(), found.selectionEnd())) {
         ++count;
         editCursor.setPosition(found.selectionStart());
         editCursor.setPosition(found.selectionEnd(), QTextCursor::KeepAnchor);
         editCursor.insertText(after);
-        found = document()->find(before, editCursor, findFlags);
+        found = document()->find(before, editCursor, IFindSupport::textDocumentFlagsForFindFlags(findFlags));
     }
     editCursor.endEditBlock();
     return count;
 }
 
 bool BaseTextFind::find(const QString &txt,
-                               QTextDocument::FindFlags findFlags,
+                               IFindSupport::FindFlags findFlags,
                                QTextCursor start)
 {
     if (txt.isEmpty()) {
         setTextCursor(start);
         return true;
     }
-    QTextCursor found = document()->find(txt, start, findFlags);
+    QTextCursor found = document()->find(txt, start, IFindSupport::textDocumentFlagsForFindFlags(findFlags));
 
     if (!m_findScope.isNull()) {
 
@@ -197,7 +197,7 @@ bool BaseTextFind::find(const QString &txt,
                 start.setPosition(m_findScope.selectionStart());
             else
                 start.setPosition(m_findScope.selectionEnd());
-            found = document()->find(txt, start, findFlags);
+            found = document()->find(txt, start, IFindSupport::textDocumentFlagsForFindFlags(findFlags));
             if (found.isNull() || !inScope(found.selectionStart(), found.selectionEnd()))
                 return false;
         }
@@ -209,7 +209,7 @@ bool BaseTextFind::find(const QString &txt,
                 start.movePosition(QTextCursor::Start);
             else
                 start.movePosition(QTextCursor::End);
-            found = document()->find(txt, start, findFlags);
+            found = document()->find(txt, start, IFindSupport::textDocumentFlagsForFindFlags(findFlags));
             if (found.isNull()) {
                 return false;
             }
diff --git a/src/plugins/find/basetextfind.h b/src/plugins/find/basetextfind.h
index fe01d8a2674..9172f91776b 100644
--- a/src/plugins/find/basetextfind.h
+++ b/src/plugins/find/basetextfind.h
@@ -52,23 +52,23 @@ public:
     QString currentFindString() const;
     QString completedFindString() const;
 
-    bool findIncremental(const QString &txt, QTextDocument::FindFlags findFlags);
-    bool findStep(const QString &txt, QTextDocument::FindFlags findFlags);
+    bool findIncremental(const QString &txt, IFindSupport::FindFlags findFlags);
+    bool findStep(const QString &txt, IFindSupport::FindFlags findFlags);
     bool replaceStep(const QString &before, const QString &after,
-        QTextDocument::FindFlags findFlags);
+        IFindSupport::FindFlags findFlags);
     int replaceAll(const QString &before, const QString &after,
-        QTextDocument::FindFlags findFlags);
+        IFindSupport::FindFlags findFlags);
 
     void defineFindScope();
     void clearFindScope();
 
 signals:
-    void highlightAll(const QString &txt, QTextDocument::FindFlags findFlags);
+    void highlightAll(const QString &txt, Find::IFindSupport::FindFlags findFlags);
     void findScopeChanged(const QTextCursor &);
 
 private:
     bool find(const QString &txt,
-              QTextDocument::FindFlags findFlags,
+              IFindSupport::FindFlags findFlags,
               QTextCursor start);
 
     QTextCursor textCursor() const;
diff --git a/src/plugins/find/currentdocumentfind.cpp b/src/plugins/find/currentdocumentfind.cpp
index 0f0542ebcba..e0d617c4eea 100644
--- a/src/plugins/find/currentdocumentfind.cpp
+++ b/src/plugins/find/currentdocumentfind.cpp
@@ -89,33 +89,33 @@ QString CurrentDocumentFind::completedFindString() const
     return m_currentFind->completedFindString();
 }
 
-void CurrentDocumentFind::highlightAll(const QString &txt, QTextDocument::FindFlags findFlags)
+void CurrentDocumentFind::highlightAll(const QString &txt, IFindSupport::FindFlags findFlags)
 {
     QTC_ASSERT(m_currentFind, return);
     m_currentFind->highlightAll(txt, findFlags);
 }
 
-bool CurrentDocumentFind::findIncremental(const QString &txt, QTextDocument::FindFlags findFlags)
+bool CurrentDocumentFind::findIncremental(const QString &txt, IFindSupport::FindFlags findFlags)
 {
     QTC_ASSERT(m_currentFind, return false);
     return m_currentFind->findIncremental(txt, findFlags);
 }
 
-bool CurrentDocumentFind::findStep(const QString &txt, QTextDocument::FindFlags findFlags)
+bool CurrentDocumentFind::findStep(const QString &txt, IFindSupport::FindFlags findFlags)
 {
     QTC_ASSERT(m_currentFind, return false);
     return m_currentFind->findStep(txt, findFlags);
 }
 
 bool CurrentDocumentFind::replaceStep(const QString &before, const QString &after,
-    QTextDocument::FindFlags findFlags)
+    IFindSupport::FindFlags findFlags)
 {
     QTC_ASSERT(m_currentFind, return false);
     return m_currentFind->replaceStep(before, after, findFlags);
 }
 
 int CurrentDocumentFind::replaceAll(const QString &before, const QString &after,
-    QTextDocument::FindFlags findFlags)
+    IFindSupport::FindFlags findFlags)
 {
     QTC_ASSERT(m_currentFind, return 0);
     return m_currentFind->replaceAll(before, after, findFlags);
diff --git a/src/plugins/find/currentdocumentfind.h b/src/plugins/find/currentdocumentfind.h
index ff2b2c1d097..373d55f383f 100644
--- a/src/plugins/find/currentdocumentfind.h
+++ b/src/plugins/find/currentdocumentfind.h
@@ -30,7 +30,7 @@
 #ifndef CURRENTDOCUMENTFIND_H
 #define CURRENTDOCUMENTFIND_H
 
-#include "ifindfilter.h"
+#include "ifindsupport.h"
 
 #include <QtCore/QPointer>
 #include <QtGui/QWidget>
@@ -52,13 +52,13 @@ public:
     QString completedFindString() const;
 
     bool isEnabled() const;
-    void highlightAll(const QString &txt, QTextDocument::FindFlags findFlags);
-    bool findIncremental(const QString &txt, QTextDocument::FindFlags findFlags);
-    bool findStep(const QString &txt, QTextDocument::FindFlags findFlags);
+    void highlightAll(const QString &txt, IFindSupport::FindFlags findFlags);
+    bool findIncremental(const QString &txt, IFindSupport::FindFlags findFlags);
+    bool findStep(const QString &txt, IFindSupport::FindFlags findFlags);
     bool replaceStep(const QString &before, const QString &after,
-        QTextDocument::FindFlags findFlags);
+        IFindSupport::FindFlags findFlags);
     int replaceAll(const QString &before, const QString &after,
-        QTextDocument::FindFlags findFlags);
+        IFindSupport::FindFlags findFlags);
     void defineFindScope();
     void clearFindScope();
 
diff --git a/src/plugins/find/findplugin.cpp b/src/plugins/find/findplugin.cpp
index 37f85326665..4df824d0858 100644
--- a/src/plugins/find/findplugin.cpp
+++ b/src/plugins/find/findplugin.cpp
@@ -248,6 +248,7 @@ void FindPlugin::writeSettings()
     settings->setValue("FindStrings", m_findCompletions);
     settings->setValue("ReplaceStrings", m_replaceCompletions);
     settings->endGroup();
+    m_findToolBar->writeSettings();
     m_findDialog->writeSettings();
 }
 
@@ -265,6 +266,7 @@ void FindPlugin::readSettings()
     m_findCompletionModel->setStringList(m_findCompletions);
     m_replaceCompletionModel->setStringList(m_replaceCompletions);
     settings->endGroup();
+    m_findToolBar->readSettings();
     m_findDialog->readSettings();
     emit findFlagsChanged(); // would have been done in the setXXX methods above
 }
diff --git a/src/plugins/find/findplugin.h b/src/plugins/find/findplugin.h
index a4c2ce28382..703fee534ad 100644
--- a/src/plugins/find/findplugin.h
+++ b/src/plugins/find/findplugin.h
@@ -30,7 +30,6 @@
 #ifndef FINDPLUGIN_H
 #define FINDPLUGIN_H
 
-#include "ui_findwidget.h"
 #include "ifindfilter.h"
 #include "findtoolbar.h"
 
diff --git a/src/plugins/find/findtoolbar.cpp b/src/plugins/find/findtoolbar.cpp
index 675e5334811..f8d989a8937 100644
--- a/src/plugins/find/findtoolbar.cpp
+++ b/src/plugins/find/findtoolbar.cpp
@@ -202,7 +202,7 @@ FindToolBar::FindToolBar(FindPlugin *plugin, CurrentDocumentFind *currentDocumen
     m_caseSensitiveAction->setChecked(false);
     cmd = am->registerAction(m_caseSensitiveAction, Constants::CASE_SENSITIVE, globalcontext);
     mfind->addAction(cmd, Constants::G_FIND_FLAGS);
-    connect(m_caseSensitiveAction, SIGNAL(triggered(bool)), m_plugin, SLOT(setCaseSensitive(bool)));
+    connect(m_caseSensitiveAction, SIGNAL(triggered(bool)), this, SLOT(setCaseSensitive(bool)));
     lineEditMenu->addAction(m_caseSensitiveAction);
 
     m_wholeWordAction = new QAction(tr("Whole Words Only"), this);
@@ -211,13 +211,12 @@ FindToolBar::FindToolBar(FindPlugin *plugin, CurrentDocumentFind *currentDocumen
     m_wholeWordAction->setChecked(false);
     cmd = am->registerAction(m_wholeWordAction, Constants::WHOLE_WORDS, globalcontext);
     mfind->addAction(cmd, Constants::G_FIND_FLAGS);
-    connect(m_wholeWordAction, SIGNAL(triggered(bool)), m_plugin, SLOT(setWholeWord(bool)));
+    connect(m_wholeWordAction, SIGNAL(triggered(bool)), this, SLOT(setWholeWord(bool)));
     lineEditMenu->addAction(m_wholeWordAction);
 
     connect(m_currentDocumentFind, SIGNAL(changed()), this, SLOT(updateActions()));
     updateActions();
     updateIcons();
-    connect(m_plugin, SIGNAL(findFlagsChanged()), this, SLOT(findFlagsChanged()));
 }
 
 FindToolBar::~FindToolBar()
@@ -314,13 +313,13 @@ void FindToolBar::invokeClearResults()
 
 void FindToolBar::invokeFindNext()
 {
-    m_plugin->setBackward(false);
+    setFindFlag(IFindSupport::FindBackward, false);
     invokeFindStep();
 }
 
 void FindToolBar::invokeFindPrevious()
 {
-    m_plugin->setBackward(true);
+    setFindFlag(IFindSupport::FindBackward, true);
     invokeFindStep();
 }
 
@@ -350,7 +349,7 @@ void FindToolBar::invokeFindStep()
 {
     if (m_currentDocumentFind->isEnabled()) {
         m_plugin->updateFindCompletion(getFindText());
-        m_currentDocumentFind->findStep(getFindText(), m_plugin->findFlags());
+        m_currentDocumentFind->findStep(getFindText(), m_findFlags);
     }
 }
 
@@ -358,7 +357,7 @@ void FindToolBar::invokeFindIncremental()
 {
     if (m_currentDocumentFind->isEnabled()) {
         QString text = getFindText();
-        m_currentDocumentFind->findIncremental(text, m_plugin->findFlags());
+        m_currentDocumentFind->findIncremental(text, m_findFlags);
         if (text.isEmpty())
             m_currentDocumentFind->clearResults();
     }
@@ -366,13 +365,13 @@ void FindToolBar::invokeFindIncremental()
 
 void FindToolBar::invokeReplaceNext()
 {
-    m_plugin->setBackward(false);
+    setFindFlag(IFindSupport::FindBackward, false);
     invokeReplaceStep();
 }
 
 void FindToolBar::invokeReplacePrevious()
 {
-    m_plugin->setBackward(true);
+    setFindFlag(IFindSupport::FindBackward, true);
     invokeReplaceStep();
 }
 
@@ -381,7 +380,7 @@ void FindToolBar::invokeReplaceStep()
     if (m_currentDocumentFind->isEnabled() && m_currentDocumentFind->supportsReplace()) {
         m_plugin->updateFindCompletion(getFindText());
         m_plugin->updateReplaceCompletion(getReplaceText());
-        m_currentDocumentFind->replaceStep(getFindText(), getReplaceText(), m_plugin->findFlags());
+        m_currentDocumentFind->replaceStep(getFindText(), getReplaceText(), m_findFlags);
     }
 }
 
@@ -390,7 +389,7 @@ void FindToolBar::invokeReplaceAll()
     m_plugin->updateFindCompletion(getFindText());
     m_plugin->updateReplaceCompletion(getReplaceText());
     if (m_currentDocumentFind->isEnabled() && m_currentDocumentFind->supportsReplace()) {
-        m_currentDocumentFind->replaceAll(getFindText(), getReplaceText(), m_plugin->findFlags());
+        m_currentDocumentFind->replaceAll(getFindText(), getReplaceText(), m_findFlags);
     }
 }
 
@@ -427,8 +426,8 @@ void FindToolBar::findFlagsChanged()
 
 void FindToolBar::updateIcons()
 {
-    bool casesensitive = m_plugin->findFlags() & QTextDocument::FindCaseSensitively;
-    bool wholewords = m_plugin->findFlags() & QTextDocument::FindWholeWords;
+    bool casesensitive = m_findFlags & QTextDocument::FindCaseSensitively;
+    bool wholewords = m_findFlags & QTextDocument::FindWholeWords;
 
     if (casesensitive && wholewords) {
         QPixmap image = QPixmap(":/find/images/wordandcase.png");
@@ -446,8 +445,8 @@ void FindToolBar::updateIcons()
 
 void FindToolBar::updateFlagMenus()
 {
-    bool wholeOnly = ((m_plugin->findFlags() & QTextDocument::FindWholeWords));
-    bool sensitive = ((m_plugin->findFlags() & QTextDocument::FindCaseSensitively));
+    bool wholeOnly = ((m_findFlags & QTextDocument::FindWholeWords));
+    bool sensitive = ((m_findFlags & QTextDocument::FindCaseSensitively));
     if (m_wholeWordAction->isChecked() != wholeOnly)
         m_wholeWordAction->setChecked(wholeOnly);
     if (m_caseSensitiveAction->isChecked() != sensitive)
@@ -482,7 +481,7 @@ void FindToolBar::openFind()
     if (!text.isEmpty())
         setFindText(text);
     m_currentDocumentFind->defineFindScope();
-    m_currentDocumentFind->highlightAll(getFindText(), m_plugin->findFlags());
+    m_currentDocumentFind->highlightAll(getFindText(), m_findFlags);
     selectFindText();
 }
 
@@ -498,3 +497,61 @@ bool FindToolBar::focusNextPrevChild(bool next)
         return QToolBar::focusNextPrevChild(next);
     return true;
 }
+
+void FindToolBar::writeSettings()
+{
+    QSettings *settings = Core::ICore::instance()->settings();
+    settings->beginGroup("Find");
+    settings->beginGroup("FindToolBar");
+    settings->setValue("Backward", QVariant((m_findFlags & IFindSupport::FindBackward) != 0));
+    settings->setValue("CaseSensitively", QVariant((m_findFlags & IFindSupport::FindCaseSensitively) != 0));
+    settings->setValue("WholeWords", QVariant((m_findFlags & IFindSupport::FindWholeWords) != 0));
+    settings->endGroup();
+    settings->endGroup();
+}
+
+void FindToolBar::readSettings()
+{
+    QSettings *settings = Core::ICore::instance()->settings();
+    settings->beginGroup("Find");
+    settings->beginGroup("FindToolBar");
+    IFindSupport::FindFlags flags;
+    if (settings->value("Backward", false).toBool())
+        flags |= IFindSupport::FindBackward;
+    if (settings->value("CaseSensitively", false).toBool())
+        flags |= IFindSupport::FindCaseSensitively;
+    if (settings->value("WholeWords", false).toBool())
+        flags |= IFindSupport::FindWholeWords;
+    settings->endGroup();
+    settings->endGroup();
+    m_findFlags = flags;
+    findFlagsChanged();
+}
+
+void FindToolBar::setFindFlag(IFindSupport::FindFlag flag, bool enabled)
+{
+    bool hasFlag = hasFindFlag(flag);
+    if ((hasFlag && enabled) || (!hasFlag && !enabled))
+        return;
+    if (enabled)
+        m_findFlags |= flag;
+    else
+        m_findFlags &= ~flag;
+    if (flag != IFindSupport::FindBackward)
+        findFlagsChanged();
+}
+
+bool FindToolBar::hasFindFlag(IFindSupport::FindFlag flag)
+{
+    return m_findFlags & flag;
+}
+
+void FindToolBar::setCaseSensitive(bool sensitive)
+{
+    setFindFlag(IFindSupport::FindCaseSensitively, sensitive);
+}
+
+void FindToolBar::setWholeWord(bool wholeOnly)
+{
+    setFindFlag(IFindSupport::FindWholeWords, wholeOnly);
+}
diff --git a/src/plugins/find/findtoolbar.h b/src/plugins/find/findtoolbar.h
index 6552a946910..c132a5fd88a 100644
--- a/src/plugins/find/findtoolbar.h
+++ b/src/plugins/find/findtoolbar.h
@@ -52,7 +52,8 @@ public:
     FindToolBar(FindPlugin *plugin, CurrentDocumentFind *currentDocumentFind);
     ~FindToolBar();
 
-    void invokeClearResults();
+    void readSettings();
+    void writeSettings();
 
 private slots:
     void invokeFindNext();
@@ -75,11 +76,17 @@ private slots:
     void updateActions();
     void findFlagsChanged();
 
+    void setCaseSensitive(bool sensitive);
+    void setWholeWord(bool wholeOnly);
+
 protected:
     bool focusNextPrevChild(bool next);
 
 private:
+    void invokeClearResults();
     bool setFocusToCurrentFindSupport();
+    void setFindFlag(IFindSupport::FindFlag flag, bool enabled);
+    bool hasFindFlag(IFindSupport::FindFlag flag);
 
     bool eventFilter(QObject *obj, QEvent *event);
     void setFindText(const QString &text);
@@ -104,6 +111,7 @@ private:
     QAction *m_caseSensitiveAction;
     QAction *m_wholeWordAction;
     QWidget *m_widget;
+    IFindSupport::FindFlags m_findFlags;
 };
 
 } // namespace Internal
diff --git a/src/plugins/find/ifindfilter.h b/src/plugins/find/ifindfilter.h
index 69afaa283dd..e8f6b62a6ea 100644
--- a/src/plugins/find/ifindfilter.h
+++ b/src/plugins/find/ifindfilter.h
@@ -30,11 +30,13 @@
 #ifndef IFINDFILTER_H
 #define IFINDFILTER_H
 
-#include "ifindsupport.h"
+#include "find_global.h"
+
 #include <QtCore/QSettings>
 #include <QtGui/QIcon>
 #include <QtGui/QKeySequence>
 #include <QtGui/QWidget>
+#include <QtGui/QTextDocument>
 
 namespace Find {
 
diff --git a/src/plugins/find/ifindsupport.h b/src/plugins/find/ifindsupport.h
index 51ed9cabea5..e4b0dc20a4f 100644
--- a/src/plugins/find/ifindsupport.h
+++ b/src/plugins/find/ifindsupport.h
@@ -31,7 +31,8 @@
 #define IFINDSUPPORT_H
 
 #include "find_global.h"
-
+#include <QtCore/QObject>
+#include <QtCore/QString>
 #include <QtGui/QTextDocument>
 
 namespace Find {
@@ -41,6 +42,12 @@ class FIND_EXPORT IFindSupport : public QObject
     Q_OBJECT
 
 public:
+    enum FindFlag {
+        FindBackward = 0x01,
+        FindCaseSensitively = 0x02,
+        FindWholeWords = 0x04,
+    };
+    Q_DECLARE_FLAGS(FindFlags, FindFlag);
 
     IFindSupport() : QObject(0) {}
     virtual ~IFindSupport() {}
@@ -51,24 +58,37 @@ public:
     virtual QString currentFindString() const = 0;
     virtual QString completedFindString() const = 0;
 
-    virtual void highlightAll(const QString &txt, QTextDocument::FindFlags findFlags);
-    virtual bool findIncremental(const QString &txt, QTextDocument::FindFlags findFlags) = 0;
-    virtual bool findStep(const QString &txt, QTextDocument::FindFlags findFlags) = 0;
+    virtual void highlightAll(const QString &txt, FindFlags findFlags);
+    virtual bool findIncremental(const QString &txt, FindFlags findFlags) = 0;
+    virtual bool findStep(const QString &txt, FindFlags findFlags) = 0;
     virtual bool replaceStep(const QString &before, const QString &after,
-        QTextDocument::FindFlags findFlags) = 0;
+        FindFlags findFlags) = 0;
     virtual int replaceAll(const QString &before, const QString &after,
-        QTextDocument::FindFlags findFlags) = 0;
+        FindFlags findFlags) = 0;
 
     virtual void defineFindScope(){}
     virtual void clearFindScope(){}
 
+    static QTextDocument::FindFlags textDocumentFlagsForFindFlags(IFindSupport::FindFlags flags)
+    {
+        QTextDocument::FindFlags textDocFlags;
+        if (flags&IFindSupport::FindBackward)
+            textDocFlags |= QTextDocument::FindBackward;
+        if (flags&IFindSupport::FindCaseSensitively)
+            textDocFlags |= QTextDocument::FindCaseSensitively;
+        if (flags&IFindSupport::FindWholeWords)
+            textDocFlags |= QTextDocument::FindWholeWords;
+        return textDocFlags;
+    }
+
 signals:
     void changed();
 };
 
-
-inline void IFindSupport::highlightAll(const QString &, QTextDocument::FindFlags) {}
+inline void IFindSupport::highlightAll(const QString &, FindFlags) {}
 
 } // namespace Find
 
+Q_DECLARE_OPERATORS_FOR_FLAGS(Find::IFindSupport::FindFlags)
+
 #endif // IFINDSUPPORT_H
diff --git a/src/plugins/help/helpfindsupport.cpp b/src/plugins/help/helpfindsupport.cpp
index 0f2b9cf887f..058a77fb2c6 100644
--- a/src/plugins/help/helpfindsupport.cpp
+++ b/src/plugins/help/helpfindsupport.cpp
@@ -66,17 +66,17 @@ QString HelpFindSupport::completedFindString() const
     return QString();
 }
 
-bool HelpFindSupport::findIncremental(const QString &txt, QTextDocument::FindFlags findFlags)
+bool HelpFindSupport::findIncremental(const QString &txt, Find::IFindSupport::FindFlags findFlags)
 {
     QTC_ASSERT(m_centralWidget, return false);
-    findFlags &= ~QTextDocument::FindBackward;
-    return m_centralWidget->find(txt, findFlags, true);
+    findFlags &= ~Find::IFindSupport::FindBackward;
+    return m_centralWidget->find(txt, Find::IFindSupport::textDocumentFlagsForFindFlags(findFlags), true);
 }
 
-bool HelpFindSupport::findStep(const QString &txt, QTextDocument::FindFlags findFlags)
+bool HelpFindSupport::findStep(const QString &txt, Find::IFindSupport::FindFlags findFlags)
 {
     QTC_ASSERT(m_centralWidget, return false);
-    return m_centralWidget->find(txt, findFlags, false);
+    return m_centralWidget->find(txt, Find::IFindSupport::textDocumentFlagsForFindFlags(findFlags), false);
 }
 
 HelpViewerFindSupport::HelpViewerFindSupport(HelpViewer *viewer)
@@ -94,28 +94,28 @@ QString HelpViewerFindSupport::currentFindString() const
 #endif
 }
 
-bool HelpViewerFindSupport::findIncremental(const QString &txt, QTextDocument::FindFlags findFlags)
+bool HelpViewerFindSupport::findIncremental(const QString &txt, Find::IFindSupport::FindFlags findFlags)
 {
     QTC_ASSERT(m_viewer, return false);
-    findFlags &= ~QTextDocument::FindBackward;
+    findFlags &= ~Find::IFindSupport::FindBackward;
     return find(txt, findFlags, true);
 }
 
-bool HelpViewerFindSupport::findStep(const QString &txt, QTextDocument::FindFlags findFlags)
+bool HelpViewerFindSupport::findStep(const QString &txt, Find::IFindSupport::FindFlags findFlags)
 {
     QTC_ASSERT(m_viewer, return false);
     return find(txt, findFlags, false);
 }
 
-bool HelpViewerFindSupport::find(const QString &txt, QTextDocument::FindFlags findFlags, bool incremental)
+bool HelpViewerFindSupport::find(const QString &txt, Find::IFindSupport::FindFlags findFlags, bool incremental)
 {
     QTC_ASSERT(m_viewer, return false);
 #if !defined(QT_NO_WEBKIT)
     Q_UNUSED(incremental);
     QWebPage::FindFlags options = QWebPage::FindWrapsAroundDocument;
-    if (findFlags & QTextDocument::FindBackward)
+    if (findFlags & Find::IFindSupport::FindBackward)
         options |= QWebPage::FindBackward;
-    if (findFlags & QTextDocument::FindCaseSensitively)
+    if (findFlags & Find::IFindSupport::FindCaseSensitively)
         options |= QWebPage::FindCaseSensitively;
 
     return m_viewer->findText(txt, options);
@@ -129,13 +129,13 @@ bool HelpViewerFindSupport::find(const QString &txt, QTextDocument::FindFlags fi
     if (incremental)
         cursor.setPosition(cursor.selectionStart());
 
-    QTextCursor found = doc->find(txt, cursor, findFlags);
+    QTextCursor found = doc->find(txt, cursor, Find::IFindSupport::textDocumentFlagsForFindFlags(findFlags));
     if (found.isNull()) {
-        if ((findFlags&QTextDocument::FindBackward) == 0)
+        if ((findFlags&Find::IFindSupport::FindBackward) == 0)
             cursor.movePosition(QTextCursor::Start);
         else
             cursor.movePosition(QTextCursor::End);
-        found = doc->find(txt, cursor, findFlags);
+        found = doc->find(txt, cursor, Find::IFindSupport::textDocumentFlagsForFindFlags(findFlags));
         if (found.isNull()) {
             return false;
         }
diff --git a/src/plugins/help/helpfindsupport.h b/src/plugins/help/helpfindsupport.h
index 1a5da5490cb..d96f7b74332 100644
--- a/src/plugins/help/helpfindsupport.h
+++ b/src/plugins/help/helpfindsupport.h
@@ -55,15 +55,15 @@ public:
     QString currentFindString() const;
     QString completedFindString() const;
 
-    bool findIncremental(const QString &txt, QTextDocument::FindFlags findFlags);
-    bool findStep(const QString &txt, QTextDocument::FindFlags findFlags);
+    bool findIncremental(const QString &txt, Find::IFindSupport::FindFlags findFlags);
+    bool findStep(const QString &txt, Find::IFindSupport::FindFlags findFlags);
     bool replaceStep(const QString &, const QString &,
-        QTextDocument::FindFlags ) { return false; }
+        Find::IFindSupport::FindFlags ) { return false; }
     int replaceAll(const QString &, const QString &,
-        QTextDocument::FindFlags ) { return 0; }
+        Find::IFindSupport::FindFlags ) { return 0; }
 
 private:
-    bool find(const QString &ttf, QTextDocument::FindFlags findFlags, bool incremental);
+    bool find(const QString &ttf, Find::IFindSupport::FindFlags findFlags, bool incremental);
 
     CentralWidget *m_centralWidget;
 };
@@ -81,15 +81,15 @@ public:
     QString currentFindString() const;
     QString completedFindString() const { return QString(); }
 
-    bool findIncremental(const QString &txt, QTextDocument::FindFlags findFlags);
-    bool findStep(const QString &txt, QTextDocument::FindFlags findFlags);
+    bool findIncremental(const QString &txt, Find::IFindSupport::FindFlags findFlags);
+    bool findStep(const QString &txt, Find::IFindSupport::FindFlags findFlags);
     bool replaceStep(const QString &, const QString &,
-        QTextDocument::FindFlags ) { return false; }
+        Find::IFindSupport::FindFlags ) { return false; }
     int replaceAll(const QString &, const QString &,
-        QTextDocument::FindFlags ) { return 0; }
+        Find::IFindSupport::FindFlags ) { return 0; }
 
 private:
-    bool find(const QString &ttf, QTextDocument::FindFlags findFlags, bool incremental);
+    bool find(const QString &ttf, Find::IFindSupport::FindFlags findFlags, bool incremental);
     HelpViewer *m_viewer;
 };
 
diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index b2e06c67fac..170efaa8cb8 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -1630,7 +1630,7 @@ void BaseTextEditorPrivate::highlightSearchResults(const QTextBlock &block,
         if (idx < 0)
             break;
         int l = m_searchExpr.matchedLength();
-        if ((m_findFlags & QTextDocument::FindWholeWords)
+        if ((m_findFlags & Find::IFindSupport::FindWholeWords)
             && ((idx && text.at(idx-1).isLetterOrNumber())
                 || (idx + l < text.length() && text.at(idx + l).isLetterOrNumber())))
             continue;
@@ -3441,13 +3441,13 @@ TextBlockUserData::MatchType TextBlockUserData::matchCursorForward(QTextCursor *
 }
 
 
-void BaseTextEditor::highlightSearchResults(const QString &txt, QTextDocument::FindFlags findFlags)
+void BaseTextEditor::highlightSearchResults(const QString &txt, Find::IFindSupport::FindFlags findFlags)
 {
     if (d->m_searchExpr.pattern() == txt)
         return;
     d->m_searchExpr.setPattern(txt);
     d->m_searchExpr.setPatternSyntax(QRegExp::FixedString);
-    d->m_searchExpr.setCaseSensitivity((findFlags & QTextDocument::FindCaseSensitively) ?
+    d->m_searchExpr.setCaseSensitivity((findFlags & Find::IFindSupport::FindCaseSensitively) ?
                                        Qt::CaseSensitive : Qt::CaseInsensitive);
     d->m_findFlags = findFlags;
     viewport()->update();
@@ -4036,8 +4036,8 @@ BaseTextEditorEditable::BaseTextEditorEditable(BaseTextEditor *editor)
     using namespace Find;
     Aggregation::Aggregate *aggregate = new Aggregation::Aggregate;
     BaseTextFind *baseTextFind = new BaseTextFind(editor);
-    connect(baseTextFind, SIGNAL(highlightAll(QString, QTextDocument::FindFlags)),
-            editor, SLOT(highlightSearchResults(QString, QTextDocument::FindFlags)));
+    connect(baseTextFind, SIGNAL(highlightAll(QString, Find::IFindSupport::FindFlags)),
+            editor, SLOT(highlightSearchResults(QString, Find::IFindSupport::FindFlags)));
     connect(baseTextFind, SIGNAL(findScopeChanged(QTextCursor)), editor, SLOT(setFindScope(QTextCursor)));
     aggregate->add(baseTextFind);
     aggregate->add(editor);
diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h
index 612a9fe4efa..dd1c0eaa695 100644
--- a/src/plugins/texteditor/basetexteditor.h
+++ b/src/plugins/texteditor/basetexteditor.h
@@ -34,6 +34,8 @@
 #include "tabsettings.h"
 #include "itexteditable.h"
 
+#include <find/ifindsupport.h>
+
 #include <QtGui/QPlainTextEdit>
 #include <QtGui/QLabel>
 #include <QtGui/QKeyEvent>
@@ -428,7 +430,7 @@ private slots:
     void editorContentsChange(int position, int charsRemoved, int charsAdded);
     void memorizeCursorPosition();
     void restoreCursorPosition();
-    void highlightSearchResults(const QString &txt, QTextDocument::FindFlags findFlags);
+    void highlightSearchResults(const QString &txt, Find::IFindSupport::FindFlags findFlags);
     void setFindScope(const QTextCursor &);
     void currentEditorChanged(Core::IEditor *editor);
 
diff --git a/src/plugins/texteditor/basetexteditor_p.h b/src/plugins/texteditor/basetexteditor_p.h
index 86f43ff22d5..8c65269a7fc 100644
--- a/src/plugins/texteditor/basetexteditor_p.h
+++ b/src/plugins/texteditor/basetexteditor_p.h
@@ -202,7 +202,7 @@ public:
     QTextCharFormat m_ifdefedOutFormat;
 
     QRegExp m_searchExpr;
-    QTextDocument::FindFlags m_findFlags;
+    Find::IFindSupport::FindFlags m_findFlags;
     QTextCharFormat m_searchResultFormat;
     QTextCharFormat m_searchScopeFormat;
     QTextCharFormat m_currentLineFormat;
-- 
GitLab