From 4dd31391a23ea68597861ce63005a1ce24a08e8e Mon Sep 17 00:00:00 2001
From: Kai Koehne <kai.koehne@nokia.com>
Date: Tue, 21 Aug 2012 16:26:23 +0200
Subject: [PATCH] Qt Versions: Differentiate between qmlscene and qmlviewer

Qt5 features both qmlviewer (QtQuick1) and qmlscene. We can't just
assume that everybody wants to use qmlscene.

Change-Id: I6668b7776869826575ce035f1e9ace47908013ff
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
---
 .../qt-desktop/desktopqtversion.cpp           |  2 ++
 .../qt-desktop/simulatorqtversion.cpp         |  2 ++
 src/plugins/qtsupport/baseqtversion.cpp       | 30 ++++++++++++-------
 src/plugins/qtsupport/baseqtversion.h         |  4 ++-
 4 files changed, 27 insertions(+), 11 deletions(-)

diff --git a/src/plugins/qt4projectmanager/qt-desktop/desktopqtversion.cpp b/src/plugins/qt4projectmanager/qt-desktop/desktopqtversion.cpp
index 9f3b9a1cf45..64b15785404 100644
--- a/src/plugins/qt4projectmanager/qt-desktop/desktopqtversion.cpp
+++ b/src/plugins/qt4projectmanager/qt-desktop/desktopqtversion.cpp
@@ -71,6 +71,8 @@ QString DesktopQtVersion::type() const
 QStringList DesktopQtVersion::warningReason() const
 {
     QStringList ret = BaseQtVersion::warningReason();
+    if (qtVersion() >= QtSupport::QtVersionNumber(5, 0, 0) && qmlsceneCommand().isEmpty())
+        ret << QCoreApplication::translate("Qt Version", "No qmlscene installed.");
     if (qtVersion() >= QtSupport::QtVersionNumber(4, 7, 0) && qmlviewerCommand().isEmpty())
         ret << QCoreApplication::translate("QtVersion", "No qmlviewer installed.");
     return ret;
diff --git a/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversion.cpp b/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversion.cpp
index fd114e78566..7619a25b15c 100644
--- a/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversion.cpp
+++ b/src/plugins/qt4projectmanager/qt-desktop/simulatorqtversion.cpp
@@ -71,6 +71,8 @@ QString SimulatorQtVersion::type() const
 QStringList SimulatorQtVersion::warningReason() const
 {
     QStringList ret = BaseQtVersion::warningReason();
+    if (qtVersion() >= QtSupport::QtVersionNumber(5, 0, 0) && qmlsceneCommand().isEmpty())
+        ret << QCoreApplication::translate("QtVersion", "No qmlscene installed.");
     if (qtVersion() >= QtSupport::QtVersionNumber(4, 7, 0) && qmlviewerCommand().isEmpty())
         ret << QCoreApplication::translate("QtVersion", "No qmlviewer installed.");
     return ret;
diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp
index 82b1b585f94..76539bef173 100644
--- a/src/plugins/qtsupport/baseqtversion.cpp
+++ b/src/plugins/qtsupport/baseqtversion.cpp
@@ -601,6 +601,16 @@ QString BaseQtVersion::linguistCommand() const
     return m_linguistCommand;
 }
 
+QString BaseQtVersion::qmlsceneCommand() const
+{
+    if (!isValid())
+        return QString();
+
+    if (m_qmlsceneCommand.isNull())
+        m_qmlsceneCommand = findQtBinary(QmlScene);
+    return m_qmlsceneCommand;
+}
+
 QString BaseQtVersion::qmlviewerCommand() const
 {
     if (!isValid())
@@ -619,6 +629,7 @@ QString BaseQtVersion::findQtBinary(Binaries binary) const
     } else {
         ensureMkSpecParsed();
         switch (binary) {
+        case QmlScene:
         case QmlViewer:
             baseDir = m_mkspecValues.value(QLatin1String("QT.qml.bins"));
             break;
@@ -642,22 +653,21 @@ QString BaseQtVersion::findQtBinary(Binaries binary) const
 
     QStringList possibleCommands;
     switch (binary) {
-    case QmlViewer: {
-        if (qtVersion() < QtVersionNumber(5, 0, 0)) {
+    case QmlScene: {
 #if defined(Q_OS_WIN)
-            possibleCommands << QLatin1String("qmlviewer.exe");
-#elif defined(Q_OS_MAC)
-            possibleCommands << QLatin1String("QMLViewer.app/Contents/MacOS/QMLViewer");
+        possibleCommands << QLatin1String("qmlscene.exe");
 #else
-            possibleCommands << QLatin1String("qmlviewer");
+        possibleCommands << QLatin1String("qmlscene");
 #endif
-        } else {
+    }
+    case QmlViewer: {
 #if defined(Q_OS_WIN)
-            possibleCommands << QLatin1String("qmlscene.exe");
+        possibleCommands << QLatin1String("qmlviewer.exe");
+#elif defined(Q_OS_MAC)
+        possibleCommands << QLatin1String("QMLViewer.app/Contents/MacOS/QMLViewer");
 #else
-            possibleCommands << QLatin1String("qmlscene");
+        possibleCommands << QLatin1String("qmlviewer");
 #endif
-        }
     }
         break;
     case Designer:
diff --git a/src/plugins/qtsupport/baseqtversion.h b/src/plugins/qtsupport/baseqtversion.h
index 36c833f76c0..674340c7a1b 100644
--- a/src/plugins/qtsupport/baseqtversion.h
+++ b/src/plugins/qtsupport/baseqtversion.h
@@ -138,6 +138,7 @@ public:
     virtual QString uicCommand() const;
     virtual QString designerCommand() const;
     virtual QString linguistCommand() const;
+    QString qmlsceneCommand() const;
     QString qmlviewerCommand() const;
 
     virtual QString qtVersionString() const;
@@ -239,7 +240,7 @@ private:
     void ctor(const Utils::FileName &qmakePath);
     void updateSourcePath() const;
     void updateVersionInfo() const;
-    enum Binaries { QmlViewer, Designer, Linguist, Uic };
+    enum Binaries { QmlViewer, QmlScene, Designer, Linguist, Uic };
     QString findQtBinary(Binaries binary) const;
     void updateMkspec() const;
     void setId(int id); // used by the qtversionmanager for legacy restore
@@ -276,6 +277,7 @@ private:
     mutable QString m_uicCommand;
     mutable QString m_designerCommand;
     mutable QString m_linguistCommand;
+    mutable QString m_qmlsceneCommand;
     mutable QString m_qmlviewerCommand;
 
     mutable bool m_qmakeIsExecutable;
-- 
GitLab