From 5b11a292ebd43b1d84fe45c51d8ab084b1ad3c98 Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Thu, 7 May 2009 15:43:59 +0200
Subject: [PATCH] Add files to the projects.

---
 src/plugins/qmlprojectmanager/qmlproject.cpp  |  2 +-
 src/plugins/qmlprojectmanager/qmlproject.h    |  2 +-
 .../qmlprojectmanager/qmlprojectnodes.cpp     | 47 +++++++++++++++----
 3 files changed, 41 insertions(+), 10 deletions(-)

diff --git a/src/plugins/qmlprojectmanager/qmlproject.cpp b/src/plugins/qmlprojectmanager/qmlproject.cpp
index 5b6521715bf..9cca6c52f65 100644
--- a/src/plugins/qmlprojectmanager/qmlproject.cpp
+++ b/src/plugins/qmlprojectmanager/qmlproject.cpp
@@ -168,7 +168,7 @@ Core::IFile *QmlProject::file() const
     return m_file;
 }
 
-ProjectExplorer::IProjectManager *QmlProject::projectManager() const
+Manager *QmlProject::projectManager() const
 {
     return m_manager;
 }
diff --git a/src/plugins/qmlprojectmanager/qmlproject.h b/src/plugins/qmlprojectmanager/qmlproject.h
index 9cf9b9f8687..22941e5b11e 100644
--- a/src/plugins/qmlprojectmanager/qmlproject.h
+++ b/src/plugins/qmlprojectmanager/qmlproject.h
@@ -59,7 +59,7 @@ public:
 
     virtual QString name() const;
     virtual Core::IFile *file() const;
-    virtual ProjectExplorer::IProjectManager *projectManager() const;
+    virtual Manager *projectManager() const;
 
     virtual QList<ProjectExplorer::Project *> dependsOn();
 
diff --git a/src/plugins/qmlprojectmanager/qmlprojectnodes.cpp b/src/plugins/qmlprojectmanager/qmlprojectnodes.cpp
index 19432765026..4b059f25a42 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectnodes.cpp
+++ b/src/plugins/qmlprojectmanager/qmlprojectnodes.cpp
@@ -28,6 +28,7 @@
 **************************************************************************/
 
 #include "qmlprojectnodes.h"
+#include "qmlprojectmanager.h"
 #include "qmlproject.h"
 
 #include <coreplugin/ifile.h>
@@ -153,7 +154,9 @@ bool QmlProjectNode::hasTargets() const
 
 QList<ProjectExplorer::ProjectNode::ProjectAction> QmlProjectNode::supportedActions() const
 {
-    return QList<ProjectAction>();
+    QList<ProjectAction> actions;
+    actions.append(AddFile);
+    return actions;
 }
 
 bool QmlProjectNode::addSubProjects(const QStringList &proFilePaths)
@@ -168,17 +171,45 @@ bool QmlProjectNode::removeSubProjects(const QStringList &proFilePaths)
     return false;
 }
 
-bool QmlProjectNode::addFiles(const ProjectExplorer::FileType fileType,
-                                  const QStringList &filePaths, QStringList *notAdded)
+bool QmlProjectNode::addFiles(const ProjectExplorer::FileType,
+                              const QStringList &filePaths, QStringList *notAdded)
 {
-    Q_UNUSED(fileType);
-    Q_UNUSED(filePaths);
-    Q_UNUSED(notAdded);
-    return false;
+    QDir projectDir(QFileInfo(projectFilePath()).dir());
+
+    QFile file(projectFilePath());
+    if (! file.open(QFile::WriteOnly | QFile::Append))
+        return false;
+
+    QTextStream stream(&file);
+    QStringList failedFiles;
+
+    bool first = true;
+    foreach (const QString &filePath, filePaths) {
+        const QString rel = projectDir.relativeFilePath(filePath);
+
+        if (rel.isEmpty() || rel.startsWith(QLatin1Char('.'))) {
+            failedFiles.append(rel);
+        } else {
+            if (first) {
+                stream << endl;
+                first = false;
+            }
+
+            stream << rel << endl;
+        }
+    }
+
+    if (notAdded)
+        *notAdded += failedFiles;
+
+    if (! first)
+        m_project->projectManager()->notifyChanged(projectFilePath());
+
+    return failedFiles.isEmpty();
 }
 
 bool QmlProjectNode::removeFiles(const ProjectExplorer::FileType fileType,
-                                     const QStringList &filePaths, QStringList *notRemoved)
+                                 const QStringList &filePaths, QStringList *notRemoved)
 {
     Q_UNUSED(fileType);
     Q_UNUSED(filePaths);
-- 
GitLab