From 2407f4258fba0c603e2e11cfd840cf413412b728 Mon Sep 17 00:00:00 2001
From: Christian Kandeler <christian.kandeler@nokia.com>
Date: Thu, 31 Mar 2011 18:22:22 +0200
Subject: [PATCH] ProjectExplorer: Adapt output window clients to fixed newline
 handling.

Reviewed-by: dt
---
 .../projectexplorer/abstractprocessstep.cpp   |  8 +--
 src/plugins/projectexplorer/buildmanager.cpp  | 50 +++++++++----------
 src/plugins/projectexplorer/buildmanager.h    |  4 +-
 src/plugins/projectexplorer/buildstep.h       |  6 ++-
 .../qt-maemo/maemopackagecreationstep.cpp     |  9 ++--
 .../qt-s60/s60createpackagestep.cpp           |  4 +-
 6 files changed, 45 insertions(+), 36 deletions(-)

diff --git a/src/plugins/projectexplorer/abstractprocessstep.cpp b/src/plugins/projectexplorer/abstractprocessstep.cpp
index ddc37f12dec..8fcf218f79e 100644
--- a/src/plugins/projectexplorer/abstractprocessstep.cpp
+++ b/src/plugins/projectexplorer/abstractprocessstep.cpp
@@ -175,7 +175,7 @@ void AbstractProcessStep::run(QFutureInterface<bool> &fi)
 
 void AbstractProcessStep::processStarted()
 {
-    emit addOutput(tr("Starting: \"%1\" %2\n")
+    emit addOutput(tr("Starting: \"%1\" %2")
                    .arg(QDir::toNativeSeparators(m_param.effectiveCommand()),
                         m_param.prettyArguments()),
                    BuildStep::MessageOutput);
@@ -222,7 +222,7 @@ void AbstractProcessStep::stdOutput(const QString &line)
 {
     if (m_outputParserChain)
         m_outputParserChain->stdOutput(line);
-    emit addOutput(line, BuildStep::NormalOutput);
+    emit addOutput(line, BuildStep::NormalOutput, BuildStep::DontAppendNewline);
 }
 
 void AbstractProcessStep::processReadyReadStdError()
@@ -238,7 +238,7 @@ void AbstractProcessStep::stdError(const QString &line)
 {
     if (m_outputParserChain)
         m_outputParserChain->stdError(line);
-    emit addOutput(line, BuildStep::ErrorOutput);
+    emit addOutput(line, BuildStep::ErrorOutput, BuildStep::DontAppendNewline);
 }
 
 void AbstractProcessStep::checkForCancel()
@@ -301,7 +301,7 @@ void AbstractProcessStep::taskAdded(const ProjectExplorer::Task &task)
 
 void AbstractProcessStep::outputAdded(const QString &string, ProjectExplorer::BuildStep::OutputFormat format)
 {
-    emit addOutput(string, format);
+    emit addOutput(string, format, BuildStep::DontAppendNewline);
 }
 
 void AbstractProcessStep::slotProcessFinished(int, QProcess::ExitStatus)
diff --git a/src/plugins/projectexplorer/buildmanager.cpp b/src/plugins/projectexplorer/buildmanager.cpp
index e737957ac6e..d934305628b 100644
--- a/src/plugins/projectexplorer/buildmanager.cpp
+++ b/src/plugins/projectexplorer/buildmanager.cpp
@@ -136,6 +136,7 @@ BuildManager::BuildManager(ProjectExplorerPlugin *parent)
     pm->addObject(d->m_taskWindow);
 
     qRegisterMetaType<ProjectExplorer::BuildStep::OutputFormat>();
+    qRegisterMetaType<ProjectExplorer::BuildStep::OutputNewlineSetting>();
 
     connect(d->m_taskWindow, SIGNAL(tasksChanged()),
             this, SLOT(updateTaskCount()));
@@ -198,10 +199,7 @@ void BuildManager::cancel()
         // (And we want those to be before the cancel message.)
         QTimer::singleShot(0, this, SLOT(emitCancelMessage()));
 
-        disconnect(d->m_currentBuildStep, SIGNAL(addTask(ProjectExplorer::Task)),
-                   this, SLOT(addToTaskWindow(ProjectExplorer::Task)));
-        disconnect(d->m_currentBuildStep, SIGNAL(addOutput(QString, ProjectExplorer::BuildStep::OutputFormat)),
-                   this, SLOT(addToOutputWindow(QString, ProjectExplorer::BuildStep::OutputFormat)));
+        disconnectOutput(d->m_currentBuildStep);
         decrementActiveBuildSteps(d->m_currentBuildStep->buildConfiguration()->target()->project());
 
         d->m_progressFutureInterface->setProgressValueAndText(d->m_progress*100, tr("Build canceled")); //TODO NBS fix in qtconcurrent
@@ -229,17 +227,14 @@ void BuildManager::finish()
 
 void BuildManager::emitCancelMessage()
 {
-    emit addToOutputWindow(tr("Canceled build."), BuildStep::ErrorMessageOutput);
+    addToOutputWindow(tr("Canceled build."), BuildStep::ErrorMessageOutput);
 }
 
 void BuildManager::clearBuildQueue()
 {
     foreach (BuildStep *bs, d->m_buildQueue) {
         decrementActiveBuildSteps(bs->buildConfiguration()->target()->project());
-        disconnect(bs, SIGNAL(addTask(ProjectExplorer::Task)),
-                   this, SLOT(addToTaskWindow(ProjectExplorer::Task)));
-        disconnect(bs, SIGNAL(addOutput(QString, ProjectExplorer::BuildStep::OutputFormat)),
-                   this, SLOT(addToOutputWindow(QString, ProjectExplorer::BuildStep::OutputFormat)));
+        disconnectOutput(bs);
     }
 
     d->m_buildQueue.clear();
@@ -329,9 +324,13 @@ void BuildManager::addToTaskWindow(const ProjectExplorer::Task &task)
     d->m_taskHub->addTask(task);
 }
 
-void BuildManager::addToOutputWindow(const QString &string, ProjectExplorer::BuildStep::OutputFormat format)
+void BuildManager::addToOutputWindow(const QString &string, BuildStep::OutputFormat format,
+    BuildStep::OutputNewlineSetting newLineSetting)
 {
-    d->m_outputWindow->appendText(string, format);
+    QString stringToWrite = string;
+    if (newLineSetting == BuildStep::DoAppendNewline)
+        stringToWrite += QLatin1Char('\n');
+    d->m_outputWindow->appendText(stringToWrite, format);
 }
 
 void BuildManager::nextBuildQueue()
@@ -339,11 +338,7 @@ void BuildManager::nextBuildQueue()
     if (d->m_canceling)
         return;
 
-    disconnect(d->m_currentBuildStep, SIGNAL(addTask(ProjectExplorer::Task)),
-               this, SLOT(addToTaskWindow(ProjectExplorer::Task)));
-    disconnect(d->m_currentBuildStep, SIGNAL(addOutput(QString, ProjectExplorer::BuildStep::OutputFormat)),
-               this, SLOT(addToOutputWindow(QString, ProjectExplorer::BuildStep::OutputFormat)));
-
+    disconnectOutput(d->m_currentBuildStep);
     ++d->m_progress;
     d->m_progressFutureInterface->setProgressValueAndText(d->m_progress*100, msgProgress(d->m_progress, d->m_maxProgress));
     decrementActiveBuildSteps(d->m_currentBuildStep->buildConfiguration()->target()->project());
@@ -420,8 +415,8 @@ bool BuildManager::buildQueueAppend(QList<BuildStep *> steps)
         BuildStep *bs = steps.at(i);
         connect(bs, SIGNAL(addTask(ProjectExplorer::Task)),
                 this, SLOT(addToTaskWindow(ProjectExplorer::Task)));
-        connect(bs, SIGNAL(addOutput(QString, ProjectExplorer::BuildStep::OutputFormat)),
-                this, SLOT(addToOutputWindow(QString, ProjectExplorer::BuildStep::OutputFormat)));
+        connect(bs, SIGNAL(addOutput(QString, ProjectExplorer::BuildStep::OutputFormat, ProjectExplorer::BuildStep::OutputNewlineSetting)),
+                this, SLOT(addToOutputWindow(QString, ProjectExplorer::BuildStep::OutputFormat, ProjectExplorer::BuildStep::OutputNewlineSetting)));
         init = bs->init();
         if (!init)
             break;
@@ -437,13 +432,8 @@ bool BuildManager::buildQueueAppend(QList<BuildStep *> steps)
         addToOutputWindow(tr("When executing build step '%1'").arg(bs->displayName()), BuildStep::ErrorOutput);
 
         // disconnect the buildsteps again
-        for (int j = 0; j <= i; ++j) {
-            BuildStep *bs = steps.at(j);
-            disconnect(bs, SIGNAL(addTask(ProjectExplorer::Task)),
-                       this, SLOT(addToTaskWindow(ProjectExplorer::Task)));
-            disconnect(bs, SIGNAL(addOutput(QString, ProjectExplorer::BuildStep::OutputFormat)),
-                       this, SLOT(addToOutputWindow(QString, ProjectExplorer::BuildStep::OutputFormat)));
-        }
+        for (int j = 0; j <= i; ++j)
+            disconnectOutput(steps.at(j));
         return false;
     }
 
@@ -535,4 +525,14 @@ void BuildManager::decrementActiveBuildSteps(Project *pro)
     }
 }
 
+void BuildManager::disconnectOutput(BuildStep *bs)
+{
+    disconnect(bs, SIGNAL(addTask(ProjectExplorer::Task)),
+               this, SLOT(addToTaskWindow(ProjectExplorer::Task)));
+    disconnect(bs, SIGNAL(addOutput(QString, ProjectExplorer::BuildStep::OutputFormat,
+        ProjectExplorer::BuildStep::OutputNewlineSetting)),
+        this, SLOT(addToOutputWindow(QString, ProjectExplorer::BuildStep::OutputFormat,
+            ProjectExplorer::BuildStep::OutputNewlineSetting)));
+}
+
 } // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/buildmanager.h b/src/plugins/projectexplorer/buildmanager.h
index fe1862d6a03..f272bc56af8 100644
--- a/src/plugins/projectexplorer/buildmanager.h
+++ b/src/plugins/projectexplorer/buildmanager.h
@@ -85,7 +85,8 @@ signals:
 
 private slots:
     void addToTaskWindow(const ProjectExplorer::Task &task);
-    void addToOutputWindow(const QString &string, ProjectExplorer::BuildStep::OutputFormat);
+    void addToOutputWindow(const QString &string, ProjectExplorer::BuildStep::OutputFormat,
+        ProjectExplorer::BuildStep::OutputNewlineSetting = BuildStep::DoAppendNewline);
 
     void nextBuildQueue();
     void progressChanged();
@@ -102,6 +103,7 @@ private:
     bool buildQueueAppend(QList<BuildStep *> steps);
     void incrementActiveBuildSteps(Project *pro);
     void decrementActiveBuildSteps(Project *pro);
+    void disconnectOutput(BuildStep *bs);
 
     QScopedPointer<BuildManagerPrivate> d;
 };
diff --git a/src/plugins/projectexplorer/buildstep.h b/src/plugins/projectexplorer/buildstep.h
index 15f3a92235c..29e98b7eaf2 100644
--- a/src/plugins/projectexplorer/buildstep.h
+++ b/src/plugins/projectexplorer/buildstep.h
@@ -106,14 +106,17 @@ public:
     Target *target() const;
 
     enum OutputFormat { NormalOutput, ErrorOutput, MessageOutput, ErrorMessageOutput };
+    enum OutputNewlineSetting { DoAppendNewline, DontAppendNewline };
 
 signals:
     // Add a task.
     void addTask(const ProjectExplorer::Task &task);
+
     // The string is added to the generated output, usually in the output
     // window.
     // It should be in plain text, with the format in the parameter
-    void addOutput(const QString &string, ProjectExplorer::BuildStep::OutputFormat format);
+    void addOutput(const QString &string, ProjectExplorer::BuildStep::OutputFormat format,
+        ProjectExplorer::BuildStep::OutputNewlineSetting newlineSetting = DoAppendNewline);
 };
 
 class PROJECTEXPLORER_EXPORT IBuildStepFactory :
@@ -175,5 +178,6 @@ signals:
 } // namespace ProjectExplorer
 
 Q_DECLARE_METATYPE(ProjectExplorer::BuildStep::OutputFormat)
+Q_DECLARE_METATYPE(ProjectExplorer::BuildStep::OutputNewlineSetting)
 
 #endif // BUILDSTEP_H
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.cpp
index 53aa0da54e2..ec73839f734 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationstep.cpp
@@ -142,11 +142,14 @@ void AbstractMaemoPackageCreationStep::handleBuildOutput()
     if (!buildProc)
         return;
     const QByteArray &stdOut = buildProc->readAllStandardOutput();
-    if (!stdOut.isEmpty())
-        emit addOutput(QString::fromLocal8Bit(stdOut), BuildStep::NormalOutput);
+    if (!stdOut.isEmpty()) {
+        emit addOutput(QString::fromLocal8Bit(stdOut), BuildStep::NormalOutput,
+            BuildStep::DontAppendNewline);
+    }
     const QByteArray &errorOut = buildProc->readAllStandardError();
     if (!errorOut.isEmpty()) {
-        emit addOutput(QString::fromLocal8Bit(errorOut), BuildStep::ErrorOutput);
+        emit addOutput(QString::fromLocal8Bit(errorOut), BuildStep::ErrorOutput,
+            BuildStep::DontAppendNewline);
     }
 }
 
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60createpackagestep.cpp b/src/plugins/qt4projectmanager/qt-s60/s60createpackagestep.cpp
index d2ac2e15e21..bc83c73e0d4 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60createpackagestep.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60createpackagestep.cpp
@@ -583,7 +583,7 @@ void S60CreatePackageStep::stdOutput(const QString &line)
 {
     if (m_outputParserChain)
         m_outputParserChain->stdOutput(line);
-    emit addOutput(line, BuildStep::NormalOutput);
+    emit addOutput(line, BuildStep::NormalOutput, BuildStep::DontAppendNewline);
 }
 
 void S60CreatePackageStep::processReadyReadStdError()
@@ -599,7 +599,7 @@ void S60CreatePackageStep::stdError(const QString &line)
 {
     if (m_outputParserChain)
         m_outputParserChain->stdError(line);
-    emit addOutput(line, BuildStep::ErrorOutput);
+    emit addOutput(line, BuildStep::ErrorOutput, BuildStep::DontAppendNewline);
 }
 
 void S60CreatePackageStep::checkForCancel()
-- 
GitLab