OSDN Git Service

Qt4 Maemo: Simplfy code for adding OTHER_FILES to .pro file
authordt <qtc-committer@nokia.com>
Fri, 18 Mar 2011 15:36:25 +0000 (16:36 +0100)
committerdt <qtc-committer@nokia.com>
Fri, 18 Mar 2011 15:36:53 +0000 (16:36 +0100)
Task-Nr: QTCREATORBUG-4085

src/plugins/projectexplorer/projectexplorer.cpp
src/plugins/projectexplorer/projectexplorer.h
src/plugins/qt4projectmanager/qt-maemo/qt4maemotarget.cpp
src/plugins/qt4projectmanager/qt-maemo/qt4maemotarget.h
src/plugins/qt4projectmanager/qt4project.cpp
src/plugins/qt4projectmanager/qt4project.h

index 6949ea4..a19f52d 100644 (file)
@@ -2267,8 +2267,13 @@ void ProjectExplorerPlugin::addExistingFiles()
 void ProjectExplorerPlugin::addExistingFiles(const QStringList &filePaths)
 {
     ProjectNode *projectNode = qobject_cast<ProjectNode*>(d->m_currentNode->projectNode());
+    addExistingFiles(projectNode, filePaths);
+}
+
+void ProjectExplorerPlugin::addExistingFiles(ProjectNode *projectNode, const QStringList &filePaths)
+{
     Core::ICore *core = Core::ICore::instance();
-    const QString dir = directoryFor(d->m_currentNode);
+    const QString dir = directoryFor(projectNode);
     QStringList fileNames = filePaths;
     QHash<FileType, QString> fileTypeToFiles;
     foreach (const QString &fileName, fileNames) {
index 11389dc..f7c66b5 100644 (file)
@@ -61,6 +61,7 @@ class IRunControlFactory;
 class Project;
 class Node;
 class BuildConfiguration;
+class ProjectNode;
 
 namespace Internal {
 class ProjectFileFactory;
@@ -120,6 +121,7 @@ public:
     void runProject(Project *pro, const QString &mode);
     void runRunConfiguration(ProjectExplorer::RunConfiguration *rc, const QString &mode);
 
+    void addExistingFiles(ProjectExplorer::ProjectNode *projectNode, const QStringList &filePaths);
     void addExistingFiles(const QStringList &filePaths);
 
 signals:
index ab56ae9..81a37bc 100644 (file)
@@ -115,8 +115,9 @@ AbstractQt4MaemoTarget::AbstractQt4MaemoTarget(Qt4Project *parent, const QString
 {
     setIcon(QIcon(":/projectexplorer/images/MaemoDevice.png"));
     connect(parent, SIGNAL(addedTarget(ProjectExplorer::Target*)),
-        this, SLOT(handleTargetAdded(ProjectExplorer::Target*)),
-        Qt::QueuedConnection); // Otherwise ProjextExplorerPlugin::addExistingFiles() won't be ready.
+        this, SLOT(handleTargetAdded(ProjectExplorer::Target*)));
+    connect(parent, SIGNAL(fromMapFinished()),
+        this, SLOT(handleFromMapFinished()));
 }
 
 AbstractQt4MaemoTarget::~AbstractQt4MaemoTarget()
@@ -273,11 +274,24 @@ QSharedPointer<QFile> AbstractQt4MaemoTarget::openFile(const QString &filePath,
     return file;
 }
 
+void AbstractQt4MaemoTarget::handleFromMapFinished()
+{
+    handleTargetAdded(this);
+}
+
 void AbstractQt4MaemoTarget::handleTargetAdded(ProjectExplorer::Target *target)
 {
     if (target != this)
         return;
 
+    if (!project()->rootProjectNode()) {
+        // Project is not fully setup yet, happens on new project
+        // we wait for the fromMapFinished that comes afterwards
+        return;
+    }
+
+    disconnect(project(), SIGNAL(fromMapFinished()),
+        this, SLOT(handleFromMapFinished()));
     disconnect(project(), SIGNAL(addedTarget(ProjectExplorer::Target*)),
         this, SLOT(handleTargetAdded(ProjectExplorer::Target*)));
     connect(project(), SIGNAL(aboutToRemoveTarget(ProjectExplorer::Target*)),
@@ -346,7 +360,7 @@ AbstractQt4MaemoTarget::ActionStatus AbstractQt4MaemoTarget::createTemplates()
                       .arg(files.join(QLatin1String("\n   "))),
                   QMessageBox::Yes | QMessageBox::No);
         if (button == QMessageBox::Yes)
-            ProjectExplorer::ProjectExplorerPlugin::instance()->addExistingFiles(files);
+            ProjectExplorer::ProjectExplorerPlugin::instance()->addExistingFiles(project()->rootProjectNode(), files);
     }
     return actionStatus;
 }
index 65fc6e8..2130e6d 100644 (file)
@@ -104,6 +104,7 @@ protected:
 
 private slots:
     void handleTargetAdded(ProjectExplorer::Target *target);
+    void handleFromMapFinished();
     void handleTargetToBeRemoved(ProjectExplorer::Target *target);
 
 private:
index 709767a..a3339ee 100644 (file)
@@ -348,6 +348,8 @@ bool Qt4Project::fromMap(const QVariantMap &map)
     connect(this, SIGNAL(activeTargetChanged(ProjectExplorer::Target*)),
             this, SLOT(activeTargetWasChanged()));
 
+    emit fromMapFinished();
+
     return true;
 }
 
index 3fe2e7f..4895eb0 100644 (file)
@@ -191,6 +191,7 @@ signals:
     void proFileUpdated(Qt4ProjectManager::Internal::Qt4ProFileNode *node, bool);
     void proFileInvalidated(Qt4ProjectManager::Internal::Qt4ProFileNode *node);
     void buildDirectoryInitialized();
+    void fromMapFinished();
 
 public slots:
     void proFileParseError(const QString &errorMessage);