forked from qt-creator/qt-creator
Utils: Use a fixed cursor in OutputFormatter
Change-Id: I3652aac881a7be955f11d57afb783142064ad256 Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
This commit is contained in:
committed by
Orgad Shaneh
parent
bcdd6d4ca0
commit
5044056296
@@ -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()
|
||||||
|
Reference in New Issue
Block a user