diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2009-05-04 12:19:22 +0200 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2009-05-04 12:19:22 +0200 |
commit | 9d676f75db5bb442da1e2b667b52bc6ec7aea2ff (patch) | |
tree | 7519afb697d6cd417c72307b9c29776a58e424da /src/plugins/qmlprojectmanager/qmlprojectnodes.cpp | |
parent | eafa7a07e275dbe34ed4aadde5b817fec203c81a (diff) | |
download | qt-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.cpp | 196 |
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; +} |