From 1a95f6f20545b9e73351a559c903629c46be4817 Mon Sep 17 00:00:00 2001 From: con Date: Mon, 21 Dec 2009 11:08:20 +0100 Subject: 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 --- src/plugins/find/finddialog.ui | 10 +++++++++- src/plugins/find/findtoolwindow.cpp | 37 ++++++++++++++++++++++++++++++------- src/plugins/find/findtoolwindow.h | 3 +++ src/plugins/find/ifindfilter.h | 4 ++++ 4 files changed, 46 insertions(+), 8 deletions(-) (limited to 'src/plugins/find') 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 @@ 0 0 - 426 + 454 168 @@ -117,6 +117,13 @@ + + + + Search && Replace + + + @@ -139,6 +146,7 @@ searchTerm searchButton closeButton + replaceButton matchCase wholeWords 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 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) } -- cgit v1.2.1