From e4d5d004b35e429fd8b6b7a8daf45037f4e067ba Mon Sep 17 00:00:00 2001
From: dt <qtc-committer@nokia.com>
Date: Wed, 7 Apr 2010 13:41:46 +0200
Subject: [PATCH] Fix creating of projects

---
 src/plugins/qt4projectmanager/qt4project.cpp | 72 +++++---------------
 src/plugins/qt4projectmanager/qt4project.h   |  3 +-
 2 files changed, 19 insertions(+), 56 deletions(-)

diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp
index 2399e015333..1f5c7f8cffc 100644
--- a/src/plugins/qt4projectmanager/qt4project.cpp
+++ b/src/plugins/qt4projectmanager/qt4project.cpp
@@ -312,9 +312,7 @@ bool Qt4Project::fromMap(const QVariantMap &map)
     updateFileList();
     // This might be incorrect, need a full update
     updateCodeModel();
-
-    checkForNewApplicationProjects();
-    checkForDeletedApplicationProjects();
+    createApplicationProjects();
 
     foreach (Target *t, targets())
         onAddedTarget(t);
@@ -766,8 +764,6 @@ void Qt4Project::decrementPendingEvaluateFutures()
             // After beeing done, we need to call:
             updateFileList();
             updateCodeModel();
-            checkForNewApplicationProjects();
-            checkForDeletedApplicationProjects();
             if (debug)
                 qDebug()<<"  Setting state to Base";
             m_asyncUpdateState = Base;
@@ -980,61 +976,29 @@ void Qt4Project::collectApplicationProFiles(QList<Qt4ProFileNode *> &list, Qt4Pr
     }
 }
 
-void Qt4Project::checkForNewApplicationProjects()
+void Qt4Project::createApplicationProjects()
 {
-    // Check all new project nodes
-    // against all runConfigurations in all targets.
-
-    foreach (Qt4ProFileNode *qt4proFile, applicationProFiles()) {
-        foreach (Target *target, targets()) {
-            Qt4Target *qt4Target = static_cast<Qt4Target *>(target);
-            bool found = false;
-            foreach (RunConfiguration *rc, target->runConfigurations()) {
-                Qt4RunConfiguration *qtrc = qobject_cast<Qt4RunConfiguration *>(rc);
-                if (qtrc && qtrc->proFilePath() == qt4proFile->path()) {
-                    found = true;
-                    break;
-                }
-            }
-            if (!found) {
-                qt4Target->addRunConfigurationForPath(qt4proFile->path());
-            }
-
-            // Remove unused CustomExecutableRCs:
-            if (target->runConfigurations().count() > 1) {
-                QList<RunConfiguration*> toRemove;
-                foreach (RunConfiguration * rc, target->runConfigurations()) {
-                    CustomExecutableRunConfiguration *cerc = qobject_cast<CustomExecutableRunConfiguration *>(rc);
-                    if (cerc && !cerc->isConfigured())
-                        toRemove.append(rc);
-                }
-                foreach (RunConfiguration *rc, toRemove)
-                    target->removeRunConfiguration(rc);
+    foreach (Target *target, targets()) {
+        if (target->runConfigurations().count()) {
+            // Remove all run configurations which the new project wizard created
+            QList<RunConfiguration*> toRemove;
+            foreach (RunConfiguration * rc, target->runConfigurations()) {
+                CustomExecutableRunConfiguration *cerc = qobject_cast<CustomExecutableRunConfiguration *>(rc);
+                if (cerc && !cerc->isConfigured())
+                    toRemove.append(rc);
             }
+            foreach (RunConfiguration *rc, toRemove)
+                target->removeRunConfiguration(rc);
         }
-    }
-}
-
-void Qt4Project::checkForDeletedApplicationProjects()
-{
-    QStringList paths;
-    foreach (Qt4ProFileNode * node, applicationProFiles())
-        paths.append(node->path());
 
-//    qDebug()<<"Still existing paths :"<<paths;
-
-    QList<Qt4RunConfiguration *> removeList;
-    foreach (Target *target, targets()) {
-        foreach (RunConfiguration *rc, target->runConfigurations()) {
-            if (Qt4RunConfiguration *qt4rc = qobject_cast<Qt4RunConfiguration *>(rc)) {
-                if (!paths.contains(qt4rc->proFilePath())) {
-                    removeList.append(qt4rc);
-                }
+        // Only add new runconfigurations if there are none.
+        if (target->runConfigurations().isEmpty()) {
+            Qt4Target *qt4Target = static_cast<Qt4Target *>(target);
+            foreach (Qt4ProFileNode *qt4proFile, applicationProFiles()) {
+                qt4Target->addRunConfigurationForPath(qt4proFile->path());
             }
         }
-        foreach (Qt4RunConfiguration *qt4rc, removeList)
-            target->removeRunConfiguration(qt4rc);
-
+        // Oh still none? Add a custom executable runconfiguration
         if (target->runConfigurations().isEmpty()) {
             target->addRunConfiguration(new ProjectExplorer::CustomExecutableRunConfiguration(target));
         }
diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h
index ade24435a47..84aad0efd18 100644
--- a/src/plugins/qt4projectmanager/qt4project.h
+++ b/src/plugins/qt4projectmanager/qt4project.h
@@ -185,8 +185,7 @@ private slots:
 private:
     void scheduleAsyncUpdate();
 
-    void checkForNewApplicationProjects();
-    void checkForDeletedApplicationProjects();
+    void createApplicationProjects();
     void updateCodeModel();
     void updateFileList();
 
-- 
GitLab