Utils: Use a fixed cursor in OutputFormatter

Change-Id: I3652aac881a7be955f11d57afb783142064ad256
Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
This commit is contained in:
Orgad Shaneh
2015-02-24 23:20:00 +02:00
committed by Orgad Shaneh
parent bcdd6d4ca0
commit 5044056296

View File

@@ -33,6 +33,7 @@
#include "theme/theme.h" #include "theme/theme.h"
#include <QPlainTextEdit> #include <QPlainTextEdit>
#include <QTextCursor>
namespace Utils { namespace Utils {
@@ -58,6 +59,7 @@ public:
QPlainTextEdit *plainTextEdit; QPlainTextEdit *plainTextEdit;
QTextCharFormat *formats; QTextCharFormat *formats;
QFont font; QFont font;
QTextCursor cursor;
AnsiEscapeCodeHandler *escapeCodeHandler; AnsiEscapeCodeHandler *escapeCodeHandler;
bool overwriteOutput; bool overwriteOutput;
}; };
@@ -82,6 +84,7 @@ QPlainTextEdit *OutputFormatter::plainTextEdit() const
void OutputFormatter::setPlainTextEdit(QPlainTextEdit *plainText) void OutputFormatter::setPlainTextEdit(QPlainTextEdit *plainText)
{ {
d->plainTextEdit = plainText; d->plainTextEdit = plainText;
d->cursor = plainText ? plainText->textCursor() : QTextCursor();
initFormats(); initFormats();
} }
@@ -92,19 +95,19 @@ void OutputFormatter::appendMessage(const QString &text, OutputFormat format)
void OutputFormatter::appendMessage(const QString &text, const QTextCharFormat &format) void OutputFormatter::appendMessage(const QString &text, const QTextCharFormat &format)
{ {
QTextCursor cursor(d->plainTextEdit->document()); if (!d->cursor.atEnd())
cursor.movePosition(QTextCursor::End); d->cursor.movePosition(QTextCursor::End);
foreach (const FormattedText &output, parseAnsi(text, format)) { foreach (const FormattedText &output, parseAnsi(text, format)) {
int startPos = 0; int startPos = 0;
int crPos = -1; int crPos = -1;
while ((crPos = output.text.indexOf(QLatin1Char('\r'), startPos)) >= 0) { while ((crPos = output.text.indexOf(QLatin1Char('\r'), startPos)) >= 0) {
append(cursor, output.text.mid(startPos, crPos - startPos), output.format); append(d->cursor, output.text.mid(startPos, crPos - startPos), output.format);
startPos = crPos + 1; startPos = crPos + 1;
d->overwriteOutput = true; d->overwriteOutput = true;
} }
if (startPos < output.text.count()) if (startPos < output.text.count())
append(cursor, output.text.mid(startPos), output.format); append(d->cursor, output.text.mid(startPos), output.format);
} }
} }
@@ -131,10 +134,10 @@ void OutputFormatter::append(QTextCursor &cursor, const QString &text,
void OutputFormatter::clearLastLine() void OutputFormatter::clearLastLine()
{ {
QTextCursor cursor(d->plainTextEdit->document()); if (!d->cursor.atEnd())
cursor.movePosition(QTextCursor::End); d->cursor.movePosition(QTextCursor::End);
cursor.movePosition(QTextCursor::StartOfBlock, QTextCursor::KeepAnchor); d->cursor.movePosition(QTextCursor::StartOfBlock, QTextCursor::KeepAnchor);
cursor.removeSelectedText(); d->cursor.removeSelectedText();
} }
void OutputFormatter::initFormats() void OutputFormatter::initFormats()