summaryrefslogtreecommitdiff
path: root/src/plugins/qmlprojectmanager/qmlprojectnodes.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2009-05-04 12:19:22 +0200
committerRoberto Raggi <roberto.raggi@nokia.com>2009-05-04 12:19:22 +0200
commit9d676f75db5bb442da1e2b667b52bc6ec7aea2ff (patch)
tree7519afb697d6cd417c72307b9c29776a58e424da /src/plugins/qmlprojectmanager/qmlprojectnodes.cpp
parenteafa7a07e275dbe34ed4aadde5b817fec203c81a (diff)
downloadqt-creator-9d676f75db5bb442da1e2b667b52bc6ec7aea2ff.tar.gz
Initial work on the QML project manager.
Diffstat (limited to 'src/plugins/qmlprojectmanager/qmlprojectnodes.cpp')
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojectnodes.cpp196
1 files changed, 196 insertions, 0 deletions
diff --git a/src/plugins/qmlprojectmanager/qmlprojectnodes.cpp b/src/plugins/qmlprojectmanager/qmlprojectnodes.cpp
new file mode 100644
index 0000000000..1943276502
--- /dev/null
+++ b/src/plugins/qmlprojectmanager/qmlprojectnodes.cpp
@@ -0,0 +1,196 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Qt Software Information (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+**
+**************************************************************************/
+
+#include "qmlprojectnodes.h"
+#include "qmlproject.h"
+
+#include <coreplugin/ifile.h>
+#include <projectexplorer/projectexplorer.h>
+
+#include <QFileInfo>
+
+using namespace QmlProjectManager;
+using namespace QmlProjectManager::Internal;
+
+QmlProjectNode::QmlProjectNode(QmlProject *project, Core::IFile *projectFile)
+ : ProjectExplorer::ProjectNode(QFileInfo(projectFile->fileName()).absolutePath()),
+ m_project(project),
+ m_projectFile(projectFile)
+{
+ setFolderName(QFileInfo(projectFile->fileName()).completeBaseName());
+}
+
+QmlProjectNode::~QmlProjectNode()
+{ }
+
+Core::IFile *QmlProjectNode::projectFile() const
+{ return m_projectFile; }
+
+QString QmlProjectNode::projectFilePath() const
+{ return m_projectFile->fileName(); }
+
+void QmlProjectNode::refresh()
+{
+ using namespace ProjectExplorer;
+
+ // remove the existing nodes.
+ removeFileNodes(fileNodes(), this);
+ removeFolderNodes(subFolderNodes(), this);
+
+ //ProjectExplorerPlugin::instance()->setCurrentNode(0); // ### remove me
+
+ FileNode *projectFilesNode = new FileNode(m_project->filesFileName(),
+ ProjectFileType,
+ /* generated = */ false);
+
+ QStringList files = m_project->files();
+ files.removeAll(m_project->filesFileName());
+
+ addFileNodes(QList<FileNode *>()
+ << projectFilesNode,
+ this);
+
+ QStringList filePaths;
+ QHash<QString, QStringList> filesInPath;
+
+ foreach (const QString &absoluteFileName, files) {
+ QFileInfo fileInfo(absoluteFileName);
+ const QString absoluteFilePath = fileInfo.path();
+
+ if (! absoluteFilePath.startsWith(path()))
+ continue; // `file' is not part of the project.
+
+ const QString relativeFilePath = absoluteFilePath.mid(path().length() + 1);
+
+ if (! filePaths.contains(relativeFilePath))
+ filePaths.append(relativeFilePath);
+
+ filesInPath[relativeFilePath].append(absoluteFileName);
+ }
+
+ foreach (const QString &filePath, filePaths) {
+ FolderNode *folder = findOrCreateFolderByName(filePath);
+
+ QList<FileNode *> fileNodes;
+ foreach (const QString &file, filesInPath.value(filePath)) {
+ FileType fileType = SourceType; // ### FIXME
+ FileNode *fileNode = new FileNode(file, fileType, /*generated = */ false);
+ fileNodes.append(fileNode);
+ }
+
+ addFileNodes(fileNodes, folder);
+ }
+
+ m_folderByName.clear();
+}
+
+ProjectExplorer::FolderNode *QmlProjectNode::findOrCreateFolderByName(const QStringList &components, int end)
+{
+ if (! end)
+ return 0;
+
+ QString folderName;
+ for (int i = 0; i < end; ++i) {
+ folderName.append(components.at(i));
+ folderName += QLatin1Char('/'); // ### FIXME
+ }
+
+ const QString component = components.at(end - 1);
+
+ if (component.isEmpty())
+ return this;
+
+ else if (FolderNode *folder = m_folderByName.value(folderName))
+ return folder;
+
+ FolderNode *folder = new FolderNode(component);
+ m_folderByName.insert(folderName, folder);
+
+ FolderNode *parent = findOrCreateFolderByName(components, end - 1);
+ if (! parent)
+ parent = this;
+ addFolderNodes(QList<FolderNode*>() << folder, parent);
+
+ return folder;
+}
+
+ProjectExplorer::FolderNode *QmlProjectNode::findOrCreateFolderByName(const QString &filePath)
+{
+ QStringList components = filePath.split(QLatin1Char('/'));
+ return findOrCreateFolderByName(components, components.length());
+}
+
+bool QmlProjectNode::hasTargets() const
+{
+ return true;
+}
+
+QList<ProjectExplorer::ProjectNode::ProjectAction> QmlProjectNode::supportedActions() const
+{
+ return QList<ProjectAction>();
+}
+
+bool QmlProjectNode::addSubProjects(const QStringList &proFilePaths)
+{
+ Q_UNUSED(proFilePaths);
+ return false;
+}
+
+bool QmlProjectNode::removeSubProjects(const QStringList &proFilePaths)
+{
+ Q_UNUSED(proFilePaths);
+ return false;
+}
+
+bool QmlProjectNode::addFiles(const ProjectExplorer::FileType fileType,
+ const QStringList &filePaths, QStringList *notAdded)
+{
+ Q_UNUSED(fileType);
+ Q_UNUSED(filePaths);
+ Q_UNUSED(notAdded);
+ return false;
+}
+
+bool QmlProjectNode::removeFiles(const ProjectExplorer::FileType fileType,
+ const QStringList &filePaths, QStringList *notRemoved)
+{
+ Q_UNUSED(fileType);
+ Q_UNUSED(filePaths);
+ Q_UNUSED(notRemoved);
+ return false;
+}
+
+bool QmlProjectNode::renameFile(const ProjectExplorer::FileType fileType,
+ const QString &filePath, const QString &newFilePath)
+{
+ Q_UNUSED(fileType);
+ Q_UNUSED(filePath);
+ Q_UNUSED(newFilePath);
+ return false;
+}