OSDN Git Service

QmlProject: Disable debug action if qmlobserver cannot be built
authorKai Koehne <kai.koehne@nokia.com>
Tue, 5 Oct 2010 08:54:05 +0000 (10:54 +0200)
committerKai Koehne <kai.koehne@nokia.com>
Tue, 5 Oct 2010 10:45:10 +0000 (12:45 +0200)
QmlObserver right now requires 4.7.1 minimum. There's no gain in
telling the user that he needs qmlobserver to debug, if it can't be
build with 4.7.0 anyway.

Reviewed-by: Christiaan Janssen
src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp
src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h
src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp

index c86625b..9cec81f 100644 (file)
@@ -114,26 +114,22 @@ Internal::QmlProjectTarget *QmlProjectRunConfiguration::qmlTarget() const
 
 QString QmlProjectRunConfiguration::viewerPath() const
 {
-    if (m_qtVersionId == -1)
+    Qt4ProjectManager::QtVersion *version = qtVersion();
+    if (!version) {
         return QString();
-
-    Qt4ProjectManager::QtVersionManager *versionManager = Qt4ProjectManager::QtVersionManager::instance();
-    Qt4ProjectManager::QtVersion *version = versionManager->version(m_qtVersionId);
-    QTC_ASSERT(version, return QString());
-
-    return version->qmlviewerCommand();
+    } else {
+        return version->qmlviewerCommand();
+    }
 }
 
 QString QmlProjectRunConfiguration::observerPath() const
 {
-    if (m_qtVersionId == -1)
+    Qt4ProjectManager::QtVersion *version = qtVersion();
+    if (!version) {
         return QString();
-
-    Qt4ProjectManager::QtVersionManager *versionManager = Qt4ProjectManager::QtVersionManager::instance();
-    Qt4ProjectManager::QtVersion *version = versionManager->version(m_qtVersionId);
-    QTC_ASSERT(version, return QString());
-
-    return version->qmlObserverTool();
+    } else {
+        return version->qmlObserverTool();
+    }
 }
 
 QStringList QmlProjectRunConfiguration::viewerArguments() const
@@ -162,6 +158,18 @@ QString QmlProjectRunConfiguration::workingDirectory() const
     return projectFile.absolutePath();
 }
 
+Qt4ProjectManager::QtVersion *QmlProjectRunConfiguration::qtVersion() const
+{
+    if (m_qtVersionId == -1)
+        return 0;
+
+    Qt4ProjectManager::QtVersionManager *versionManager = Qt4ProjectManager::QtVersionManager::instance();
+    Qt4ProjectManager::QtVersion *version = versionManager->version(m_qtVersionId);
+    QTC_ASSERT(version, return 0);
+
+    return version;
+}
+
 static bool caseInsensitiveLessThan(const QString &s1, const QString &s2)
 {
     return s1.toLower() < s2.toLower();
@@ -381,10 +389,10 @@ void QmlProjectRunConfiguration::updateEnabled()
     bool newValue = (QFileInfo(viewerPath()).exists()
                     || QFileInfo(observerPath()).exists()) && qmlFileFound;
 
-    if (m_isEnabled != newValue) {
-        m_isEnabled = newValue;
-        emit isEnabledChanged(m_isEnabled);
-    }
+
+    // Always emit change signal to force reevaluation of run/debug buttons
+    m_isEnabled = newValue;
+    emit isEnabledChanged(m_isEnabled);
 }
 
 void QmlProjectRunConfiguration::updateQtVersions()
index 649d983..9cae939 100644 (file)
@@ -74,6 +74,7 @@ public:
     QString observerPath() const;
     QStringList viewerArguments() const;
     QString workingDirectory() const;
+    Qt4ProjectManager::QtVersion *qtVersion() const;
 
     // RunConfiguration
     virtual QWidget *createConfigurationWidget();
index 84a07c2..757b23d 100644 (file)
@@ -43,6 +43,8 @@
 #include <debugger/debuggeruiswitcher.h>
 #include <debugger/debuggerengine.h>
 #include <qmljsinspector/qmljsinspectorconstants.h>
+#include <qt4projectmanager/qtversionmanager.h>
+#include <qt4projectmanager/qmlobservertool.h>
 #include <qt4projectmanager/qt4projectmanagerconstants.h>
 
 #include <QApplication>
@@ -148,9 +150,18 @@ bool QmlRunControlFactory::canRun(RunConfiguration *runConfiguration,
     } else {
         bool qmlDebugSupportInstalled = Debugger::DebuggerUISwitcher::instance()->supportedLanguages()
                                         & Debugger::QmlLanguage;
-        // don't check for qmlobserver already here because we can't update the run buttons
-        // if it has been built in the meantime
-        return (config != 0) && qmlDebugSupportInstalled;
+
+        if (config && qmlDebugSupportInstalled) {
+            if (!config->observerPath().isEmpty()) {
+                return true;
+            }
+
+            if (config->qtVersion() && Qt4ProjectManager::QmlObserverTool::canBuild(config->qtVersion())) {
+                return true;
+            } else {
+                return false;
+            }
+        }
     }
 
     return false;