summaryrefslogtreecommitdiff
path: root/src/plugins/find
diff options
context:
space:
mode:
authorcon <qtc-committer@nokia.com>2009-12-21 11:08:20 +0100
committercon <qtc-committer@nokia.com>2009-12-21 11:08:52 +0100
commit1a95f6f20545b9e73351a559c903629c46be4817 (patch)
treeec6c6de9e8386b0e34536c8d5aed9b39d753b045 /src/plugins/find
parentf229a7618a193438e6eec61aa69d2a35cbf3f5ee (diff)
downloadqt-creator-1a95f6f20545b9e73351a559c903629c46be4817.tar.gz
Implement string based search & replace in multiple files.
This uses the same UI as "Rename Symbol". Moves the actual rename implementation to a static method in BaseFileFind and uses it for rename symbol and search & replace. Moves the signal notification for the code model from VCSManager to the more general FileManager. Note that as for rename symbol, there's no undo yet. Task-number: QTCREATORBUG-73
Diffstat (limited to 'src/plugins/find')
-rw-r--r--src/plugins/find/finddialog.ui10
-rw-r--r--src/plugins/find/findtoolwindow.cpp37
-rw-r--r--src/plugins/find/findtoolwindow.h3
-rw-r--r--src/plugins/find/ifindfilter.h4
4 files changed, 46 insertions, 8 deletions
diff --git a/src/plugins/find/finddialog.ui b/src/plugins/find/finddialog.ui
index 479299316f..a88929fee8 100644
--- a/src/plugins/find/finddialog.ui
+++ b/src/plugins/find/finddialog.ui
@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
- <width>426</width>
+ <width>454</width>
<height>168</height>
</rect>
</property>
@@ -117,6 +117,13 @@
</property>
</widget>
</item>
+ <item row="2" column="2">
+ <widget class="QPushButton" name="replaceButton">
+ <property name="text">
+ <string>Search &amp;&amp; Replace</string>
+ </property>
+ </widget>
+ </item>
</layout>
</item>
<item>
@@ -139,6 +146,7 @@
<tabstop>searchTerm</tabstop>
<tabstop>searchButton</tabstop>
<tabstop>closeButton</tabstop>
+ <tabstop>replaceButton</tabstop>
<tabstop>matchCase</tabstop>
<tabstop>wholeWords</tabstop>
</tabstops>
diff --git a/src/plugins/find/findtoolwindow.cpp b/src/plugins/find/findtoolwindow.cpp
index e687b21227..873473b3cd 100644
--- a/src/plugins/find/findtoolwindow.cpp
+++ b/src/plugins/find/findtoolwindow.cpp
@@ -46,11 +46,11 @@ FindToolWindow::FindToolWindow(FindPlugin *plugin)
{
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.searchButton, SIGNAL(clicked()), this, SLOT(search()));
+ connect(m_ui.replaceButton, SIGNAL(clicked()), this, SLOT(replace()));
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(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);
QVBoxLayout *layout = new QVBoxLayout;
@@ -108,12 +108,14 @@ void FindToolWindow::setCurrentFilter(int index)
if (!configWidget)
continue;
if (i == index) {
+ IFindFilter *filter = m_filters.at(i);
m_ui.configWidget->layout()->addWidget(configWidget);
- bool enabled = m_filters.at(i)->isEnabled();
+ bool enabled = filter->isEnabled();
m_ui.matchCase->setEnabled(enabled);
m_ui.wholeWords->setEnabled(enabled);
m_ui.searchTerm->setEnabled(enabled);
m_ui.searchButton->setEnabled(enabled);
+ m_ui.replaceButton->setEnabled(filter->isReplaceSupported() && enabled);
configWidget->setEnabled(enabled);
} else {
configWidget->setParent(0);
@@ -122,17 +124,38 @@ void FindToolWindow::setCurrentFilter(int index)
m_currentFilter = m_filters.at(index);
}
-void FindToolWindow::search()
+void FindToolWindow::acceptAndGetParameters(QString *term, IFindFilter **filter)
{
+ if (filter)
+ *filter = 0;
+ accept();
m_plugin->updateFindCompletion(m_ui.searchTerm->text());
int index = m_ui.filterList->currentIndex();
- QString term = m_ui.searchTerm->text();
- if (term.isEmpty() || index < 0)
+ QString searchTerm = m_ui.searchTerm->text();
+ if (term)
+ *term = searchTerm;
+ if (searchTerm.isEmpty() || index < 0)
return;
- IFindFilter *filter = m_filters.at(index);
+ if (filter)
+ *filter = m_filters.at(index);
+}
+
+void FindToolWindow::search()
+{
+ QString term;
+ IFindFilter *filter;
+ acceptAndGetParameters(&term, &filter);
filter->findAll(term, m_plugin->findFlags());
}
+void FindToolWindow::replace()
+{
+ QString term;
+ IFindFilter *filter;
+ acceptAndGetParameters(&term, &filter);
+ filter->replaceAll(term, m_plugin->findFlags());
+}
+
void FindToolWindow::writeSettings()
{
QSettings *settings = Core::ICore::instance()->settings();
diff --git a/src/plugins/find/findtoolwindow.h b/src/plugins/find/findtoolwindow.h
index a187efa730..57dc15b4e3 100644
--- a/src/plugins/find/findtoolwindow.h
+++ b/src/plugins/find/findtoolwindow.h
@@ -59,9 +59,12 @@ public:
private slots:
void search();
+ void replace();
void setCurrentFilter(int index);
private:
+ void acceptAndGetParameters(QString *term, IFindFilter **filter);
+
Ui::FindDialog m_ui;
FindPlugin *m_plugin;
QList<IFindFilter *> m_filters;
diff --git a/src/plugins/find/ifindfilter.h b/src/plugins/find/ifindfilter.h
index 9878835b89..e9a38511df 100644
--- a/src/plugins/find/ifindfilter.h
+++ b/src/plugins/find/ifindfilter.h
@@ -53,7 +53,11 @@ public:
virtual QString name() const = 0;
virtual bool isEnabled() const = 0;
virtual QKeySequence defaultShortcut() const = 0;
+ virtual bool isReplaceSupported() const { return false; }
+
virtual void findAll(const QString &txt, QTextDocument::FindFlags findFlags) = 0;
+ virtual void replaceAll(const QString &txt, QTextDocument::FindFlags findFlags)
+ { Q_UNUSED(txt) Q_UNUSED(findFlags) }
virtual QWidget *createConfigWidget() { return 0; }
virtual void writeSettings(QSettings *settings) { Q_UNUSED(settings) }