Utils: Create a reusable AnsiEscapeCodeHandler::setTextInEditor

Change-Id: Ic8ebe57287b08870e36e0a5cadbf3d322d14b2fe
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
Orgad Shaneh
2024-08-06 09:39:51 +03:00
committed by Orgad Shaneh
parent 35df237df2
commit 6471572135
3 changed files with 22 additions and 11 deletions

View File

@@ -5,6 +5,8 @@
#include "qtcassert.h"
#include <QPlainTextEdit>
namespace Utils {
/*!
@@ -268,6 +270,20 @@ void AnsiEscapeCodeHandler::endFormatScope()
m_previousFormatClosed = true;
}
void AnsiEscapeCodeHandler::setTextInEditor(QPlainTextEdit *editor, const QString &text)
{
AnsiEscapeCodeHandler handler;
const QList<FormattedText> formattedTextList = handler.parseText(FormattedText(text));
editor->clear();
QTextCursor cursor = editor->textCursor();
cursor.beginEditBlock();
for (const auto &formattedChunk : formattedTextList)
cursor.insertText(formattedChunk.text, formattedChunk.format);
cursor.endEditBlock();
cursor.movePosition(QTextCursor::Start);
editor->document()->setModified(false);
}
void AnsiEscapeCodeHandler::setFormatScope(const QTextCharFormat &charFormat)
{
m_previousFormat = charFormat;

View File

@@ -7,6 +7,10 @@
#include <QTextCharFormat>
QT_BEGIN_NAMESPACE
class QPlainTextEdit;
QT_END_NAMESPACE
namespace Utils {
class QTCREATOR_UTILS_EXPORT FormattedText {
@@ -25,6 +29,7 @@ class QTCREATOR_UTILS_EXPORT AnsiEscapeCodeHandler
public:
QList<FormattedText> parseText(const FormattedText &input);
void endFormatScope();
static void setTextInEditor(QPlainTextEdit *editor, const QString &text);
private:
void setFormatScope(const QTextCharFormat &charFormat);

View File

@@ -186,17 +186,7 @@ void GitEditorWidget::setPlainText(const QString &text)
switch (contentType())
{
case LogOutput: {
AnsiEscapeCodeHandler handler;
const QList<FormattedText> formattedTextList = handler.parseText(FormattedText(text));
clear();
QTextCursor cursor = textCursor();
cursor.beginEditBlock();
for (const auto &formattedChunk : formattedTextList)
cursor.insertText(formattedChunk.text, formattedChunk.format);
cursor.endEditBlock();
document()->setModified(false);
AnsiEscapeCodeHandler::setTextInEditor(this, text);
return;
}
case AnnotateOutput: