diff options
author | con <qtc-committer@nokia.com> | 2009-12-21 11:08:20 +0100 |
---|---|---|
committer | con <qtc-committer@nokia.com> | 2009-12-21 11:08:52 +0100 |
commit | 1a95f6f20545b9e73351a559c903629c46be4817 (patch) | |
tree | ec6c6de9e8386b0e34536c8d5aed9b39d753b045 /src/plugins/find | |
parent | f229a7618a193438e6eec61aa69d2a35cbf3f5ee (diff) | |
download | qt-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.ui | 10 | ||||
-rw-r--r-- | src/plugins/find/findtoolwindow.cpp | 37 | ||||
-rw-r--r-- | src/plugins/find/findtoolwindow.h | 3 | ||||
-rw-r--r-- | src/plugins/find/ifindfilter.h | 4 |
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 && 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) } |