From 24a9a22b53464403df3e5bb4f13d960045bb9dd3 Mon Sep 17 00:00:00 2001
From: Erik Verbruggen <erik.verbruggen@nokia.com>
Date: Mon, 19 Apr 2010 15:55:02 +0200
Subject: [PATCH] Added colors to the "Application Output" panel.

---
 .../projectexplorer/outputformatter.cpp       | 61 +++++++++++++++++--
 src/plugins/projectexplorer/outputformatter.h | 18 +++++-
 .../qmlprojectmanager/qmloutputformatter.cpp  | 19 +++---
 .../qmlprojectmanager/qmloutputformatter.h    |  1 -
 .../qmlprojectruncontrol.cpp                  |  4 +-
 5 files changed, 83 insertions(+), 20 deletions(-)

diff --git a/src/plugins/projectexplorer/outputformatter.cpp b/src/plugins/projectexplorer/outputformatter.cpp
index f2347267a61..3127772c132 100644
--- a/src/plugins/projectexplorer/outputformatter.cpp
+++ b/src/plugins/projectexplorer/outputformatter.cpp
@@ -29,13 +29,25 @@
 
 #include "outputformatter.h"
 
+#include <texteditor/fontsettings.h>
+#include <texteditor/texteditorsettings.h>
+
 #include <QtGui/QPlainTextEdit>
 
 using namespace ProjectExplorer;
+using namespace TextEditor;
 
 OutputFormatter::OutputFormatter(QObject *parent)
     : QObject(parent)
+    , m_formats(0)
 {
+    initFormats();
+}
+
+OutputFormatter::~OutputFormatter()
+{
+    if (m_formats)
+        delete[] m_formats;
 }
 
 QPlainTextEdit *OutputFormatter::plainTextEdit() const
@@ -49,17 +61,24 @@ void OutputFormatter::setPlainTextEdit(QPlainTextEdit *plainText)
     setParent(m_plainTextEdit);
 }
 
-void OutputFormatter::appendApplicationOutput(const QString &text, bool /*onStdErr*/)
+void OutputFormatter::appendApplicationOutput(const QString &text, bool onStdErr)
 {
-    QTextCharFormat format;
-    format.setForeground(plainTextEdit()->palette().text().color());
-    plainTextEdit()->setCurrentCharFormat(format);
+    if (onStdErr)
+        setFormat(StdErrFormat);
+    else
+        setFormat(StdOutFormat);
+
     plainTextEdit()->insertPlainText(text);
 }
 
 void OutputFormatter::appendMessage(const QString &text, bool isError)
 {
-    appendApplicationOutput(text, isError);
+    if (isError)
+        setFormat(ErrorMessageFormat);
+    else
+        setFormat(NormalMessageFormat);
+
+    plainTextEdit()->insertPlainText(text);
 }
 
 void OutputFormatter::mousePressEvent(QMouseEvent * /*e*/)
@@ -70,3 +89,35 @@ void OutputFormatter::mouseReleaseEvent(QMouseEvent * /*e*/)
 
 void OutputFormatter::mouseMoveEvent(QMouseEvent * /*e*/)
 {}
+
+void OutputFormatter::initFormats()
+{
+    FontSettings fs = TextEditorSettings::instance()->fontSettings();
+    QFont font = fs.font();
+    QFont boldFont = font;
+    boldFont.setBold(true);
+
+    m_formats = new QTextCharFormat[NumberOfFormats];
+
+    // NormalMessageFormat
+    m_formats[NormalMessageFormat].setFont(boldFont);
+    m_formats[NormalMessageFormat].setForeground(QColor(Qt::black));
+
+    // ErrorMessageFormat
+    m_formats[ErrorMessageFormat].setFont(boldFont);
+    m_formats[ErrorMessageFormat].setForeground(QColor(Qt::red));
+
+    // StdOutFormat
+    m_formats[StdOutFormat].setFont(font);
+    m_formats[StdOutFormat].setForeground(QColor(Qt::black));
+
+    // StdErrFormat
+    m_formats[StdErrFormat].setFont(font);
+    m_formats[StdErrFormat].setForeground(QColor(Qt::red));
+}
+
+void OutputFormatter::setFormat(Format theFormat) const
+{
+    if (m_formats)
+        plainTextEdit()->setCurrentCharFormat(m_formats[theFormat]);
+}
diff --git a/src/plugins/projectexplorer/outputformatter.h b/src/plugins/projectexplorer/outputformatter.h
index 4bde9197f67..38ed672b9b7 100644
--- a/src/plugins/projectexplorer/outputformatter.h
+++ b/src/plugins/projectexplorer/outputformatter.h
@@ -35,8 +35,9 @@
 #include <QtCore/QObject>
 #include <QtCore/QString>
 
-QT_FORWARD_DECLARE_CLASS(QPlainTextEdit);
 QT_FORWARD_DECLARE_CLASS(QMouseEvent);
+QT_FORWARD_DECLARE_CLASS(QPlainTextEdit);
+QT_FORWARD_DECLARE_CLASS(QTextCharFormat);
 
 namespace ProjectExplorer {
 
@@ -46,6 +47,7 @@ class PROJECTEXPLORER_EXPORT OutputFormatter: public QObject
 
 public:
     OutputFormatter(QObject *parent = 0);
+    virtual ~OutputFormatter();
 
     QPlainTextEdit *plainTextEdit() const;
     void setPlainTextEdit(QPlainTextEdit *plainText);
@@ -57,8 +59,22 @@ public:
     virtual void mouseReleaseEvent(QMouseEvent *e);
     virtual void mouseMoveEvent(QMouseEvent *e);
 
+protected:
+    enum Format {
+        NormalMessageFormat = 0,
+        ErrorMessageFormat = 1,
+        StdOutFormat = 2,
+        StdErrFormat = 3,
+
+        NumberOfFormats = 4
+    };
+
+    void initFormats();
+    void setFormat(Format theFormat) const;
+
 private:
     QPlainTextEdit *m_plainTextEdit;
+    QTextCharFormat *m_formats;
 };
 
 } // namespace ProjectExplorer
diff --git a/src/plugins/qmlprojectmanager/qmloutputformatter.cpp b/src/plugins/qmlprojectmanager/qmloutputformatter.cpp
index 821a492b611..6b4c2889d9a 100644
--- a/src/plugins/qmlprojectmanager/qmloutputformatter.cpp
+++ b/src/plugins/qmlprojectmanager/qmloutputformatter.cpp
@@ -44,16 +44,18 @@ QmlOutputFormatter::QmlOutputFormatter(QObject *parent)
 {
 }
 
-void QmlOutputFormatter::appendApplicationOutput(const QString &text, bool /*onStdErr*/)
+void QmlOutputFormatter::appendApplicationOutput(const QString &text, bool onStdErr)
 {
-    QTextCharFormat normalFormat, linkFormat;
-    normalFormat.setForeground(plainTextEdit()->palette().text().color());
-    linkFormat.setForeground(plainTextEdit()->palette().link().color());
+    if (onStdErr)
+        setFormat(StdErrFormat);
+    else
+        setFormat(StdOutFormat);
+
+    QTextCharFormat normalFormat = plainTextEdit()->currentCharFormat();
+    QTextCharFormat linkFormat = normalFormat;
     linkFormat.setUnderlineStyle(QTextCharFormat::SingleUnderline);
     linkFormat.setAnchor(true);
 
-    plainTextEdit()->setCurrentCharFormat(normalFormat);
-
     // Create links from QML errors (anything of the form "file:///...:[line]:[column]:")
     int index = 0;
     while (m_qmlError.indexIn(text, index) != -1) {
@@ -72,11 +74,6 @@ void QmlOutputFormatter::appendApplicationOutput(const QString &text, bool /*onS
     plainTextEdit()->insertPlainText(text.mid(index));
 }
 
-void QmlOutputFormatter::appendMessage(const QString &text, bool isError)
-{
-    appendApplicationOutput(text, isError);
-}
-
 void QmlOutputFormatter::mousePressEvent(QMouseEvent * /*e*/)
 {
     m_mousePressed = true;
diff --git a/src/plugins/qmlprojectmanager/qmloutputformatter.h b/src/plugins/qmlprojectmanager/qmloutputformatter.h
index 4d02a0c493f..8d0e64d6d51 100644
--- a/src/plugins/qmlprojectmanager/qmloutputformatter.h
+++ b/src/plugins/qmlprojectmanager/qmloutputformatter.h
@@ -43,7 +43,6 @@ public:
     QmlOutputFormatter(QObject *parent = 0);
 
     virtual void appendApplicationOutput(const QString &text, bool onStdErr);
-    virtual void appendMessage(const QString &text, bool isError);
 
     virtual void mousePressEvent(QMouseEvent *e);
     virtual void mouseReleaseEvent(QMouseEvent *e);
diff --git a/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp b/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp
index aa4a0a37fe7..de6e9bba300 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp
+++ b/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp
@@ -89,8 +89,8 @@ void QmlRunControl::start()
     Debugger::DebuggerUISwitcher::instance()->setActiveLanguage(Qml::Constants::LANG_QML);
 
     emit started();
-    emit addToOutputWindow(this, tr("Starting %1 %2").arg(QDir::toNativeSeparators(m_executable),
-                           m_commandLineArguments.join(QLatin1String(" "))), false);
+    emit appendMessage(this, tr("Starting %1 %2").arg(QDir::toNativeSeparators(m_executable),
+                                                      m_commandLineArguments.join(QLatin1String(" "))), false);
 }
 
 void QmlRunControl::stop()
-- 
GitLab