From feefdfdc38f72ac839c828bf8c2f959687253a12 Mon Sep 17 00:00:00 2001 From: con Date: Thu, 21 Apr 2011 13:42:17 +0200 Subject: [PATCH] Re-use output window implementation for general messages. Moving the implementation to core plugin. --- src/plugins/coreplugin/coreconstants.h | 1 + src/plugins/coreplugin/coreplugin.pro | 2 ++ src/plugins/coreplugin/messageoutputwindow.cpp | 41 +++------------------- src/plugins/coreplugin/messageoutputwindow.h | 20 ++--------- src/plugins/coreplugin/outputwindow.cpp | 22 ++++++------ src/plugins/coreplugin/outputwindow.h | 17 ++++----- src/plugins/projectexplorer/appoutputpane.cpp | 9 +++-- src/plugins/projectexplorer/appoutputpane.h | 9 +++-- .../projectexplorer/compileoutputwindow.cpp | 2 +- src/plugins/projectexplorer/compileoutputwindow.h | 4 +-- src/plugins/projectexplorer/projectexplorer.cpp | 1 - src/plugins/projectexplorer/projectexplorer.pro | 2 -- 12 files changed, 40 insertions(+), 90 deletions(-) diff --git a/src/plugins/coreplugin/coreconstants.h b/src/plugins/coreplugin/coreconstants.h index b3728fd5ee..8f52541cea 100644 --- a/src/plugins/coreplugin/coreconstants.h +++ b/src/plugins/coreplugin/coreconstants.h @@ -101,6 +101,7 @@ const char * const C_DESIGN_MODE = "Core.DesignMode"; const char * const C_EDITORMANAGER = "Core.EditorManager"; const char * const C_NAVIGATION_PANE = "Core.NavigationPane"; const char * const C_PROBLEM_PANE = "Core.ProblemPane"; +const char * const C_GENERAL_OUTPUT_PANE = "Core.GeneralOutputPane"; //default editor kind const char * const K_DEFAULT_TEXT_EDITOR_DISPLAY_NAME = QT_TRANSLATE_NOOP("OpenWith::Editors", "Plain Text Editor"); diff --git a/src/plugins/coreplugin/coreplugin.pro b/src/plugins/coreplugin/coreplugin.pro index a26e042410..33127c0b1c 100644 --- a/src/plugins/coreplugin/coreplugin.pro +++ b/src/plugins/coreplugin/coreplugin.pro @@ -27,6 +27,7 @@ SOURCES += mainwindow.cpp \ messagemanager.cpp \ messageoutputwindow.cpp \ outputpane.cpp \ + outputwindow.cpp \ vcsmanager.cpp \ statusbarmanager.cpp \ versiondialog.cpp \ @@ -104,6 +105,7 @@ HEADERS += mainwindow.h \ messagemanager.h \ messageoutputwindow.h \ outputpane.h \ + outputwindow.h \ vcsmanager.h \ statusbarmanager.h \ editormanager/editormanager.h \ diff --git a/src/plugins/coreplugin/messageoutputwindow.cpp b/src/plugins/coreplugin/messageoutputwindow.cpp index ab635095c3..52d037377e 100644 --- a/src/plugins/coreplugin/messageoutputwindow.cpp +++ b/src/plugins/coreplugin/messageoutputwindow.cpp @@ -31,6 +31,8 @@ **************************************************************************/ #include "messageoutputwindow.h" +#include "icontext.h" +#include "coreconstants.h" #include @@ -38,9 +40,8 @@ using namespace Core::Internal; MessageOutputWindow::MessageOutputWindow() { - m_widget = new TextView; + m_widget = new Core::OutputWindow(Core::Context(Core::Constants::C_GENERAL_OUTPUT_PANE)); m_widget->setReadOnly(true); - m_widget->setFrameStyle(QFrame::NoFrame); } MessageOutputWindow::~MessageOutputWindow() @@ -85,10 +86,7 @@ void MessageOutputWindow::visibilityChanged(bool /*b*/) void MessageOutputWindow::append(const QString &text) { - bool scroll = m_widget->isScrollbarAtBottom() || !m_widget->isVisible(); - m_widget->append(text); - if (scroll) - m_widget->scrollToBottom(); + m_widget->appendText(text); } int MessageOutputWindow::priorityInStatusBar() const @@ -120,34 +118,3 @@ bool MessageOutputWindow::canNavigate() { return false; } - -// -------- Copied from OutputWindow which should be shared instead - -bool TextView::isScrollbarAtBottom() const -{ - return verticalScrollBar()->value() == verticalScrollBar()->maximum(); -} - -void TextView::scrollToBottom() -{ - verticalScrollBar()->setValue(verticalScrollBar()->maximum()); -} - -void TextView::showEvent(QShowEvent *e) -{ - bool atBottom = isScrollbarAtBottom(); - QTextEdit::showEvent(e); - if (atBottom) - scrollToBottom(); -} - -void TextView::resizeEvent(QResizeEvent *e) -{ - //Keep scrollbar at bottom of window while resizing, to ensure we keep scrolling - //This can happen if window is resized while building, or if the horizontal scrollbar appears - bool atBottom = isScrollbarAtBottom(); - QTextEdit::resizeEvent(e); - if (atBottom) - scrollToBottom(); -} - diff --git a/src/plugins/coreplugin/messageoutputwindow.h b/src/plugins/coreplugin/messageoutputwindow.h index f37e564c81..b8c435dddc 100644 --- a/src/plugins/coreplugin/messageoutputwindow.h +++ b/src/plugins/coreplugin/messageoutputwindow.h @@ -33,7 +33,8 @@ #ifndef MESSAGEOUTPUTWINDOW_H #define MESSAGEOUTPUTWINDOW_H -#include +#include "ioutputpane.h" +#include "outputwindow.h" #include #include @@ -42,21 +43,6 @@ namespace Core { namespace Internal { -class TextView : public QTextEdit -{ - Q_OBJECT - -public: - TextView(QWidget *parent = 0) : QTextEdit(parent) {} - - void showEvent(QShowEvent *); - void scrollToBottom(); - bool isScrollbarAtBottom() const; - -protected: - void resizeEvent(QResizeEvent *e); -}; - class MessageOutputWindow : public Core::IOutputPane { Q_OBJECT @@ -85,7 +71,7 @@ public: bool canNavigate(); private: - TextView *m_widget; + OutputWindow *m_widget; }; } // namespace Internal diff --git a/src/plugins/coreplugin/outputwindow.cpp b/src/plugins/coreplugin/outputwindow.cpp index e992df6546..ef37d5fb7f 100644 --- a/src/plugins/coreplugin/outputwindow.cpp +++ b/src/plugins/coreplugin/outputwindow.cpp @@ -32,10 +32,10 @@ #include "outputwindow.h" -#include -#include -#include -#include +#include "actionmanager/actionmanager.h" +#include "actionmanager/command.h" +#include "coreconstants.h" +#include "icore.h" #include #include @@ -47,8 +47,7 @@ static const int MaxBlockCount = 100000; using namespace Utils; -namespace ProjectExplorer { -namespace Internal { +namespace Core { /*******************/ @@ -259,7 +258,7 @@ void OutputWindow::appendText(const QString &textIn, const QTextCharFormat &form { QString text = textIn; text.remove(QLatin1Char('\r')); - if (document()->blockCount() > maxLineCount) + if (maxLineCount > 0 && document()->blockCount() > maxLineCount) return; const bool atBottom = isScrollbarAtBottom(); QTextCursor cursor = QTextCursor(document()); @@ -267,7 +266,7 @@ void OutputWindow::appendText(const QString &textIn, const QTextCharFormat &form cursor.beginEditBlock(); cursor.insertText(doNewlineEnfocement(text), format); - if (document()->blockCount() > maxLineCount) { + if (maxLineCount > 0 && document()->blockCount() > maxLineCount) { QTextCharFormat tmp; tmp.setFontWeight(QFont::Bold); cursor.insertText(tr("Additional output omitted\n"), tmp); @@ -292,6 +291,10 @@ void OutputWindow::clear() void OutputWindow::scrollToBottom() { verticalScrollBar()->setValue(verticalScrollBar()->maximum()); + // QPlainTextEdit destroys the first calls value in case of multiline + // text, so make sure that the scroll bar actually gets the value set. + // Is a noop if the first call succeeded. + verticalScrollBar()->setValue(verticalScrollBar()->maximum()); } void OutputWindow::grayOutOldContent() @@ -331,5 +334,4 @@ void OutputWindow::setWordWrapEnabled(bool wrap) setWordWrapMode(QTextOption::NoWrap); } -} // namespace Internal -} // namespace ProjectExplorer +} // namespace Core diff --git a/src/plugins/coreplugin/outputwindow.h b/src/plugins/coreplugin/outputwindow.h index 37bde29986..085db26ce9 100644 --- a/src/plugins/coreplugin/outputwindow.h +++ b/src/plugins/coreplugin/outputwindow.h @@ -33,20 +33,18 @@ #ifndef OUTPUTWINDOW_H #define OUTPUTWINDOW_H +#include "core_global.h" +#include "icontext.h" + #include -#include #include namespace Core { - class IContext; -} - -namespace ProjectExplorer { -namespace Internal { +class IContext; -class OutputWindow : public QPlainTextEdit +class CORE_EXPORT OutputWindow : public QPlainTextEdit { Q_OBJECT @@ -59,7 +57,7 @@ public: void appendMessage(const QString &out, Utils::OutputFormat format); /// appends a \p text using \p format without using formater - void appendText(const QString &text, const QTextCharFormat &format, int maxLineCount); + void appendText(const QString &text, const QTextCharFormat &format = QTextCharFormat(), int maxLineCount = -1); void grayOutOldContent(); void clear(); @@ -93,7 +91,6 @@ private: bool m_mousePressed; }; -} // namespace Internal -} // namespace ProjectExplorer +} // namespace Core #endif // OUTPUTWINDOW_H diff --git a/src/plugins/projectexplorer/appoutputpane.cpp b/src/plugins/projectexplorer/appoutputpane.cpp index 1b7b9aaf20..1ac35488f0 100644 --- a/src/plugins/projectexplorer/appoutputpane.cpp +++ b/src/plugins/projectexplorer/appoutputpane.cpp @@ -32,7 +32,6 @@ **************************************************************************/ #include "appoutputpane.h" -#include "outputwindow.h" #include "projectexplorerconstants.h" #include "projectexplorer.h" #include "projectexplorersettings.h" @@ -65,7 +64,7 @@ enum { debug = 0 }; using namespace ProjectExplorer; using namespace ProjectExplorer::Internal; -AppOutputPane::RunControlTab::RunControlTab(RunControl *rc, OutputWindow *w) : +AppOutputPane::RunControlTab::RunControlTab(RunControl *rc, Core::OutputWindow *w) : runControl(rc), window(w), asyncClosing(false) { } @@ -203,7 +202,7 @@ int AppOutputPane::priorityInStatusBar() const void AppOutputPane::clearContents() { - OutputWindow *currentWindow = qobject_cast(m_tabWidget->currentWidget()); + Core::OutputWindow *currentWindow = qobject_cast(m_tabWidget->currentWidget()); if (currentWindow) currentWindow->clear(); } @@ -259,7 +258,7 @@ void AppOutputPane::createNewOutputWindow(RunControl *rc) // Create new static uint counter = 0; Core::Context context(Constants::C_APP_OUTPUT, counter++); - OutputWindow *ow = new OutputWindow(context, m_tabWidget); + Core::OutputWindow *ow = new Core::OutputWindow(context, m_tabWidget); ow->setWindowTitle(tr("Application Output Window")); // TODO the following is a hidden impossible dependency of projectexplorer on qt4projectmanager ow->setWindowIcon(QIcon(QLatin1String(Qt4ProjectManager::Constants::ICON_WINDOW))); @@ -274,7 +273,7 @@ void AppOutputPane::createNewOutputWindow(RunControl *rc) qDebug() << "OutputPane::createNewOutputWindow: Adding tab for " << rc; } -void AppOutputPane::handleOldOutput(OutputWindow *window) const +void AppOutputPane::handleOldOutput(Core::OutputWindow *window) const { if (ProjectExplorerPlugin::instance()->projectExplorerSettings().cleanOldAppOutput) window->clear(); diff --git a/src/plugins/projectexplorer/appoutputpane.h b/src/plugins/projectexplorer/appoutputpane.h index 75e6948991..ee92c3d6da 100644 --- a/src/plugins/projectexplorer/appoutputpane.h +++ b/src/plugins/projectexplorer/appoutputpane.h @@ -34,8 +34,7 @@ #ifndef APPOUTPUTPANE_H #define APPOUTPUTPANE_H -#include "outputwindow.h" - +#include #include QT_BEGIN_NAMESPACE @@ -110,9 +109,9 @@ private slots: private: struct RunControlTab { explicit RunControlTab(RunControl *runControl = 0, - OutputWindow *window = 0); + Core::OutputWindow *window = 0); RunControl* runControl; - OutputWindow *window; + Core::OutputWindow *window; // Is the run control stopping asynchronously, close the tab once it finishes bool asyncClosing; }; @@ -126,7 +125,7 @@ private: int currentIndex() const; RunControl *currentRunControl() const; int tabWidgetIndexOf(int runControlIndex) const; - void handleOldOutput(OutputWindow *window) const; + void handleOldOutput(Core::OutputWindow *window) const; QWidget *m_mainWidget; QTabWidget *m_tabWidget; diff --git a/src/plugins/projectexplorer/compileoutputwindow.cpp b/src/plugins/projectexplorer/compileoutputwindow.cpp index 21c6c837d5..bc497c4d61 100644 --- a/src/plugins/projectexplorer/compileoutputwindow.cpp +++ b/src/plugins/projectexplorer/compileoutputwindow.cpp @@ -63,7 +63,7 @@ const int MAX_LINECOUNT = 50000; CompileOutputWindow::CompileOutputWindow(BuildManager * /*bm*/) { Core::Context context(Constants::C_COMPILE_OUTPUT); - m_outputWindow = new OutputWindow(context); + m_outputWindow = new Core::OutputWindow(context); m_outputWindow->setWindowTitle(tr("Compile Output")); m_outputWindow->setWindowIcon(QIcon(QLatin1String(Qt4ProjectManager::Constants::ICON_WINDOW))); m_outputWindow->setReadOnly(true); diff --git a/src/plugins/projectexplorer/compileoutputwindow.h b/src/plugins/projectexplorer/compileoutputwindow.h index 86a812d145..9ec3355f99 100644 --- a/src/plugins/projectexplorer/compileoutputwindow.h +++ b/src/plugins/projectexplorer/compileoutputwindow.h @@ -33,8 +33,8 @@ #ifndef COMPILEOUTPUTWINDOW_H #define COMPILEOUTPUTWINDOW_H -#include "outputwindow.h" #include "buildstep.h" +#include #include #include @@ -86,7 +86,7 @@ private slots: void updateWordWrapMode(); private: - OutputWindow *m_outputWindow; + Core::OutputWindow *m_outputWindow; QHash m_taskPositions; ShowOutputTaskHandler * m_handler; }; diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 6d4421649a..eee65b4920 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -58,7 +58,6 @@ #include "iprojectmanager.h" #include "metatypedeclarations.h" #include "nodesvisitor.h" -#include "outputwindow.h" #include "appoutputpane.h" #include "persistentsettings.h" #include "pluginfilefactory.h" diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro index 488a213b9a..60cadb2a14 100644 --- a/src/plugins/projectexplorer/projectexplorer.pro +++ b/src/plugins/projectexplorer/projectexplorer.pro @@ -28,7 +28,6 @@ HEADERS += projectexplorer.h \ showoutputtaskhandler.h \ vcsannotatetaskhandler.h \ taskwindow.h \ - outputwindow.h \ persistentsettings.h \ projectfilewizardextension.h \ session.h \ @@ -125,7 +124,6 @@ SOURCES += projectexplorer.cpp \ showoutputtaskhandler.cpp \ vcsannotatetaskhandler.cpp \ taskwindow.cpp \ - outputwindow.cpp \ persistentsettings.cpp \ projectfilewizardextension.cpp \ session.cpp \ -- 2.11.0