summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2009-10-05 18:02:46 +0200
committerRoberto Raggi <roberto.raggi@nokia.com>2009-10-05 18:30:39 +0200
commit64710c2b6b638d9fa8ae01374f5cec348b503392 (patch)
treeec12e91e03226b87cabac2f2e94271b99013df7a /src/plugins/cpptools
parent1ba39198d1660a6fe597c0f66df5db8c19a6e867 (diff)
downloadqt-creator-64710c2b6b638d9fa8ae01374f5cec348b503392.tar.gz
Perform renaming.
Diffstat (limited to 'src/plugins/cpptools')
-rw-r--r--src/plugins/cpptools/cppfindreferences.cpp67
-rw-r--r--src/plugins/cpptools/cppfindreferences.h1
2 files changed, 65 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);
diff --git a/src/plugins/cpptools/cppfindreferences.h b/src/plugins/cpptools/cppfindreferences.h
index 429a945e2c..4b4a5a9b04 100644
--- a/src/plugins/cpptools/cppfindreferences.h
+++ b/src/plugins/cpptools/cppfindreferences.h
@@ -70,6 +70,7 @@ private Q_SLOTS:
void displayResult(int);
void searchFinished();
void openEditor(const Find::SearchResultItem &item);
+ void onReplaceButtonClicked(const QString &text, const QList<Find::SearchResultItem> &items);
private:
void findAll_helper(CPlusPlus::Symbol *symbol);