From 8fd395feb45f7f64e47191fdf22ca4d5ba0dc970 Mon Sep 17 00:00:00 2001
From: con <qtc-committer@nokia.com>
Date: Tue, 23 Jun 2009 14:14:29 +0200
Subject: [PATCH] Update the enabled state of run configurations on toolchain
 change.

And if Qt version changed.
---
 src/plugins/projectexplorer/project.h         |  1 +
 .../projectexplorer/projectexplorer.cpp       | 20 ++++++++++--------
 .../runsettingspropertiespage.cpp             |  2 ++
 .../qt4projectmanager/qt-s60/qt-s60-todo.txt  |  5 +----
 src/plugins/qt4projectmanager/qt4project.cpp  | 21 +++++++++++++++++--
 src/plugins/qt4projectmanager/qt4project.h    |  1 +
 6 files changed, 35 insertions(+), 15 deletions(-)

diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h
index 0af783ec4fb..63737f6932e 100644
--- a/src/plugins/projectexplorer/project.h
+++ b/src/plugins/projectexplorer/project.h
@@ -148,6 +148,7 @@ signals:
     void fileListChanged();
     void activeBuildConfigurationChanged();
     void activeRunConfigurationChanged();
+    void runConfigurationsEnabledStateChanged();
     void removedRunConfiguration(const QString &name);
     void addedRunConfiguration(const QString &name);
     // This signal is jut there for updating the tree list in the buildsettings wizard
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index bbab5eca3bf..ccaa5750dfe 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -1887,15 +1887,17 @@ void ProjectExplorerPlugin::populateRunConfigurationMenu()
 
     foreach (const Project *pro, m_session->projects()) {
         foreach (QSharedPointer<RunConfiguration> runConfiguration, pro->runConfigurations()) {
-            const QString title = QString("%1 (%2)").arg(pro->name(), runConfiguration->name());
-            QAction *act = new QAction(title, m_runConfigurationActionGroup);
-            act->setCheckable(true);
-            act->setData(qVariantFromValue(runConfiguration));
-            act->setChecked(runConfiguration == activeRunConfiguration);
-            m_runConfigurationMenu->addAction(act);
-            if (debug)
-                qDebug() << "RunConfiguration" << runConfiguration << "project:" << pro->name()
-                         << "active:" << (runConfiguration == activeRunConfiguration);
+            if (runConfiguration->isEnabled()) {
+                const QString title = QString("%1 (%2)").arg(pro->name(), runConfiguration->name());
+                QAction *act = new QAction(title, m_runConfigurationActionGroup);
+                act->setCheckable(true);
+                act->setData(qVariantFromValue(runConfiguration));
+                act->setChecked(runConfiguration == activeRunConfiguration);
+                m_runConfigurationMenu->addAction(act);
+                if (debug)
+                    qDebug() << "RunConfiguration" << runConfiguration << "project:" << pro->name()
+                             << "active:" << (runConfiguration == activeRunConfiguration);
+            }
         }
     }
 
diff --git a/src/plugins/projectexplorer/runsettingspropertiespage.cpp b/src/plugins/projectexplorer/runsettingspropertiespage.cpp
index 9e9df69fb5a..4a63d1aaa9e 100644
--- a/src/plugins/projectexplorer/runsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/runsettingspropertiespage.cpp
@@ -196,6 +196,8 @@ RunSettingsWidget::RunSettingsWidget(Project *project)
 
     connect(m_project, SIGNAL(activeRunConfigurationChanged()),
             this, SLOT(activeRunConfigurationChanged()));
+    connect(m_project, SIGNAL(runConfigurationsEnabledStateChanged()),
+            this, SLOT(initRunConfigurationComboBox()));
 
     initRunConfigurationComboBox();
     const QList<QSharedPointer<RunConfiguration> > runConfigurations = m_project->runConfigurations();
diff --git a/src/plugins/qt4projectmanager/qt-s60/qt-s60-todo.txt b/src/plugins/qt4projectmanager/qt-s60/qt-s60-todo.txt
index 7dc3c3c6072..38a01bdbb7a 100644
--- a/src/plugins/qt4projectmanager/qt-s60/qt-s60-todo.txt
+++ b/src/plugins/qt4projectmanager/qt-s60/qt-s60-todo.txt
@@ -7,16 +7,13 @@
 * QtVersion:
     * gui for overriding the default make target if necessary,
       make arguments --> make options
-    * more general "debug / release" configuration to be used in toolchain???
     * build parser should be defined/created by toolchain, not make step
 
 * Debugging helpers
     * must probably be compiled for different toolchains
 
 * Run Configurations
-    * enabled property doesn't update correctly
-        * missing signals qtVersionChanged + toolChainChanged
-    * handling of active run config getting disabled
+    * handling of active run config getting disabled not optimal yet
 
 * Run on device
     * makesis, signsis and applicationinstaller don't report errors back
diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp
index d3587f60229..bdddeeb6df9 100644
--- a/src/plugins/qt4projectmanager/qt4project.cpp
+++ b/src/plugins/qt4projectmanager/qt4project.cpp
@@ -834,6 +834,7 @@ int Qt4Project::qtVersionId(const QString &buildConfiguration) const
 void Qt4Project::setQtVersion(const QString &buildConfiguration, int id)
 {
     setValue(buildConfiguration, "QtVersionId", id);
+    updateActiveRunConfiguration();
 }
 
 void Qt4Project::setToolChainType(const QString &buildConfiguration, ProjectExplorer::ToolChain::ToolChainType type)
@@ -841,16 +842,32 @@ void Qt4Project::setToolChainType(const QString &buildConfiguration, ProjectExpl
     setValue(buildConfiguration, "ToolChain", (int)type);
     delete m_toolChain;
     m_toolChain = 0;
+    updateActiveRunConfiguration();
+}
+
+void Qt4Project::updateActiveRunConfiguration()
+{
+    if (!activeRunConfiguration()->isEnabled()) {
+        foreach (QSharedPointer<RunConfiguration> runConfiguration, runConfigurations()) {
+            if (runConfiguration->isEnabled()) {
+                setActiveRunConfiguration(runConfiguration);
+            }
+        }
+    }
+    emit runConfigurationsEnabledStateChanged();
+    emit invalidateCachedTargetInformation();
 }
 
 ProjectExplorer::ToolChain::ToolChainType Qt4Project::toolChainType(const QString &buildConfiguration) const
 {
-    ProjectExplorer::ToolChain::ToolChainType type =
+    const ProjectExplorer::ToolChain::ToolChainType originalType =
         (ProjectExplorer::ToolChain::ToolChainType)value(buildConfiguration, "ToolChain").toInt();
+    ProjectExplorer::ToolChain::ToolChainType type = originalType;
     const QtVersion *version = qtVersion(buildConfiguration);
     if (!version->possibleToolChainTypes().contains(type)) // use default tool chain
         type = version->defaultToolchainType();
-    const_cast<Qt4Project *>(this)->setToolChainType(buildConfiguration, type);
+    if (type != originalType)
+        const_cast<Qt4Project *>(this)->setToolChainType(buildConfiguration, type);
     return type;
 }
 
diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h
index ce108142194..3c3ef898033 100644
--- a/src/plugins/qt4projectmanager/qt4project.h
+++ b/src/plugins/qt4projectmanager/qt4project.h
@@ -233,6 +233,7 @@ private:
     void addDefaultBuild();
 
     static QString qmakeVarName(ProjectExplorer::FileType type);
+    void updateActiveRunConfiguration();
 
     Qt4Manager *m_manager;
     Internal::Qt4ProFileNode *m_rootProjectNode;
-- 
GitLab