OSDN Git Service

Re-use output window implementation for general messages.
authorcon <qtc-committer@nokia.com>
Thu, 21 Apr 2011 11:42:17 +0000 (13:42 +0200)
committercon <qtc-committer@nokia.com>
Tue, 26 Apr 2011 08:45:26 +0000 (10:45 +0200)
Moving the implementation to core plugin.

12 files changed:
src/plugins/coreplugin/coreconstants.h
src/plugins/coreplugin/coreplugin.pro
src/plugins/coreplugin/messageoutputwindow.cpp
src/plugins/coreplugin/messageoutputwindow.h
src/plugins/coreplugin/outputwindow.cpp
src/plugins/coreplugin/outputwindow.h
src/plugins/projectexplorer/appoutputpane.cpp
src/plugins/projectexplorer/appoutputpane.h
src/plugins/projectexplorer/compileoutputwindow.cpp
src/plugins/projectexplorer/compileoutputwindow.h
src/plugins/projectexplorer/projectexplorer.cpp
src/plugins/projectexplorer/projectexplorer.pro

index b3728fd..8f52541 100644 (file)
@@ -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");
index a26e042..33127c0 100644 (file)
@@ -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 \
index ab63509..52d0373 100644 (file)
@@ -31,6 +31,8 @@
 **************************************************************************/
 
 #include "messageoutputwindow.h"
+#include "icontext.h"
+#include "coreconstants.h"
 
 #include <QtGui/QScrollBar>
 
@@ -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();
-}
-
index f37e564..b8c435d 100644 (file)
@@ -33,7 +33,8 @@
 #ifndef MESSAGEOUTPUTWINDOW_H
 #define MESSAGEOUTPUTWINDOW_H
 
-#include <coreplugin/ioutputpane.h>
+#include "ioutputpane.h"
+#include "outputwindow.h"
 
 #include <QtGui/QShowEvent>
 #include <QtGui/QResizeEvent>
 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
index e992df6..ef37d5f 100644 (file)
 
 #include "outputwindow.h"
 
-#include <coreplugin/actionmanager/actionmanager.h>
-#include <coreplugin/actionmanager/command.h>
-#include <coreplugin/coreconstants.h>
-#include <coreplugin/icore.h>
+#include "actionmanager/actionmanager.h"
+#include "actionmanager/command.h"
+#include "coreconstants.h"
+#include "icore.h"
 
 #include <utils/qtcassert.h>
 #include <utils/outputformatter.h>
@@ -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
index 37bde29..085db26 100644 (file)
 #ifndef OUTPUTWINDOW_H
 #define OUTPUTWINDOW_H
 
+#include "core_global.h"
+#include "icontext.h"
+
 #include <utils/outputformatter.h>
-#include <coreplugin/icontext.h>
 
 #include <QtGui/QPlainTextEdit>
 
 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
index 1b7b9aa..1ac3548 100644 (file)
@@ -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<OutputWindow *>(m_tabWidget->currentWidget());
+    Core::OutputWindow *currentWindow = qobject_cast<Core::OutputWindow *>(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();
index 75e6948..ee92c3d 100644 (file)
@@ -34,8 +34,7 @@
 #ifndef APPOUTPUTPANE_H
 #define APPOUTPUTPANE_H
 
-#include "outputwindow.h"
-
+#include <coreplugin/outputwindow.h>
 #include <coreplugin/ioutputpane.h>
 
 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;
index 21c6c83..bc497c4 100644 (file)
@@ -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);
index 86a812d..9ec3355 100644 (file)
@@ -33,8 +33,8 @@
 #ifndef COMPILEOUTPUTWINDOW_H
 #define COMPILEOUTPUTWINDOW_H
 
-#include "outputwindow.h"
 #include "buildstep.h"
+#include <coreplugin/outputwindow.h>
 #include <coreplugin/ioutputpane.h>
 
 #include <QtCore/QHash>
@@ -86,7 +86,7 @@ private slots:
     void updateWordWrapMode();
 
 private:
-    OutputWindow *m_outputWindow;
+    Core::OutputWindow *m_outputWindow;
     QHash<unsigned int, int> m_taskPositions;
     ShowOutputTaskHandler * m_handler;
 };
index 6d44216..eee65b4 100644 (file)
@@ -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"
index 488a213..60cadb2 100644 (file)
@@ -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 \