summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppfindreferences.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2009-10-06 14:22:42 +0200
committercon <qtc-committer@nokia.com>2009-10-06 18:49:02 +0200
commit50e376dbfbb0f9242c5e7f22a176cfe4902f620e (patch)
tree57f03d02cf4e6f9691b688a681d1f57a51272ebc /src/plugins/cpptools/cppfindreferences.cpp
parent3528b71024ee54e7d11d05ad79a0da862bc73f09 (diff)
downloadqt-creator-50e376dbfbb0f9242c5e7f22a176cfe4902f620e.tar.gz
Use the existing text editor when refactoring text.
(cherry picked from commit fe1411cdfd36b992f40911495e34e21c6f53163e)
Diffstat (limited to 'src/plugins/cpptools/cppfindreferences.cpp')
-rw-r--r--src/plugins/cpptools/cppfindreferences.cpp79
1 files changed, 52 insertions, 27 deletions
diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp
index e1bb1cae39..375f322625 100644
--- a/src/plugins/cpptools/cppfindreferences.cpp
+++ b/src/plugins/cpptools/cppfindreferences.cpp
@@ -36,6 +36,7 @@
#include <extensionsystem/pluginmanager.h>
#include <utils/filesearch.h>
#include <coreplugin/progressmanager/progressmanager.h>
+#include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/icore.h>
#include <ASTVisitor.h>
@@ -581,6 +582,23 @@ void CppFindReferences::findAll_helper(Symbol *symbol)
connect(progress, SIGNAL(clicked()), _resultWindow, SLOT(popup()));
}
+static void applyChanges(QTextDocument *doc, const QString &text, const QList<Find::SearchResultItem> &items)
+{
+ QList<QTextCursor> cursors;
+
+ 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);
+}
+
void CppFindReferences::onReplaceButtonClicked(const QString &text,
const QList<Find::SearchResultItem> &items)
{
@@ -592,41 +610,48 @@ void CppFindReferences::onReplaceButtonClicked(const QString &text,
foreach (const Find::SearchResultItem &item, items)
changes[item.fileName].append(item);
+ Core::EditorManager *editorManager = Core::EditorManager::instance();
+
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);
- }
+ const QList<Find::SearchResultItem> items = it.value();
- foreach (QTextCursor tc, cursors)
- tc.insertText(text);
+ const QList<Core::IEditor *> editors = editorManager->editorsForFileName(fileName);
+ TextEditor::BaseTextEditor *textEditor = 0;
+ foreach (Core::IEditor *editor, editors) {
+ textEditor = qobject_cast<TextEditor::BaseTextEditor *>(editor->widget());
+ if (textEditor != 0)
+ break;
+ }
+
+ if (textEditor != 0) {
+ QTextCursor tc = textEditor->textCursor();
+ tc.beginEditBlock();
+ applyChanges(textEditor->document(), text, items);
+ tc.endEditBlock();
+ } else {
+ QFile file(fileName);
- QFile newFile(fileName);
- if (newFile.open(QFile::WriteOnly)) {
- QTextStream stream(&newFile);
+ if (file.open(QFile::ReadOnly)) {
+ QTextStream stream(&file);
// ### set the encoding
- stream << doc.toPlainText();
+ const QString plainText = stream.readAll();
+ file.close();
+
+ QTextDocument doc;
+ doc.setPlainText(plainText);
+
+ applyChanges(&doc, text, items);
+
+ QFile newFile(fileName);
+ if (newFile.open(QFile::WriteOnly)) {
+ QTextStream stream(&newFile);
+ // ### set the encoding
+ stream << doc.toPlainText();
+ }
}
}
}