From 646ec206330fa835233b4492491a994b64ee9bb3 Mon Sep 17 00:00:00 2001
From: Christian Kamm <christian.d.kamm@nokia.com>
Date: Mon, 4 Oct 2010 09:27:25 +0200
Subject: [PATCH] Debugging helpers: Only fail if there was a chance of
 success.

Task-number: QTCREATORBUG-2563
Reviewed-by: Kai Koehne
---
 src/plugins/qt4projectmanager/qmldumptool.cpp |  2 +-
 src/plugins/qt4projectmanager/qmldumptool.h   |  2 +-
 .../qt4projectmanager/qmlobservertool.cpp     |  2 +-
 .../qt4projectmanager/qmlobservertool.h       |  2 +-
 .../qt4projectmanager/qtoptionspage.cpp       | 28 +++++++++++++------
 5 files changed, 23 insertions(+), 13 deletions(-)

diff --git a/src/plugins/qt4projectmanager/qmldumptool.cpp b/src/plugins/qt4projectmanager/qmldumptool.cpp
index 0fc5411414f..e39956b8a14 100644
--- a/src/plugins/qt4projectmanager/qmldumptool.cpp
+++ b/src/plugins/qt4projectmanager/qmldumptool.cpp
@@ -126,7 +126,7 @@ static inline QStringList validBinaryFilenames()
             << QLatin1String("qmldump.app/Contents/MacOS/qmldump");
 }
 
-bool QmlDumpTool::canBuild(QtVersion *qtVersion)
+bool QmlDumpTool::canBuild(const QtVersion *qtVersion)
 {
     const QString installHeaders = qtVersion->versionInfo().value("QT_INSTALL_HEADERS");
     const QString header = installHeaders + QLatin1String("/QtDeclarative/private/qdeclarativemetatype_p.h");
diff --git a/src/plugins/qt4projectmanager/qmldumptool.h b/src/plugins/qt4projectmanager/qmldumptool.h
index 3201f7ba3e6..6924690865b 100644
--- a/src/plugins/qt4projectmanager/qmldumptool.h
+++ b/src/plugins/qt4projectmanager/qmldumptool.h
@@ -47,7 +47,7 @@ class QtVersion;
 class QT4PROJECTMANAGER_EXPORT QmlDumpTool : public Utils::BuildableHelperLibrary
 {
 public:
-    static bool canBuild(QtVersion *qtVersion);
+    static bool canBuild(const QtVersion *qtVersion);
     static QString toolForProject(ProjectExplorer::Project *project);
     static QString toolByInstallData(const QString &qtInstallData);
     static QStringList locationsByInstallData(const QString &qtInstallData);
diff --git a/src/plugins/qt4projectmanager/qmlobservertool.cpp b/src/plugins/qt4projectmanager/qmlobservertool.cpp
index 1a456062af0..e444d89bbb6 100644
--- a/src/plugins/qt4projectmanager/qmlobservertool.cpp
+++ b/src/plugins/qt4projectmanager/qmlobservertool.cpp
@@ -51,7 +51,7 @@ static inline QStringList validBinaryFilenames()
             << QLatin1String("QMLObserver.app/Contents/MacOS/QMLObserver");
 }
 
-bool QmlObserverTool::canBuild(QtVersion *qtVersion)
+bool QmlObserverTool::canBuild(const QtVersion *qtVersion)
 {
     return checkMinimumQtVersion(qtVersion->qtVersionString(), 4, 7, 1);
 }
diff --git a/src/plugins/qt4projectmanager/qmlobservertool.h b/src/plugins/qt4projectmanager/qmlobservertool.h
index 89cbca67460..78c8ffc5ae9 100644
--- a/src/plugins/qt4projectmanager/qmlobservertool.h
+++ b/src/plugins/qt4projectmanager/qmlobservertool.h
@@ -48,7 +48,7 @@ class QtVersion;
 class QT4PROJECTMANAGER_EXPORT QmlObserverTool : public Utils::BuildableHelperLibrary
 {
 public:
-    static bool canBuild(QtVersion *qtVersion);
+    static bool canBuild(const QtVersion *qtVersion);
     static QString toolForProject(ProjectExplorer::Project *project);
     static QString toolByInstallData(const QString &qtInstallData);
     static QStringList locationsByInstallData(const QString &qtInstallData);
diff --git a/src/plugins/qt4projectmanager/qtoptionspage.cpp b/src/plugins/qt4projectmanager/qtoptionspage.cpp
index 01798677512..9c3d23dcd77 100644
--- a/src/plugins/qt4projectmanager/qtoptionspage.cpp
+++ b/src/plugins/qt4projectmanager/qtoptionspage.cpp
@@ -33,6 +33,8 @@
 #include "qt4projectmanagerconstants.h"
 #include "qt4target.h"
 #include "qtversionmanager.h"
+#include "qmldumptool.h"
+#include "qmlobservertool.h"
 
 #include <projectexplorer/debugginghelper.h>
 #include <coreplugin/coreconstants.h>
@@ -238,7 +240,9 @@ QtOptionsPageWidget::QtOptionsPageWidget(QWidget *parent, QList<QtVersion *> ver
 
 QIcon QtOptionsPageWidget::debuggerHelperIconForQtVersion(const QtVersion *version)
 {
-    if (version->hasDebuggingHelper() && version->hasQmlDump() && version->hasQmlObserver()) {
+    if (version->hasDebuggingHelper()
+            && (!QmlDumpTool::canBuild(version) || version->hasQmlDump())
+            && (!QmlObserverTool::canBuild(version) || version->hasQmlObserver())) {
         return m_debuggingHelperOkIcon;
     } else if (!version->hasDebuggingHelper() && !version->hasQmlDump() && !version->hasQmlObserver()) {
         return m_debuggingHelperErrorIcon;
@@ -248,7 +252,9 @@ QIcon QtOptionsPageWidget::debuggerHelperIconForQtVersion(const QtVersion *versi
 
 QPixmap QtOptionsPageWidget::debuggerHelperPixmapForQtVersion(const QtVersion *version)
 {
-    if (version->hasDebuggingHelper() && version->hasQmlDump() && version->hasQmlObserver()) {
+    if (version->hasDebuggingHelper()
+            && (!QmlDumpTool::canBuild(version) || version->hasQmlDump())
+            && (!QmlObserverTool::canBuild(version) || version->hasQmlObserver())) {
         return m_debuggingHelperOkPixmap;
     } else if (!version->hasDebuggingHelper() && !version->hasQmlDump() && !version->hasQmlObserver()) {
         return m_debuggingHelperErrorPixmap;
@@ -311,7 +317,9 @@ void QtOptionsPageWidget::debuggingHelperBuildFinished(const QString &name, cons
     QTC_ASSERT(item, return)
     item->setData(2, Qt::UserRole, output);
     QSharedPointerQtVersion qtVersion = m_versions.at(index);
-    const bool success = qtVersion->hasDebuggingHelper() && qtVersion->hasQmlDump() && qtVersion->hasQmlObserver();
+    const bool success = qtVersion->hasDebuggingHelper()
+            && (!QmlDumpTool::canBuild(qtVersion.data()) || qtVersion->hasQmlDump())
+            && (!QmlObserverTool::canBuild(qtVersion.data()) || qtVersion->hasQmlObserver());
     item->setData(2, Qt::DecorationRole, debuggerHelperIconForQtVersion(qtVersion.data()));
 
     // Update bottom control if the selection is still the same
@@ -404,12 +412,16 @@ static inline QString msgHtmlHelperToolTip(const QString &gdbHelperPath, const Q
     QString notFound = QtOptionsPageWidget::tr("Binary not found");
 
     //: Tooltip showing the debugging helper library file.
-    return QtOptionsPageWidget::tr("<html><body><table><tr><td>File:</td><td><pre>%1</pre></td></tr>"
+    return QtOptionsPageWidget::tr("<html><body><table>"
+                                   "<tr><td colspan=\"2\"><b>GDB debugging helpers</b></td></tr>"
+                                   "<tr><td>File:</td><td><pre>%1</pre></td></tr>"
                                    "<tr><td>Last&nbsp;modified:</td><td>%2</td></tr>"
                                    "<tr><td>Size:</td><td>%3 Bytes</td></tr>"
+                                   "<tr><td colspan=\"2\"><b>QML type dumper</b></td></tr>"
                                    "<tr><td>File:</td><td><pre>%4</pre></td></tr>"
                                    "<tr><td>Last&nbsp;modified:</td><td>%5</td></tr>"
                                    "<tr><td>Size:</td><td>%6 Bytes</td></tr>"
+                                   "<tr><td colspan=\"2\"><b>QML observer</b></td></tr>"
                                    "<tr><td>File:</td><td><pre>%7</pre></td></tr>"
                                    "<tr><td>Last&nbsp;modified:</td><td>%8</td></tr>"
                                    "<tr><td>Size:</td><td>%9 Bytes</td></tr>"
@@ -432,12 +444,10 @@ void QtOptionsPageWidget::updateDebuggingHelperStateLabel(const QtVersion *versi
 {
     QString tooltip;
     if (version && version->isValid()) {
-        const bool hasHelpers = version->hasDebuggingHelper() && version->hasQmlDump() && version->hasQmlObserver();
         m_ui->debuggingHelperStateLabel->setPixmap(debuggerHelperPixmapForQtVersion(version));
-        if (hasHelpers)
-            tooltip = msgHtmlHelperToolTip(version->debuggingHelperLibrary(),
-                                           version->qmlDumpTool(),
-                                           version->qmlObserverTool());
+        tooltip = msgHtmlHelperToolTip(version->debuggingHelperLibrary(),
+                                       version->qmlDumpTool(),
+                                       version->qmlObserverTool());
     } else {
         m_ui->debuggingHelperStateLabel->setPixmap(QPixmap());
     }
-- 
GitLab