From f6482a3871be5ed657e693d8fb535f6a15ce3901 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Aum=C3=BCller?= <aumuell@reserv.at>
Date: Thu, 21 Jan 2010 17:23:31 +0100
Subject: [PATCH] fakevim: implement incremental backward search '?' using Find
 plugin

Merge-request: 97
Reviewed-by: hjk <qtc-committer@nokia.com>
---
 src/plugins/bineditor/bineditorplugin.cpp |  1 -
 src/plugins/fakevim/fakevimplugin.cpp     | 10 ++++++----
 src/plugins/find/basetextfind.cpp         |  1 -
 src/plugins/find/findplugin.cpp           |  8 ++++++++
 src/plugins/find/findplugin.h             |  6 ++++++
 src/plugins/find/findtoolbar.cpp          | 11 +++++++++++
 src/plugins/find/findtoolbar.h            |  3 +++
 7 files changed, 34 insertions(+), 6 deletions(-)

diff --git a/src/plugins/bineditor/bineditorplugin.cpp b/src/plugins/bineditor/bineditorplugin.cpp
index 5e85b641fd1..4faeccf10aa 100644
--- a/src/plugins/bineditor/bineditorplugin.cpp
+++ b/src/plugins/bineditor/bineditorplugin.cpp
@@ -103,7 +103,6 @@ public:
             m_incrementalStartPos = m_editor->selectionStart();
         if (m_contPos == -1)
             m_contPos = m_incrementalStartPos;
-        findFlags &= ~Find::IFindSupport::FindBackward;
         int found = find(pattern, m_contPos, findFlags);
         Result result;
         if (found >= 0) {
diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp
index a3d7f549973..418127f94fa 100644
--- a/src/plugins/fakevim/fakevimplugin.cpp
+++ b/src/plugins/fakevim/fakevimplugin.cpp
@@ -416,10 +416,12 @@ void FakeVimPluginPrivate::windowCommand(int key)
 
 void FakeVimPluginPrivate::find(bool reverse)
 {
-    Q_UNUSED(reverse)  // TODO: Creator needs an action for find in reverse.
-    if (Find::Internal::FindPlugin::instance())
-        Find::Internal::FindPlugin::instance()->setUseFakeVim(true);
-    triggerAction(Find::Constants::FIND_IN_DOCUMENT);
+    if (Find::Internal::FindPlugin *plugin = Find::Internal::FindPlugin::instance()) {
+        plugin->setUseFakeVim(true);
+        plugin->openFindToolBar(reverse
+                ? Find::Internal::FindPlugin::FindBackward
+                : Find::Internal::FindPlugin::FindForward);
+    }
 }
 
 void FakeVimPluginPrivate::findNext(bool reverse)
diff --git a/src/plugins/find/basetextfind.cpp b/src/plugins/find/basetextfind.cpp
index 5c7d9be20cf..dcafd816936 100644
--- a/src/plugins/find/basetextfind.cpp
+++ b/src/plugins/find/basetextfind.cpp
@@ -132,7 +132,6 @@ IFindSupport::Result BaseTextFind::findIncremental(const QString &txt, IFindSupp
     if (m_incrementalStartPos < 0)
         m_incrementalStartPos = cursor.selectionStart();
     cursor.setPosition(m_incrementalStartPos);
-    findFlags &= ~IFindSupport::FindBackward;
     bool found =  find(txt, findFlags, cursor);
     if (found)
         emit highlightAll(txt, findFlags);
diff --git a/src/plugins/find/findplugin.cpp b/src/plugins/find/findplugin.cpp
index 20f318fdaa8..0da0b0934e2 100644
--- a/src/plugins/find/findplugin.cpp
+++ b/src/plugins/find/findplugin.cpp
@@ -314,4 +314,12 @@ void FindPlugin::setUseFakeVim(bool on)
         m_findToolBar->setUseFakeVim(on);
 }
 
+void FindPlugin::openFindToolBar(FindDirection direction)
+{
+    if (m_findToolBar) {
+        m_findToolBar->setBackward(direction == FindBackward);
+        m_findToolBar->openFindToolBar();
+    }
+}
+
 Q_EXPORT_PLUGIN(FindPlugin)
diff --git a/src/plugins/find/findplugin.h b/src/plugins/find/findplugin.h
index 2183745bab0..d0292810418 100644
--- a/src/plugins/find/findplugin.h
+++ b/src/plugins/find/findplugin.h
@@ -56,6 +56,11 @@ public:
     virtual ~FindPlugin();
     static FindPlugin *instance();
 
+    enum FindDirection {
+        FindForward,
+        FindBackward
+    };
+
     // IPlugin
     bool initialize(const QStringList &arguments, QString *error_message);
     void extensionsInitialized();
@@ -67,6 +72,7 @@ public:
     QStringListModel *findCompletionModel() { return m_findCompletionModel; }
     QStringListModel *replaceCompletionModel() { return m_replaceCompletionModel; }
     void setUseFakeVim(bool on);
+    void openFindToolBar(FindDirection direction);
 
 public slots:
     void setCaseSensitive(bool sensitive);
diff --git a/src/plugins/find/findtoolbar.cpp b/src/plugins/find/findtoolbar.cpp
index 0ca3b43e684..015b864a810 100644
--- a/src/plugins/find/findtoolbar.cpp
+++ b/src/plugins/find/findtoolbar.cpp
@@ -571,6 +571,12 @@ Core::FindToolBarPlaceHolder *FindToolBar::findToolBarPlaceHolder() const
 }
 
 void FindToolBar::openFind()
+{
+    setBackward(false);
+    openFindToolBar();
+}
+
+void FindToolBar::openFindToolBar()
 {
     if (!m_currentDocumentFind->candidateIsEnabled())
         return;
@@ -676,3 +682,8 @@ void FindToolBar::setRegularExpressions(bool regexp)
 {
     setFindFlag(IFindSupport::FindRegularExpression, regexp);
 }
+
+void FindToolBar::setBackward(bool backward)
+{
+    setFindFlag(IFindSupport::FindBackward, backward);
+}
diff --git a/src/plugins/find/findtoolbar.h b/src/plugins/find/findtoolbar.h
index f8afe821068..9788369bf24 100644
--- a/src/plugins/find/findtoolbar.h
+++ b/src/plugins/find/findtoolbar.h
@@ -50,6 +50,7 @@ class FindPlugin;
 
 class FindToolBar : public Utils::StyledBar
 {
+    friend class FindPlugin;
     Q_OBJECT
 
 public:
@@ -86,6 +87,7 @@ private slots:
     void setCaseSensitive(bool sensitive);
     void setWholeWord(bool wholeOnly);
     void setRegularExpressions(bool regexp);
+    void setBackward(bool backward);
 
     void adaptToCandidate();
 
@@ -93,6 +95,7 @@ protected:
     bool focusNextPrevChild(bool next);
 
 private:
+    void openFindToolBar();
     void invokeClearResults();
     bool setFocusToCurrentFindSupport();
     void setFindFlag(IFindSupport::FindFlag flag, bool enabled);
-- 
GitLab