diff --git a/src/plugins/projectexplorer/compileoutputwindow.cpp b/src/plugins/projectexplorer/compileoutputwindow.cpp index 1e789d1fba36f2c5a3e3a966e3130b1c7adeb272..6424438b7f4945f5cbd72c04d2c7c4231df3397c 100644 --- a/src/plugins/projectexplorer/compileoutputwindow.cpp +++ b/src/plugins/projectexplorer/compileoutputwindow.cpp @@ -54,14 +54,14 @@ const int MAX_LINECOUNT = 10000; CompileOutputWindow::CompileOutputWindow(BuildManager * /*bm*/) { - m_textEdit = new QPlainTextEdit(); - m_textEdit->setWindowTitle(tr("Compile Output")); - m_textEdit->setWindowIcon(QIcon(":/qt4projectmanager/images/window.png")); - m_textEdit->setReadOnly(true); - m_textEdit->setFrameStyle(QFrame::NoFrame); + m_outputWindow = new OutputWindow(); + m_outputWindow->setWindowTitle(tr("Compile Output")); + m_outputWindow->setWindowIcon(QIcon(":/qt4projectmanager/images/window.png")); + m_outputWindow->setReadOnly(true); + Aggregation::Aggregate *agg = new Aggregation::Aggregate; - agg->add(m_textEdit); - agg->add(new Find::BaseTextFind(m_textEdit)); + agg->add(m_outputWindow); + agg->add(new Find::BaseTextFind(m_outputWindow)); qRegisterMetaType<QTextCharFormat>("QTextCharFormat"); @@ -77,7 +77,7 @@ CompileOutputWindow::~CompileOutputWindow() bool CompileOutputWindow::hasFocus() { - return m_textEdit->hasFocus(); + return m_outputWindow->hasFocus(); } bool CompileOutputWindow::canFocus() @@ -87,52 +87,28 @@ bool CompileOutputWindow::canFocus() void CompileOutputWindow::setFocus() { - m_textEdit->setFocus(); + m_outputWindow->setFocus(); } QWidget *CompileOutputWindow::outputWidget(QWidget *) { - return m_textEdit; + return m_outputWindow; } void CompileOutputWindow::appendText(const QString &text, const QTextCharFormat &textCharFormat) { - if (m_textEdit->document()->blockCount() > MAX_LINECOUNT) - return; - bool shouldScroll = (m_textEdit->verticalScrollBar()->value() == - m_textEdit->verticalScrollBar()->maximum()); - QString textWithNewline = text; - if (!textWithNewline.endsWith("\n")) - textWithNewline.append("\n"); - QTextCursor cursor = QTextCursor(m_textEdit->document()); - cursor.movePosition(QTextCursor::End); - cursor.beginEditBlock(); - cursor.insertText(textWithNewline, textCharFormat); - - if (m_textEdit->document()->blockCount() > MAX_LINECOUNT) { - QTextCharFormat tmp; - tmp.setFontWeight(QFont::Bold); - cursor.insertText(tr("Additional output omitted\n"), tmp); - } - - cursor.endEditBlock(); - - if (shouldScroll) { - m_textEdit->verticalScrollBar()->setValue(m_textEdit->verticalScrollBar()->maximum()); - m_textEdit->setTextCursor(cursor); - } + m_outputWindow->appendText(text, textCharFormat, MAX_LINECOUNT); } void CompileOutputWindow::clearContents() { - m_textEdit->clear(); + m_outputWindow->clear(); m_taskPositions.clear(); } -void CompileOutputWindow::visibilityChanged(bool b) +void CompileOutputWindow::visibilityChanged(bool) { - if (b) - m_textEdit->verticalScrollBar()->setValue(m_textEdit->verticalScrollBar()->maximum()); + } int CompileOutputWindow::priorityInStatusBar() const @@ -167,7 +143,7 @@ bool CompileOutputWindow::canNavigate() void CompileOutputWindow::registerPositionOf(const Task &task) { - int blocknumber = m_textEdit->blockCount(); + int blocknumber = m_outputWindow->blockCount(); if (blocknumber > MAX_LINECOUNT) return; m_taskPositions.insert(task.taskId, blocknumber - 1); @@ -181,7 +157,7 @@ bool CompileOutputWindow::knowsPositionOf(const Task &task) void CompileOutputWindow::showPositionOf(const Task &task) { int position = m_taskPositions.value(task.taskId); - QTextCursor newCursor(m_textEdit->document()->findBlockByNumber(position)); + QTextCursor newCursor(m_outputWindow->document()->findBlockByNumber(position)); newCursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor); - m_textEdit->setTextCursor(newCursor); + m_outputWindow->setTextCursor(newCursor); } diff --git a/src/plugins/projectexplorer/compileoutputwindow.h b/src/plugins/projectexplorer/compileoutputwindow.h index 8d34cf1656cec9bda1631ee4c571ad0eb9861359..5b4e7b8adb257e391b1108a7fbadf307e3ae94fb 100644 --- a/src/plugins/projectexplorer/compileoutputwindow.h +++ b/src/plugins/projectexplorer/compileoutputwindow.h @@ -30,6 +30,7 @@ #ifndef COMPILEOUTPUTWINDOW_H #define COMPILEOUTPUTWINDOW_H +#include "outputwindow.h" #include <coreplugin/ioutputpane.h> #include <QtCore/QHash> @@ -78,7 +79,7 @@ public: void showPositionOf(const Task &task); private: - QPlainTextEdit *m_textEdit; + OutputWindow *m_outputWindow; QHash<unsigned int, int> m_taskPositions; ShowOutputTaskHandler * m_handler; }; diff --git a/src/plugins/projectexplorer/outputwindow.cpp b/src/plugins/projectexplorer/outputwindow.cpp index a12c94fa1e6abd84955a3177f600613d2e3594a1..a00a56f1afb6dca1d034d2012408a01b19084754 100644 --- a/src/plugins/projectexplorer/outputwindow.cpp +++ b/src/plugins/projectexplorer/outputwindow.cpp @@ -221,6 +221,8 @@ void OutputPane::createNewOutputWindow(RunControl *rc) } if (!found) { OutputWindow *ow = new OutputWindow(m_tabWidget); + ow->setWindowTitle(tr("Application Output Window")); + ow->setWindowIcon(QIcon(":/qt4projectmanager/images/window.png")); ow->setFormatter(rc->outputFormatter()); Aggregation::Aggregate *agg = new Aggregation::Aggregate; agg->add(ow); @@ -376,6 +378,7 @@ bool OutputPane::canNavigate() OutputWindow::OutputWindow(QWidget *parent) : QPlainTextEdit(parent) + , m_formatter(0) , m_enforceNewline(false) , m_scrollToBottom(false) , m_linksActive(true) @@ -383,8 +386,6 @@ OutputWindow::OutputWindow(QWidget *parent) { setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); //setCenterOnScroll(false); - setWindowTitle(tr("Application Output Window")); - setWindowIcon(QIcon(":/qt4projectmanager/images/window.png")); setFrameShape(QFrame::NoFrame); setMouseTracking(true); @@ -433,10 +434,9 @@ OutputWindow::~OutputWindow() delete m_outputWindowContext; } -void OutputWindow::mousePressEvent(QMouseEvent *e) +void OutputWindow::mousePressEvent(QMouseEvent * /*e*/) { m_mousePressed = true; - QPlainTextEdit::mousePressEvent(e); } @@ -453,7 +453,6 @@ void OutputWindow::mouseReleaseEvent(QMouseEvent *e) const QString href = anchorAt(e->pos()); if (m_formatter) m_formatter->handleLink(href); - QPlainTextEdit::mouseReleaseEvent(e); } void OutputWindow::mouseMoveEvent(QMouseEvent *e) @@ -466,7 +465,6 @@ void OutputWindow::mouseMoveEvent(QMouseEvent *e) viewport()->setCursor(Qt::IBeamCursor); else viewport()->setCursor(Qt::PointingHandCursor); - QPlainTextEdit::mouseMoveEvent(e); } OutputFormatter *OutputWindow::formatter() const @@ -556,6 +554,28 @@ void OutputWindow::appendMessage(const QString &out, bool isError) enableUndoRedo(); } +// TODO rename +void OutputWindow::appendText(const QString &text, const QTextCharFormat &format, int maxLineCount) +{ + if (document()->blockCount() > maxLineCount) + return; + const bool atBottom = isScrollbarAtBottom(); + QTextCursor cursor = QTextCursor(document()); + cursor.movePosition(QTextCursor::End); + cursor.beginEditBlock(); + cursor.insertText(doNewlineEnfocement(text), format); + + if (document()->blockCount() > maxLineCount) { + QTextCharFormat tmp; + tmp.setFontWeight(QFont::Bold); + cursor.insertText(tr("Additional output omitted\n"), tmp); + } + + cursor.endEditBlock(); + if (atBottom) + scrollToBottom(); +} + bool OutputWindow::isScrollbarAtBottom() const { return verticalScrollBar()->value() == verticalScrollBar()->maximum(); diff --git a/src/plugins/projectexplorer/outputwindow.h b/src/plugins/projectexplorer/outputwindow.h index 33ef4aca48855ca818261cdc65eb26fdbb4998d0..4cc3eecb031868adbdc8327e963175447b1f07da 100644 --- a/src/plugins/projectexplorer/outputwindow.h +++ b/src/plugins/projectexplorer/outputwindow.h @@ -135,11 +135,19 @@ public: void appendApplicationOutput(const QString &out, bool onStdErr); void appendApplicationOutputInline(const QString &out, bool onStdErr); void appendMessage(const QString &out, bool isError); + /// appends a \p text using \p format without using formater + void appendText(const QString &text, const QTextCharFormat &format, int maxLineCount); void grayOutOldContent(); void showEvent(QShowEvent *); + void clear() + { + m_enforceNewline = false; + QPlainTextEdit::clear(); + } + protected: bool isScrollbarAtBottom() const; void scrollToBottom();