diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2009-10-05 18:02:46 +0200 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2009-10-05 18:30:39 +0200 |
commit | 64710c2b6b638d9fa8ae01374f5cec348b503392 (patch) | |
tree | ec12e91e03226b87cabac2f2e94271b99013df7a /src/plugins/cpptools | |
parent | 1ba39198d1660a6fe597c0f66df5db8c19a6e867 (diff) | |
download | qt-creator-64710c2b6b638d9fa8ae01374f5cec348b503392.tar.gz |
Perform renaming.
Diffstat (limited to 'src/plugins/cpptools')
-rw-r--r-- | src/plugins/cpptools/cppfindreferences.cpp | 67 | ||||
-rw-r--r-- | src/plugins/cpptools/cppfindreferences.h | 1 |
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); |