From cd14b9f197653a8b81a2cbd98b638abc7677844b Mon Sep 17 00:00:00 2001
From: con <qtc-committer@nokia.com>
Date: Fri, 3 Apr 2009 15:53:29 +0200
Subject: [PATCH] Find dialog doesn't remember last selected scope.

Reviewed-by: Daniel Molkentin <daniel.molkentin@nokia.com>
---
 src/plugins/find/findtoolwindow.cpp           | 22 +++++++++++++++----
 src/plugins/find/findtoolwindow.h             |  1 +
 src/plugins/find/ifindfilter.h                |  1 +
 .../projectexplorer/allprojectsfind.cpp       |  5 +++++
 src/plugins/projectexplorer/allprojectsfind.h |  1 +
 .../projectexplorer/currentprojectfind.cpp    |  5 +++++
 .../projectexplorer/currentprojectfind.h      |  1 +
 src/plugins/texteditor/findinfiles.cpp        |  5 +++++
 src/plugins/texteditor/findinfiles.h          |  1 +
 9 files changed, 38 insertions(+), 4 deletions(-)

diff --git a/src/plugins/find/findtoolwindow.cpp b/src/plugins/find/findtoolwindow.cpp
index b2f17fa63d3..eec831775b5 100644
--- a/src/plugins/find/findtoolwindow.cpp
+++ b/src/plugins/find/findtoolwindow.cpp
@@ -40,14 +40,15 @@ using namespace Find::Internal;
 FindToolWindow::FindToolWindow(FindPlugin *plugin)
     : QDialog(Core::ICore::instance()->mainWindow()),
     m_plugin(plugin),
-    m_findCompleter(new QCompleter(this))
+    m_findCompleter(new QCompleter(this)),
+    m_currentFilter(0)
 {
     m_ui.setupUi(this);
     connect(m_ui.closeButton, SIGNAL(clicked()), this, SLOT(reject()));
     connect(m_ui.searchButton, SIGNAL(clicked()), this, SLOT(accept()));
     connect(m_ui.matchCase, SIGNAL(toggled(bool)), m_plugin, SLOT(setCaseSensitive(bool)));
     connect(m_ui.wholeWords, SIGNAL(toggled(bool)), m_plugin, SLOT(setWholeWord(bool)));
-    connect(m_ui.filterList, SIGNAL(currentIndexChanged(int)), this, SLOT(setCurrentFilter(int)));
+    connect(m_ui.filterList, SIGNAL(activated(int)), this, SLOT(setCurrentFilter(int)));
     connect(this, SIGNAL(accepted()), this, SLOT(search()));
     m_findCompleter->setModel(m_plugin->findCompletionModel());
     m_ui.searchTerm->setCompleter(m_findCompleter);
@@ -74,6 +75,8 @@ void FindToolWindow::setFindFilters(const QList<IFindFilter *> &filters)
         m_configWidgets.append(filter->createConfigWidget());
     }
     m_ui.filterList->addItems(names);
+    if (m_filters.size() > 0)
+        setCurrentFilter(0);
 }
 
 void FindToolWindow::setFindText(const QString &text)
@@ -83,9 +86,11 @@ void FindToolWindow::setFindText(const QString &text)
 
 void FindToolWindow::open(IFindFilter *filter)
 {
+    if (!filter)
+        filter = m_currentFilter;
     int index = m_filters.indexOf(filter);
     if (index >= 0) {
-        m_ui.filterList->setCurrentIndex(index);
+        setCurrentFilter(index);
     }
     m_ui.matchCase->setChecked(m_plugin->findFlags() & QTextDocument::FindCaseSensitively);
     m_ui.wholeWords->setChecked(m_plugin->findFlags() & QTextDocument::FindWholeWords);
@@ -96,6 +101,7 @@ void FindToolWindow::open(IFindFilter *filter)
 
 void FindToolWindow::setCurrentFilter(int index)
 {
+    m_ui.filterList->setCurrentIndex(index);
     for (int i = 0; i < m_configWidgets.size(); ++i) {
         QWidget *configWidget = m_configWidgets.at(i);
         if (!configWidget)
@@ -112,6 +118,7 @@ void FindToolWindow::setCurrentFilter(int index)
             configWidget->setParent(0);
         }
     }
+    m_currentFilter = m_filters.at(index);
 }
 
 void FindToolWindow::search()
@@ -129,6 +136,7 @@ void FindToolWindow::writeSettings()
 {
     QSettings *settings = Core::ICore::instance()->settings();
     settings->beginGroup("Find");
+    settings->setValue("CurrentFilter", m_currentFilter->id());
     foreach (IFindFilter *filter, m_filters)
         filter->writeSettings(settings);
     settings->endGroup();
@@ -138,7 +146,13 @@ void FindToolWindow::readSettings()
 {
     QSettings *settings = Core::ICore::instance()->settings();
     settings->beginGroup("Find");
-    foreach (IFindFilter *filter, m_filters)
+    const QString currentFilter = settings->value("CurrentFilter").toString();
+    for (int i = 0; i < m_filters.size(); ++i) {
+        IFindFilter *filter = m_filters.at(i);
         filter->readSettings(settings);
+        if (filter->id() == currentFilter) {
+            setCurrentFilter(i);
+        }
+    }
     settings->endGroup();
 }
diff --git a/src/plugins/find/findtoolwindow.h b/src/plugins/find/findtoolwindow.h
index d377c46a1cd..c1b8417c38b 100644
--- a/src/plugins/find/findtoolwindow.h
+++ b/src/plugins/find/findtoolwindow.h
@@ -67,6 +67,7 @@ private:
     QList<IFindFilter *> m_filters;
     QCompleter *m_findCompleter;
     QList<QWidget *> m_configWidgets;
+    IFindFilter *m_currentFilter;
 };
 
 } // namespace Internal
diff --git a/src/plugins/find/ifindfilter.h b/src/plugins/find/ifindfilter.h
index 9859fd75db7..69afaa283dd 100644
--- a/src/plugins/find/ifindfilter.h
+++ b/src/plugins/find/ifindfilter.h
@@ -45,6 +45,7 @@ public:
 
     virtual ~IFindFilter() {}
 
+    virtual QString id() const = 0;
     virtual QString name() const = 0;
     virtual bool isEnabled() const = 0;
     virtual QKeySequence defaultShortcut() const = 0;
diff --git a/src/plugins/projectexplorer/allprojectsfind.cpp b/src/plugins/projectexplorer/allprojectsfind.cpp
index c6448c2f801..c4ce7bee588 100644
--- a/src/plugins/projectexplorer/allprojectsfind.cpp
+++ b/src/plugins/projectexplorer/allprojectsfind.cpp
@@ -51,6 +51,11 @@ AllProjectsFind::AllProjectsFind(ProjectExplorerPlugin *plugin, SearchResultWind
     connect(m_plugin, SIGNAL(fileListChanged()), this, SIGNAL(changed()));
 }
 
+QString AllProjectsFind::id() const
+{
+    return "All Projects";
+}
+
 QString AllProjectsFind::name() const
 {
     return tr("All Projects");
diff --git a/src/plugins/projectexplorer/allprojectsfind.h b/src/plugins/projectexplorer/allprojectsfind.h
index f801dcfed09..67e64e64c5d 100644
--- a/src/plugins/projectexplorer/allprojectsfind.h
+++ b/src/plugins/projectexplorer/allprojectsfind.h
@@ -50,6 +50,7 @@ class AllProjectsFind : public TextEditor::BaseFileFind
 public:
     AllProjectsFind(ProjectExplorerPlugin *plugin, Find::SearchResultWindow *resultWindow);
 
+    QString id() const;
     QString name() const;
 
     bool isEnabled() const;
diff --git a/src/plugins/projectexplorer/currentprojectfind.cpp b/src/plugins/projectexplorer/currentprojectfind.cpp
index 4fcfc68642e..c830ea96932 100644
--- a/src/plugins/projectexplorer/currentprojectfind.cpp
+++ b/src/plugins/projectexplorer/currentprojectfind.cpp
@@ -52,6 +52,11 @@ CurrentProjectFind::CurrentProjectFind(ProjectExplorerPlugin *plugin, SearchResu
             this, SIGNAL(changed()));
 }
 
+QString CurrentProjectFind::id() const
+{
+    return "Current Project";
+}
+
 QString CurrentProjectFind::name() const
 {
     return tr("Current Project");
diff --git a/src/plugins/projectexplorer/currentprojectfind.h b/src/plugins/projectexplorer/currentprojectfind.h
index e9cc264bfdf..e24b6490a32 100644
--- a/src/plugins/projectexplorer/currentprojectfind.h
+++ b/src/plugins/projectexplorer/currentprojectfind.h
@@ -48,6 +48,7 @@ class CurrentProjectFind : public TextEditor::BaseFileFind
 public:
     CurrentProjectFind(ProjectExplorerPlugin *plugin, Find::SearchResultWindow *resultWindow);
 
+    QString id() const;
     QString name() const;
 
     bool isEnabled() const;
diff --git a/src/plugins/texteditor/findinfiles.cpp b/src/plugins/texteditor/findinfiles.cpp
index 33514269061..e73b04e6bd9 100644
--- a/src/plugins/texteditor/findinfiles.cpp
+++ b/src/plugins/texteditor/findinfiles.cpp
@@ -45,6 +45,11 @@ FindInFiles::FindInFiles(SearchResultWindow *resultWindow)
 {
 }
 
+QString FindInFiles::id() const
+{
+    return "Files on Disk";
+}
+
 QString FindInFiles::name() const
 {
     return tr("Files on Disk");
diff --git a/src/plugins/texteditor/findinfiles.h b/src/plugins/texteditor/findinfiles.h
index 9fc8a2bc02d..0ec9b97d5bc 100644
--- a/src/plugins/texteditor/findinfiles.h
+++ b/src/plugins/texteditor/findinfiles.h
@@ -51,6 +51,7 @@ class FindInFiles : public BaseFileFind
 public:
     explicit FindInFiles(Find::SearchResultWindow *resultWindow);
 
+    QString id() const;
     QString name() const;
     QKeySequence defaultShortcut() const;
     void findAll(const QString &txt, QTextDocument::FindFlags findFlags);
-- 
GitLab