diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp index c86625b3a9468b983d7f1ae528974966487fbf4d..9cec81f76135944fd32d9842bb87c227165df1b6 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp @@ -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() diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h index 649d983fa497ca8034da3dc5a74296a17d6f541b..9cae93926283fb9ca1892b316df153a6b490907a 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h +++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h @@ -74,6 +74,7 @@ public: QString observerPath() const; QStringList viewerArguments() const; QString workingDirectory() const; + Qt4ProjectManager::QtVersion *qtVersion() const; // RunConfiguration virtual QWidget *createConfigurationWidget(); diff --git a/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp b/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp index 84a07c2df9f65cc595d461f1622b3cd829795c94..757b23dc272bf01e8f7347387429090f58da9ade 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectruncontrol.cpp @@ -43,6 +43,8 @@ #include #include #include +#include +#include #include #include @@ -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;