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
committerRoberto Raggi <roberto.raggi@nokia.com>2009-10-06 14:22:42 +0200
commitfe1411cdfd36b992f40911495e34e21c6f53163e (patch)
treed6d114dfef3457a01771caddde10d7ca1f0630aa /src/plugins/cpptools/cppfindreferences.cpp
parentdebe180872935e8d69e9f9fac493bf6b16cc66eb (diff)
downloadqt-creator-fe1411cdfd36b992f40911495e34e21c6f53163e.tar.gz
Use the existing text editor when refactoring text.
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 95e1b8273d..8faca99e0f 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>
@@ -574,6 +575,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)
{
@@ -585,41 +603,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();
+ }
}
}
}