diff --git a/src/plugins/debugger/logwindow.cpp b/src/plugins/debugger/logwindow.cpp index 40ee9bdb79e99eae3a2ab1c39e74f2f5d620221e..74dd0d547350e10b22ff14e489c483368b1b2092 100644 --- a/src/plugins/debugger/logwindow.cpp +++ b/src/plugins/debugger/logwindow.cpp @@ -156,7 +156,6 @@ public: DebuggerPane(QWidget *parent) : QPlainTextEdit(parent) { - setMaximumBlockCount(100000); setFrameStyle(QFrame::NoFrame); m_clearContentsAction = new QAction(this); m_clearContentsAction->setText(tr("Clear Contents")); @@ -183,6 +182,18 @@ public: delete menu; } + void append(const QString &text) + { + const int N = 100000; + if (blockCount() > N) { + QTextBlock block = document()->findBlock(9 * N / 10); + QTextCursor tc(block); + tc.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor); + tc.removeSelectedText(); + } + appendPlainText(text); + } + private slots: void saveContents(); @@ -434,7 +445,7 @@ void LogWindow::showOutput(int channel, const QString &output) } pos = nnpos + 1; } - m_combinedText->appendPlainText(out); + m_combinedText->append(out); if (atEnd) { cursor.movePosition(QTextCursor::End); @@ -455,8 +466,8 @@ void LogWindow::showInput(int channel, const QString &input) return; } if (debuggerCore()->boolSetting(LogTimeStamps)) - m_inputText->appendPlainText(logTimeStamp()); - m_inputText->appendPlainText(input); + m_inputText->append(logTimeStamp()); + m_inputText->append(input); QTextCursor cursor = m_inputText->textCursor(); cursor.movePosition(QTextCursor::End); m_inputText->setTextCursor(cursor); diff --git a/src/plugins/debugger/logwindow.h b/src/plugins/debugger/logwindow.h index 4bceac728ff822c0196ee9041d810d1b5af53693..a71db75e5e242b3ac0b639ed9121e903e00f4050 100644 --- a/src/plugins/debugger/logwindow.h +++ b/src/plugins/debugger/logwindow.h @@ -47,6 +47,8 @@ QT_END_NAMESPACE namespace Debugger { namespace Internal { +class DebuggerPane; + class LogWindow : public QWidget { Q_OBJECT @@ -78,8 +80,8 @@ signals: void statusMessageRequested(const QString &msg, int); private: - QPlainTextEdit *m_combinedText; // combined input/output - QPlainTextEdit *m_inputText; // scriptable input alone + DebuggerPane *m_combinedText; // combined input/output + DebuggerPane *m_inputText; // scriptable input alone QLineEdit *m_commandEdit; QLabel *m_commandLabel; bool m_ignoreNextInputEcho;