summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppfindreferences.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/cpptools/cppfindreferences.cpp')
-rw-r--r--src/plugins/cpptools/cppfindreferences.cpp67
1 files changed, 64 insertions, 3 deletions
diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp
index f9c27ccdd9..95e1b8273d 100644
--- a/src/plugins/cpptools/cppfindreferences.cpp
+++ b/src/plugins/cpptools/cppfindreferences.cpp
@@ -534,17 +534,24 @@ static void find_helper(QFutureInterface<Utils::FileSearchResult> &future,
void CppFindReferences::findUsages(Symbol *symbol)
{
- _resultWindow->clearContents();
+ Find::SearchResult *search = _resultWindow->startNewSearch(Find::SearchResultWindow::SearchOnly);
+
+ connect(search, SIGNAL(activated(Find::SearchResultItem)),
+ this, SLOT(openEditor(Find::SearchResultItem)));
+
findAll_helper(symbol);
}
void CppFindReferences::renameUsages(Symbol *symbol)
{
- Find::SearchResult *search = _resultWindow->startNewSearch();
+ Find::SearchResult *search = _resultWindow->startNewSearch(Find::SearchResultWindow::SearchAndReplace);
+
connect(search, SIGNAL(activated(Find::SearchResultItem)),
this, SLOT(openEditor(Find::SearchResultItem)));
- _resultWindow->setShowReplaceUI(true);
+ connect(search, SIGNAL(replaceButtonClicked(QString,QList<Find::SearchResultItem>)),
+ SLOT(onReplaceButtonClicked(QString,QList<Find::SearchResultItem>)));
+
findAll_helper(symbol);
}
@@ -567,6 +574,60 @@ void CppFindReferences::findAll_helper(Symbol *symbol)
connect(progress, SIGNAL(clicked()), _resultWindow, SLOT(popup()));
}
+void CppFindReferences::onReplaceButtonClicked(const QString &text,
+ const QList<Find::SearchResultItem> &items)
+{
+ if (text.isEmpty())
+ return;
+
+ QHash<QString, QList<Find::SearchResultItem> > changes;
+
+ foreach (const Find::SearchResultItem &item, items)
+ changes[item.fileName].append(item);
+
+ QHashIterator<QString, QList<Find::SearchResultItem> > it(changes);
+ while (it.hasNext()) {
+ it.next();
+
+ const QString fileName = it.key();
+ QFile file(fileName);
+
+ if (file.open(QFile::ReadOnly)) {
+ QTextStream stream(&file);
+ // ### set the encoding
+ const QString plainText = stream.readAll();
+ file.close();
+
+ QTextDocument doc;
+ doc.setPlainText(plainText);
+
+ QList<QTextCursor> cursors;
+ const QList<Find::SearchResultItem> items = it.value();
+ foreach (const Find::SearchResultItem &item, items) {
+ const int blockNumber = item.lineNumber - 1;
+ QTextCursor tc(doc.findBlockByNumber(blockNumber));
+ tc.setPosition(tc.position() + item.searchTermStart);
+ tc.setPosition(tc.position() + item.searchTermLength,
+ QTextCursor::KeepAnchor);
+ cursors.append(tc);
+ }
+
+ foreach (QTextCursor tc, cursors)
+ tc.insertText(text);
+
+ QFile newFile(fileName);
+ if (newFile.open(QFile::WriteOnly)) {
+ QTextStream stream(&newFile);
+ // ### set the encoding
+ stream << doc.toPlainText();
+ }
+ }
+ }
+
+ const QStringList fileNames = changes.keys();
+ _modelManager->updateSourceFiles(fileNames);
+}
+
void CppFindReferences::displayResult(int index)
{
Utils::FileSearchResult result = m_watcher.future().resultAt(index);