diff options
author | Radovan Zivkovic <pivonroll@gmail.com> | 2013-10-13 23:25:25 +0200 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@digia.com> | 2014-03-11 19:55:00 +0100 |
commit | e6cd63861b0786d75878a55941018ce2e82cde34 (patch) | |
tree | af729480e33bf7cf4e17e3bf56358f290242011f | |
parent | 1acbf031019b8cc29b3966e7c905b7d633a4177f (diff) | |
download | qt-creator-e6cd63861b0786d75878a55941018ce2e82cde34.tar.gz |
VcProjectDocument implements IVisualStudioProject interface.
Change-Id: I063d712950fb98fe9b2b13c02bb8535869029052
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
21 files changed, 284 insertions, 768 deletions
diff --git a/src/plugins/vcprojectmanager/interfaces/ifiles.h b/src/plugins/vcprojectmanager/interfaces/ifiles.h index cd7c4ea1ca..8c973e6156 100644 --- a/src/plugins/vcprojectmanager/interfaces/ifiles.h +++ b/src/plugins/vcprojectmanager/interfaces/ifiles.h @@ -42,7 +42,6 @@ class IFiles : public IVcProjectXMLNode { public: virtual ~IFiles() {} - virtual IFiles& operator=(const IFiles &files) = 0; virtual void addFile(IFile *file) = 0; virtual void removeFile(IFile *file) = 0; virtual int fileCount() const = 0; diff --git a/src/plugins/vcprojectmanager/interfaces/interfaces.pri b/src/plugins/vcprojectmanager/interfaces/interfaces.pri index 0ef761ea46..5ecea3df26 100644 --- a/src/plugins/vcprojectmanager/interfaces/interfaces.pri +++ b/src/plugins/vcprojectmanager/interfaces/interfaces.pri @@ -28,4 +28,5 @@ HEADERS += \ interfaces/iplatform.h \ interfaces/iplatforms.h \ interfaces/ipublishingitem.h \ - interfaces/ipublishingdata.h + interfaces/ipublishingdata.h \ + interfaces/ivisualstudioproject.h diff --git a/src/plugins/vcprojectmanager/interfaces/ivisualstudioproject.h b/src/plugins/vcprojectmanager/interfaces/ivisualstudioproject.h new file mode 100644 index 0000000000..019ef7e5a5 --- /dev/null +++ b/src/plugins/vcprojectmanager/interfaces/ivisualstudioproject.h @@ -0,0 +1,71 @@ +/************************************************************************** +** +** Copyright (c) 2013 Bojan Petrovic +** Copyright (c) 2013 Radovan Zivkovic +** Contact: http://www.qt-project.org/legal +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** 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. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ +#ifndef VCPROJECTMANAGER_INTERNAL_IVISUALSTUDIOPROJECT_H +#define VCPROJECTMANAGER_INTERNAL_IVISUALSTUDIOPROJECT_H + +#include <QString> +#include "../vcprojectmodel/ivcprojectnodemodel.h" +#include "../vcprojectmodel/vcprojectdocument_constants.h" + +namespace VcProjectManager { +namespace Internal { + +class IConfigurations; +class IPlatforms; +class IGlobals; +class IReferences; +class IFiles; +class ISettingsWidget; +class IToolFiles; +class IPublishingData; +class IAttributeContainer; + +class IVisualStudioProject : public IVcProjectXMLNode +{ +public: + virtual ~IVisualStudioProject() {} + + virtual IAttributeContainer* attributeContainer() const = 0; + virtual IConfigurations* configurations() const = 0; + virtual IFiles* files() const = 0; + virtual IGlobals* globals() const = 0; + virtual IPlatforms* platforms() const = 0; + virtual IReferences* referencess() const = 0; + virtual IToolFiles* toolFiles() const = 0; + virtual IPublishingData* publishingData() const = 0; + virtual QString filePath() const = 0; + virtual bool saveToFile(const QString &filePath) const = 0; + virtual VcDocConstants::DocumentVersion documentVersion() const = 0; +}; + +} // namespace Internal +} // namespace VcProjectManager + +#endif // VCPROJECTMANAGER_INTERNAL_IVISUALSTUDIOPROJECT_H diff --git a/src/plugins/vcprojectmanager/vcproject.cpp b/src/plugins/vcprojectmanager/vcproject.cpp index e08196d649..2ae92ab3b5 100644 --- a/src/plugins/vcprojectmanager/vcproject.cpp +++ b/src/plugins/vcprojectmanager/vcproject.cpp @@ -139,7 +139,7 @@ QStringList VcProject::files(Project::FilesMode fileMode) const // TODO: respect the mode QStringList sl; if (m_projectFile && m_projectFile->documentModel() && m_projectFile->documentModel()->vcProjectDocument()) - m_projectFile->documentModel()->vcProjectDocument()->allProjectFiles(sl); + allProjectFile(sl); return sl; } @@ -150,20 +150,6 @@ QString VcProject::defaultBuildDirectory() const return vcFile->path()/* + QLatin1String("-build")*/; } -MsBuildInformation::MsBuildVersion VcProject::minSupportedMsBuild() const -{ - if (m_projectFile && m_projectFile->documentModel() && m_projectFile->documentModel()->vcProjectDocument()) - return m_projectFile->documentModel()->vcProjectDocument()->minSupportedMsBuildVersion(); - return MsBuildInformation::MSBUILD_V_UNKNOWN; -} - -MsBuildInformation::MsBuildVersion VcProject::maxSupportedMsBuild() const -{ - if (m_projectFile && m_projectFile->documentModel() && m_projectFile->documentModel()->vcProjectDocument()) - return m_projectFile->documentModel()->vcProjectDocument()->maxSupportedMsBuildVersion(); - return MsBuildInformation::MSBUILD_V_UNKNOWN; -} - bool VcProject::needsConfiguration() const { return targets().isEmpty() || !activeTarget() || activeTarget()->buildConfigurations().isEmpty(); @@ -208,7 +194,7 @@ void VcProject::onSettingsDialogAccepted() VcProjectDocumentWidget *settingsWidget = qobject_cast<VcProjectDocumentWidget *>(QObject::sender()); m_projectFile->documentModel()->saveToFile(m_projectFile->filePath()); settingsWidget->deleteLater(); - Configurations::Ptr configs = m_projectFile->documentModel()->vcProjectDocument()->configurations(); + IConfigurations *configs = m_projectFile->documentModel()->vcProjectDocument()->configurations(); if (configs) { QList<ProjectExplorer::Target *> targetList = targets(); @@ -419,6 +405,23 @@ VcProjectBuildConfiguration *VcProject::findBuildConfiguration(Target *target, c return 0; } +void VcProject::allProjectFile(QStringList &allFiles) const +{ + if (m_projectFile && m_projectFile->documentModel() && m_projectFile->documentModel()->vcProjectDocument()) { + for (int i = 0; i < m_projectFile->documentModel()->vcProjectDocument()->files()->fileContainerCount(); ++i) { + IFileContainer *fileContainer = m_projectFile->documentModel()->vcProjectDocument()->files()->fileContainer(i); + if (fileContainer) + fileContainer->allFiles(allFiles); + } + + for (int i = 0; i < m_projectFile->documentModel()->vcProjectDocument()->files()->fileCount(); ++i) { + IFile *file = m_projectFile->documentModel()->vcProjectDocument()->files()->file(i); + if (file) + allFiles.append(file->canonicalPath()); + } + } +} + VcProjectBuildSettingsWidget::VcProjectBuildSettingsWidget() { QFormLayout *f1 = new QFormLayout(this); diff --git a/src/plugins/vcprojectmanager/vcproject.h b/src/plugins/vcprojectmanager/vcproject.h index 976f755ac9..48c849be7f 100644 --- a/src/plugins/vcprojectmanager/vcproject.h +++ b/src/plugins/vcprojectmanager/vcproject.h @@ -69,8 +69,6 @@ public: ProjectExplorer::ProjectNode *rootProjectNode() const; QStringList files(FilesMode fileMode) const; QString defaultBuildDirectory() const; - MsBuildInformation::MsBuildVersion minSupportedMsBuild() const; - MsBuildInformation::MsBuildVersion maxSupportedMsBuild() const; bool needsConfiguration() const; bool supportsKit(ProjectExplorer::Kit *k, QString *errorMessage) const; @@ -92,7 +90,7 @@ private: void importBuildConfigurations(); void addBuildConfiguration(ProjectExplorer::Target *target, IConfiguration *config); VcProjectBuildConfiguration* findBuildConfiguration(ProjectExplorer::Target *target, const QString &buildConfigurationName) const; - + void allProjectFile(QStringList &allFiles) const; VcManager *m_projectManager; VcProjectFile *m_projectFile; VcDocProjectNode *m_rootNode; diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/file.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/file.cpp index 5d3b5a4ad0..febe3fc811 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/file.cpp +++ b/src/plugins/vcprojectmanager/vcprojectmodel/file.cpp @@ -40,7 +40,7 @@ namespace VcProjectManager { namespace Internal { -File::File(VcProjectDocument *parentProjectDoc) +File::File(IVisualStudioProject *parentProjectDoc) : m_parentProjectDoc(parentProjectDoc) { m_configurationContainer = new ConfigurationContainer; diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/file.h b/src/plugins/vcprojectmanager/vcprojectmodel/file.h index 2b40a4629b..6c6964d211 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/file.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/file.h @@ -38,7 +38,7 @@ namespace VcProjectManager { namespace Internal { -class VcProjectDocument; +class IVisualStudioProject; class File : public IFile { @@ -47,7 +47,7 @@ class File : public IFile public: typedef QSharedPointer<File> Ptr; - File(VcProjectDocument *parentProjectDoc); + File(IVisualStudioProject *parentProjectDoc); File(const File &file); File& operator=(const File &file); ~File(); @@ -73,7 +73,7 @@ private: QString m_relativePath; // required QList<QSharedPointer<File> > m_files; - VcProjectDocument *m_parentProjectDoc; + IVisualStudioProject *m_parentProjectDoc; ConfigurationContainer *m_configurationContainer; GeneralAttributeContainer *m_attributeContainer; }; diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/files.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/files.cpp index 2f1e6c0521..2b5cd24c55 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/files.cpp +++ b/src/plugins/vcprojectmanager/vcprojectmodel/files.cpp @@ -35,36 +35,41 @@ namespace VcProjectManager { namespace Internal { -Files::Files(VcProjectDocument *parentProject) +Files::Files(IVisualStudioProject *parentProject) : m_parentProject(parentProject) { } Files::Files(const Files &files) { - foreach (IFile *file, files.m_files) - m_files.append(file->clone()); + m_parentProject = files.m_parentProject; - foreach (IFileContainer *filter, files.m_fileContainers) - m_fileContainers.append(filter->clone()); + foreach (IFile *file, files.m_files) { + if (file) + m_files.append(file->clone()); + } + + foreach (IFileContainer *fileContainer, files.m_fileContainers) { + if (fileContainer) + m_fileContainers.append(fileContainer->clone()); + } } -IFiles &Files::operator =(const IFiles &files) +Files &Files::operator =(const Files &files) { if (this != &files) { qDeleteAll(m_files); qDeleteAll(m_fileContainers); m_files.clear(); m_fileContainers.clear(); + m_parentProject = files.m_parentProject; - for (int i = 0; i < files.fileCount(); ++i) { - IFile *file = files.file(i); + foreach (IFile *file, files.m_files) { if (file) m_files.append(file->clone()); } - for (int i = 0; i < files.fileContainerCount(); ++i) { - IFileContainer *fileContainer = files.fileContainer(i); + foreach (IFileContainer *fileContainer, files.m_fileContainers) { if (fileContainer) m_fileContainers.append(fileContainer->clone()); } diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/files.h b/src/plugins/vcprojectmanager/vcprojectmodel/files.h index 65c8591241..25a045e9c4 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/files.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/files.h @@ -45,9 +45,9 @@ class Files : public IFiles public: typedef QSharedPointer<Files> Ptr; - Files(VcProjectDocument *parentProject); + Files(IVisualStudioProject *parentProject); Files(const Files &files); - IFiles &operator =(const IFiles &files); + Files &operator =(const Files &files); ~Files(); void processNode(const QDomNode &node); @@ -73,7 +73,7 @@ protected: QList<IFileContainer *> m_fileContainers; QList<IFile *> m_files; - VcProjectDocument *m_parentProject; + IVisualStudioProject *m_parentProject; }; } // namespace Internal diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/filter.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/filter.cpp index d15a72e0d1..ade20ff47d 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/filter.cpp +++ b/src/plugins/vcprojectmanager/vcprojectmodel/filter.cpp @@ -38,7 +38,7 @@ namespace VcProjectManager { namespace Internal { -Filter::Filter(VcProjectDocument *parentProjectDoc) +Filter::Filter(IVisualStudioProject *parentProjectDoc) : m_parentProjectDoc(parentProjectDoc) { m_attributeContainer = new GeneralAttributeContainer; diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/filter.h b/src/plugins/vcprojectmanager/vcprojectmodel/filter.h index c9a50f8097..b31422281d 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/filter.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/filter.h @@ -42,7 +42,7 @@ class Filter; class Filter : public IFileContainer { public: - Filter(VcProjectDocument *parentProjectDoc); + Filter(IVisualStudioProject *parentProjectDoc); Filter(const Filter &filter); Filter& operator=(const Filter &filter); ~Filter(); @@ -80,7 +80,7 @@ private: QString m_name; QList<IFileContainer *> m_fileContainers; QList<IFile *> m_files; - VcProjectDocument *m_parentProjectDoc; + IVisualStudioProject *m_parentProjectDoc; GeneralAttributeContainer *m_attributeContainer; }; diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/folder.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/folder.cpp index 3b25e36e06..a5b9cc85d3 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/folder.cpp +++ b/src/plugins/vcprojectmanager/vcprojectmodel/folder.cpp @@ -38,7 +38,7 @@ namespace VcProjectManager { namespace Internal { -Folder::Folder(VcProjectDocument *parentProjectDoc) +Folder::Folder(IVisualStudioProject *parentProjectDoc) : m_parentProjectDoc(parentProjectDoc) { m_attributeContainer = new GeneralAttributeContainer; diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/folder.h b/src/plugins/vcprojectmanager/vcprojectmodel/folder.h index fc32f9ddfd..0132229774 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/folder.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/folder.h @@ -40,7 +40,7 @@ namespace Internal { class Folder : public IFileContainer { public: - Folder(VcProjectDocument *parentProjectDoc); + Folder(IVisualStudioProject *parentProjectDoc); Folder(const Folder &folder); Folder& operator=(const Folder &folder); ~Folder(); @@ -80,7 +80,7 @@ private: QList<IFileContainer *> m_fileContainers; QString m_name; // required - VcProjectDocument *m_parentProjectDoc; + IVisualStudioProject *m_parentProjectDoc; GeneralAttributeContainer *m_attributeContainer; }; diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.cpp index 8d3b770b67..1ca463655d 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.cpp +++ b/src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.cpp @@ -38,6 +38,7 @@ #include <QFileInfo> #include <projectexplorer/projectexplorer.h> +#include <QDir> namespace VcProjectManager { namespace Internal { @@ -236,7 +237,7 @@ VcFileNode *VcFileContainerNode::findFileNode(const QString &filePath) return 0; } -VcDocProjectNode::VcDocProjectNode(VcProjectDocument *vcProjectModel) +VcDocProjectNode::VcDocProjectNode(IVisualStudioProject *vcProjectModel) : ProjectExplorer::ProjectNode(vcProjectModel->filePath()), m_vcProjectModel(vcProjectModel) { @@ -319,7 +320,7 @@ bool VcDocProjectNode::addFiles(const ProjectExplorer::FileType fileType, const if (vcContainerNode) { foreach (const QString &filePath, filePaths) { - QString relativeFilePath = m_vcProjectModel->fileRelativePath(filePath); + QString relativeFilePath = fileRelativePath(m_vcProjectModel->filePath(), filePath); // if file is already in the project don't add it if (m_vcProjectModel->files()->fileExists(relativeFilePath)) @@ -338,7 +339,7 @@ bool VcDocProjectNode::addFiles(const ProjectExplorer::FileType fileType, const if (projectNode) { foreach (const QString &filePath, filePaths) { - QString relativeFilePath = m_vcProjectModel->fileRelativePath(filePath); + QString relativeFilePath = fileRelativePath(m_vcProjectModel->filePath(), filePath); // if file is already in the project don't add it if (m_vcProjectModel->files()->fileExists(relativeFilePath)) @@ -368,7 +369,7 @@ bool VcDocProjectNode::removeFiles(const ProjectExplorer::FileType fileType, con QStringList filesNotRemoved; foreach (const QString &filePath, filePaths) { - QString relativeFilePath = m_vcProjectModel->fileRelativePath(filePath); + QString relativeFilePath = fileRelativePath(m_vcProjectModel->filePath(), filePath); if (m_vcProjectModel->files()->fileExists(relativeFilePath)) { VcFileNode *fileNode = static_cast<VcFileNode *>(findFileNode(filePath)); @@ -568,5 +569,15 @@ VcFileNode *VcDocProjectNode::findFileNode(const QString &filePath) return 0; } +QString fileRelativePath(const QString &fullProjectPath, const QString &fullFilePath) +{ + QString relativePath = QFileInfo(fullProjectPath).absoluteDir().relativeFilePath(fullFilePath).replace(QLatin1String("/"), QLatin1String("\\")); + + if (!relativePath.startsWith(QLatin1String(".."))) + relativePath.prepend(QLatin1String(".\\")); + + return relativePath; +} + } // namespace Internal } // namespace VcProjectManager diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.h b/src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.h index ad999ba4fc..1054d63a12 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.h @@ -35,11 +35,13 @@ namespace VcProjectManager { namespace Internal { -class VcProjectDocument; +class IVisualStudioProject; class IFileContainer; class IFile; class VcDocProjectNode; +QString fileRelativePath(const QString &fullProjectPath, const QString &fullFilePath); + class VcFileNode : public ProjectExplorer::FileNode { Q_OBJECT @@ -102,7 +104,7 @@ class VcDocProjectNode : public ProjectExplorer::ProjectNode friend class VcFileContainerNode; public: - VcDocProjectNode(VcProjectDocument* vcProjectModel); + VcDocProjectNode(IVisualStudioProject* vcProjectModel); ~VcDocProjectNode(); bool hasBuildTargets() const; @@ -135,7 +137,7 @@ public: private: VcFileNode* findFileNode(const QString &filePath); - VcProjectDocument *m_vcProjectModel; + IVisualStudioProject *m_vcProjectModel; }; } // namespace Internal diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/vcdocumentmodel.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/vcdocumentmodel.cpp index 33a6830979..c8c010ca24 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/vcdocumentmodel.cpp +++ b/src/plugins/vcprojectmanager/vcprojectmodel/vcdocumentmodel.cpp @@ -50,9 +50,9 @@ VcDocumentModel::VcDocumentModel(const QString &filePath, VcDocConstants::Docume if (!document.setContent(&file)) return; - m_vcProjectDocument = VcProjectDocumentFactory::create(filePath, version); + m_vcProjectDocument = new VcProjectDocument(filePath, version); if (m_vcProjectDocument) - m_vcProjectDocument->readFromXMLDomDocument(document); + m_vcProjectDocument->processNode(document); } VcDocumentModel::~VcDocumentModel() @@ -60,7 +60,7 @@ VcDocumentModel::~VcDocumentModel() delete m_vcProjectDocument; } -VcProjectDocument* VcDocumentModel::vcProjectDocument() const +IVisualStudioProject* VcDocumentModel::vcProjectDocument() const { return m_vcProjectDocument; } diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/vcdocumentmodel.h b/src/plugins/vcprojectmanager/vcprojectmodel/vcdocumentmodel.h index c84d87c19b..9e8f8c881e 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/vcdocumentmodel.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/vcdocumentmodel.h @@ -40,7 +40,7 @@ class QDomDocument; namespace VcProjectManager { namespace Internal { -class VcProjectDocument; +class IVisualStudioProject; class VcDocumentModel { @@ -48,11 +48,12 @@ public: explicit VcDocumentModel(const QString &filePath, VcDocConstants::DocumentVersion version); virtual ~VcDocumentModel(); - VcProjectDocument* vcProjectDocument() const; + IVisualStudioProject* vcProjectDocument() const; bool saveToFile(const QString &filePath) const; private: - VcProjectDocument *m_vcProjectDocument; + IVisualStudioProject *m_vcProjectDocument; + QDomDocument *m_document; }; } // namespace Internal diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectdocument.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectdocument.cpp index 1133d1dbab..2b3112b3f3 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectdocument.cpp +++ b/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectdocument.cpp @@ -30,7 +30,6 @@ #include "vcprojectdocument.h" #include <QDomElement> -#include <QDir> #include <QFile> #include <QStringList> #include <QTextStream> @@ -43,6 +42,7 @@ #include "../widgets/configurationswidgets.h" #include "configurationcontainer.h" #include "../interfaces/iattributecontainer.h" +#include "generalattributecontainer.h" namespace VcProjectManager { namespace Internal { @@ -51,18 +51,6 @@ VcProjectDocument::~VcProjectDocument() { } -void VcProjectDocument::readFromXMLDomDocument(const QDomNode &domDoc) -{ - QDomNode node = domDoc.firstChild(); // xml - - parseProcessingInstruction(node.toProcessingInstruction()); - - node = node.nextSibling(); // Visual studio - processVisualStudioNode(node.toElement()); - node = node.firstChild(); - processNode(node); -} - bool VcProjectDocument::saveToFile(const QString &filePath) const { QDomDocument domDoc; @@ -90,138 +78,108 @@ QString VcProjectDocument::filePath() const return m_filePath; } -void VcProjectDocument::allProjectFiles(QStringList &sl) const +IConfigurations* VcProjectDocument::configurations() const { - for (int i = 0; i < m_files->fileContainerCount(); ++i) { - IFileContainer *fileContainer = m_files->fileContainer(i); - if (fileContainer) - fileContainer->allFiles(sl); - } - - for (int i = 0; i < m_files->fileCount(); ++i) { - IFile *file = m_files->file(i); - if (file) - sl.append(file->canonicalPath()); - } + return m_configurations; } -QString VcProjectDocument::fileRelativePath(const QString &filePath) +IPlatforms* VcProjectDocument::platforms() const { - QString relativePath = QFileInfo(m_filePath).absoluteDir().relativeFilePath(filePath).replace(QLatin1String("/"), QLatin1String("\\")); - - if (!relativePath.startsWith(QLatin1String(".."))) - relativePath.prepend(QLatin1String(".\\")); + return m_platforms; +} - return relativePath; +IReferences *VcProjectDocument::referencess() const +{ + return m_references; } -Configurations::Ptr VcProjectDocument::configurations() const +IToolFiles *VcProjectDocument::toolFiles() const { - return m_configurations; + return m_toolFiles; } -Platforms::Ptr VcProjectDocument::platforms() const +IPublishingData *VcProjectDocument::publishingData() const { - return m_platforms; + return m_publishingData; } -Files::Ptr VcProjectDocument::files() const +IAttributeContainer *VcProjectDocument::attributeContainer() const { - return m_files; + return m_attributeContainer; } -Globals::Ptr VcProjectDocument::globals() const +IFiles* VcProjectDocument::files() const { - return m_globals; + return m_files; } -References::Ptr VcProjectDocument::references() const +IGlobals* VcProjectDocument::globals() const { - return m_references; + return m_globals; } -VcProjectDocument::VcProjectDocument(const QString &filePath) - : IVcProjectXMLNode(), - m_filePath(filePath), - m_projectType(QLatin1String("Visual C++")), - m_platforms(Platforms::Ptr(new Platforms)), - m_globals(Globals::Ptr(new Globals)) +VcProjectDocument::VcProjectDocument(const QString &filePath, VcDocConstants::DocumentVersion docVersion) + : m_filePath(filePath), + m_platforms(new Platforms), + m_globals(new Globals), + m_files(new Files(this)), + m_configurations(new Configurations(this)), + m_references(new References), + m_toolFiles(new ToolFiles), + m_publishingData(new PublishingData), + m_documentVersion(docVersion), + m_attributeContainer(new GeneralAttributeContainer) { } VcProjectDocument::VcProjectDocument(const VcProjectDocument &vcDoc) { - m_documentVersion = vcDoc.m_documentVersion; - m_filePath = vcDoc.m_filePath; - m_projectType = vcDoc.m_projectType; - m_version = vcDoc.m_version; - m_projectGUID = vcDoc.m_projectGUID; - m_rootNamespace = vcDoc.m_rootNamespace; - m_keyword = vcDoc.m_keyword; - m_name = vcDoc.m_name; - - m_anyAttribute = vcDoc.m_anyAttribute; - // <?xml part m_processingInstructionData = vcDoc.m_processingInstructionData; m_processingInstructionTarget = vcDoc.m_processingInstructionTarget; - m_platforms = Platforms::Ptr(new Platforms(*(vcDoc.m_platforms))); - m_configurations = Configurations::Ptr(new Configurations(*(vcDoc.m_configurations))); - m_files = Files::Ptr(new Files(*vcDoc.m_files)); - m_references = References::Ptr(new References(*(vcDoc.m_references))); - m_globals = Globals::Ptr(new Globals(*(vcDoc.m_globals))); + m_attributeContainer = new GeneralAttributeContainer(*vcDoc.m_attributeContainer); + m_platforms = new Platforms(*(vcDoc.m_platforms)); + m_configurations = new Configurations(*(vcDoc.m_configurations)); + m_files = new Files(*vcDoc.m_files); + m_references = new References(*(vcDoc.m_references)); + m_globals = new Globals(*(vcDoc.m_globals)); + + m_toolFiles = new ToolFiles(*(vcDoc.m_toolFiles)); + m_publishingData = new PublishingData(*(vcDoc.m_publishingData)); } VcProjectDocument &VcProjectDocument::operator =(const VcProjectDocument &vcDoc) { if (this != &vcDoc) { - m_documentVersion = vcDoc.m_documentVersion; - m_filePath = vcDoc.m_filePath; - - m_projectType = vcDoc.m_projectType; - m_version = vcDoc.m_version; - m_projectGUID = vcDoc.m_projectGUID; - m_rootNamespace = vcDoc.m_rootNamespace; - m_keyword = vcDoc.m_keyword; - m_name = vcDoc.m_name; - m_anyAttribute = vcDoc.m_anyAttribute; + *m_attributeContainer = *vcDoc.m_attributeContainer; // <?xml part m_processingInstructionData = vcDoc.m_processingInstructionData; m_processingInstructionTarget = vcDoc.m_processingInstructionTarget; - m_platforms = Platforms::Ptr(new Platforms(*(vcDoc.m_platforms))); - m_configurations = Configurations::Ptr(new Configurations(*(vcDoc.m_configurations))); - m_files = Files::Ptr(new Files(*vcDoc.m_files)); - m_references = References::Ptr(new References(*(vcDoc.m_references))); - m_globals = Globals::Ptr(new Globals(*(vcDoc.m_globals))); + *m_platforms = *vcDoc.m_platforms; + *m_configurations = *vcDoc.m_configurations; + *m_files = *vcDoc.m_files; + *m_references = *vcDoc.m_references; + *m_globals = *vcDoc.m_globals; + *m_toolFiles = *vcDoc.m_toolFiles; + *m_publishingData = *vcDoc.m_publishingData; } return *this; } -void VcProjectDocument::processNode(const QDomNode &node) +void VcProjectDocument::processNode(const QDomNode &domDoc) { - if (node.isNull()) - return; - - if (node.nodeName() == QLatin1String("Platforms")) - m_platforms->processNode(node); - - else if (node.nodeName() == QLatin1String("Configurations")) - m_configurations->processNode(node); - - else if (node.nodeName() == QLatin1String("References")) - m_references->processNode(node); - - else if (node.nodeName() == QLatin1String("Files")) - m_files->processNode(node); + QDomNode node = domDoc.firstChild(); // xml - else if (node.nodeName() == QLatin1String("Globals")) - m_globals->processNode(node); + parseProcessingInstruction(node.toProcessingInstruction()); - processNode(node.nextSibling()); + node = node.nextSibling(); // Visual studio + processDocumentAttributes(node.toElement()); + node = node.firstChild(); + processDocumentNode(node); } void VcProjectDocument::parseProcessingInstruction(const QDomProcessingInstruction &processingInstruction) @@ -240,7 +198,7 @@ void VcProjectDocument::parseProcessingInstruction(const QDomProcessingInstructi m_processingInstructionTarget = processingInstruction.target(); } -void VcProjectDocument::processVisualStudioNode(const QDomElement &vsNode) +void VcProjectDocument::processDocumentAttributes(const QDomElement &vsNode) { QDomNamedNodeMap namedNodeMap = vsNode.attributes(); @@ -249,27 +207,7 @@ void VcProjectDocument::processVisualStudioNode(const QDomElement &vsNode) if (domNode.nodeType() == QDomNode::AttributeNode) { QDomAttr domElement = domNode.toAttr(); - - if (domElement.name() == QLatin1String("ProjectType")) - m_projectType = domElement.value(); - - else if (domElement.name() == QLatin1String("Version")) - m_version = domElement.value(); - - else if (domElement.name() == QLatin1String("ProjectGUID")) - m_projectGUID = domElement.value(); - - else if (domElement.name() == QLatin1String("RootNamespace")) - m_rootNamespace = domElement.value(); - - else if (domElement.name() == QLatin1String("Keyword")) - m_keyword = domElement.value(); - - else if (domElement.name() == QLatin1String("Name")) - m_name = domElement.value(); - - else - m_anyAttribute.insert(domElement.name(), domElement.value()); + m_attributeContainer->setAttribute(domElement.name(), domElement.value()); } } } @@ -298,30 +236,7 @@ QDomElement VcProjectDocument::toVcDocumentElement(QDomDocument &domXMLDocument) { QDomElement vcDocNode = domXMLDocument.createElement(QLatin1String("VisualStudioProject")); - if (!m_name.isEmpty()) - vcDocNode.setAttribute(QLatin1String("Name"), m_name); - - if (!m_projectType.isEmpty()) - vcDocNode.setAttribute(QLatin1String("ProjectType"), m_projectType); - - if (!m_version.isEmpty()) - vcDocNode.setAttribute(QLatin1String("Version"), m_version); - - if (!m_projectGUID.isEmpty()) - vcDocNode.setAttribute(QLatin1String("ProjectGUID"), m_projectGUID); - - if (!m_rootNamespace.isEmpty()) - vcDocNode.setAttribute(QLatin1String("RootNamespace"), m_rootNamespace); - - if (!m_keyword.isEmpty()) - vcDocNode.setAttribute(QLatin1String("Keyword"), m_keyword); - - QHashIterator<QString, QString> itAttr(m_anyAttribute); - - while (itAttr.hasNext()) { - itAttr.next(); - vcDocNode.setAttribute(itAttr.key(), itAttr.value()); - } + m_attributeContainer->appendToXMLNode(vcDocNode); if (m_platforms->platformCount()) vcDocNode.appendChild(m_platforms->toXMLDomNode(domXMLDocument)); @@ -338,51 +253,47 @@ QDomElement VcProjectDocument::toVcDocumentElement(QDomDocument &domXMLDocument) if (m_globals->globalCount()) vcDocNode.appendChild(m_globals->toXMLDomNode(domXMLDocument)); - return vcDocNode; -} + if (m_toolFiles->toolFileCount()) + vcDocNode.appendChild(m_toolFiles->toXMLDomNode(domXMLDocument)); + if (m_publishingData->publishingItemCount() && m_publishingData->attributeContainer()->getAttributeCount()) + vcDocNode.appendChild(m_publishingData->toXMLDomNode(domXMLDocument)); -VcProjectDocument2003::VcProjectDocument2003(const VcProjectDocument2003 &vcDoc) - : VcProjectDocument(vcDoc) -{ + return vcDocNode; } -VcProjectDocument2003 &VcProjectDocument2003::operator =(const VcProjectDocument2003 &vcDoc) +VcNodeWidget *VcProjectDocument::createSettingsWidget() { - VcProjectDocument::operator =(vcDoc); - return *this; + return new VcProjectDocumentWidget(this); } -VcProjectDocument2003::~VcProjectDocument2003() +void VcProjectDocument::processDocumentNode(const QDomNode &node) { -} + if (node.isNull()) + return; -VcNodeWidget *VcProjectDocument2003::createSettingsWidget() -{ - return new VcProjectDocument2003Widget(this); -} + if (node.nodeName() == QLatin1String("Platforms")) + m_platforms->processNode(node); -MsBuildInformation::MsBuildVersion VcProjectDocument2003::minSupportedMsBuildVersion() const -{ - return MsBuildInformation::MSBUILD_V_2_0; -} + else if (node.nodeName() == QLatin1String("Configurations")) + m_configurations->processNode(node); -MsBuildInformation::MsBuildVersion VcProjectDocument2003::maxSupportedMsBuildVersion() const -{ - return MsBuildInformation::MSBUILD_V_3_5; -} + else if (node.nodeName() == QLatin1String("References")) + m_references->processNode(node); -VcProjectDocument2003::VcProjectDocument2003(const QString &filePath) - : VcProjectDocument(filePath) -{ -} + else if (node.nodeName() == QLatin1String("Files")) + m_files->processNode(node); -void VcProjectDocument2003::init() -{ - m_documentVersion = VcDocConstants::DV_MSVC_2003; - m_files = Files::Ptr(new Files(this)); - m_configurations = Configurations::Ptr(new Configurations(this)); - m_references = References::Ptr(new References); + else if (node.nodeName() == QLatin1String("Globals")) + m_globals->processNode(node); + + else if (node.nodeName() == QLatin1String("ToolFiles")) + m_toolFiles->processNode(node); + + else if (node.nodeName() == QLatin1String("PublishingData")) + m_publishingData->processNode(node); + + processDocumentNode(node.nextSibling()); } @@ -426,367 +337,5 @@ void VcProjectDocumentWidget::onCancelButtonClicked() deleteLater(); } - -VcProjectDocument2003Widget::VcProjectDocument2003Widget(VcProjectDocument2003 *vcDoc) - : VcProjectDocumentWidget(vcDoc) -{ -} - -VcProjectDocument2003Widget::~VcProjectDocument2003Widget() -{ -} - - -VcProjectDocument2005::VcProjectDocument2005(const VcProjectDocument2005 &vcDoc) - : VcProjectDocument2003(vcDoc) -{ - m_toolFiles = ToolFiles::Ptr(new ToolFiles(*(vcDoc.m_toolFiles))); -} - -VcProjectDocument2005 &VcProjectDocument2005::operator =(const VcProjectDocument2005 &vcDoc) -{ - if (this != &vcDoc) { - VcProjectDocument2003::operator =(vcDoc); - m_toolFiles = ToolFiles::Ptr(new ToolFiles(*(vcDoc.m_toolFiles))); - } - - return *this; -} - -VcProjectDocument2005::~VcProjectDocument2005() -{ -} - -VcNodeWidget *VcProjectDocument2005::createSettingsWidget() -{ - return new VcProjectDocument2005Widget(this); -} - -MsBuildInformation::MsBuildVersion VcProjectDocument2005::minSupportedMsBuildVersion() const -{ - return MsBuildInformation::MSBUILD_V_3_0; -} - -MsBuildInformation::MsBuildVersion VcProjectDocument2005::maxSupportedMsBuildVersion() const -{ - return MsBuildInformation::MSBUILD_V_3_5; -} - -ToolFiles::Ptr VcProjectDocument2005::toolFiles() const -{ - return m_toolFiles; -} - -VcProjectDocument2005::VcProjectDocument2005(const QString &filePath) - : VcProjectDocument2003(filePath), - m_toolFiles(ToolFiles::Ptr(new ToolFiles)) -{ -} - -void VcProjectDocument2005::init() -{ - m_documentVersion = VcDocConstants::DV_MSVC_2005; - m_files = Files::Ptr(new Files(this)); - m_configurations = Configurations::Ptr(new Configurations(this)); - m_references = References::Ptr(new References); -} - -void VcProjectDocument2005::processNode(const QDomNode &node) -{ - if (node.isNull()) - return; - - if (node.nodeName() == QLatin1String("Platforms")) - m_platforms->processNode(node); - - else if (node.nodeName() == QLatin1String("Configurations")) - m_configurations->processNode(node); - - else if (node.nodeName() == QLatin1String("References")) - m_references->processNode(node); - - else if (node.nodeName() == QLatin1String("Files")) - m_files->processNode(node); - - else if (node.nodeName() == QLatin1String("Globals")) - m_globals->processNode(node); - - else if (node.nodeName() == QLatin1String("ToolFiles")) - m_toolFiles->processNode(node); - - processNode(node.nextSibling()); -} - -QDomElement VcProjectDocument2005::toVcDocumentElement(QDomDocument &domXMLDocument) const -{ - QDomElement vcDocNode = VcProjectDocument2003::toVcDocumentElement(domXMLDocument); - - if (m_toolFiles->toolFileCount()) - vcDocNode.appendChild(m_toolFiles->toXMLDomNode(domXMLDocument)); - - return vcDocNode; -} - - -VcProjectDocument2005Widget::VcProjectDocument2005Widget(VcProjectDocument2005 *vcDoc) - : VcProjectDocumentWidget(vcDoc) -{ -} - -VcProjectDocument2005Widget::~VcProjectDocument2005Widget() -{ -} - - -VcProjectDocument2008::VcProjectDocument2008(const VcProjectDocument2008 &vcDoc) - : VcProjectDocument2005(vcDoc) -{ - m_publishingData = PublishingData::Ptr(new PublishingData(*(vcDoc.m_publishingData))); - - m_assemblyReferenceSearchPaths = vcDoc.m_assemblyReferenceSearchPaths; - m_manifestKeyFile = vcDoc.m_manifestKeyFile; - m_manifestCertificateThumbprint = vcDoc.m_manifestCertificateThumbprint; - m_manifestTimestampURL = vcDoc.m_manifestTimestampURL; - m_signManifests = vcDoc.m_signManifests; - m_signAssembly = vcDoc.m_signAssembly; - m_assemblyOriginatorKeyFile = vcDoc.m_assemblyOriginatorKeyFile; - m_delaySign = vcDoc.m_delaySign; - m_generateManifests = vcDoc.m_generateManifests; - m_targetZone = vcDoc.m_targetZone; - m_excludedPermissions = vcDoc.m_excludedPermissions; - m_targetFrameworkVersion = vcDoc.m_targetFrameworkVersion; -} - -VcProjectDocument2008 &VcProjectDocument2008::operator=(const VcProjectDocument2008 &vcDoc) -{ - if (this != &vcDoc) { - VcProjectDocument2005::operator =(vcDoc); - - m_publishingData = PublishingData::Ptr(new PublishingData(*(vcDoc.m_publishingData))); - - m_assemblyReferenceSearchPaths = vcDoc.m_assemblyReferenceSearchPaths; - m_manifestKeyFile = vcDoc.m_manifestKeyFile; - m_manifestCertificateThumbprint = vcDoc.m_manifestCertificateThumbprint; - m_manifestTimestampURL = vcDoc.m_manifestTimestampURL; - m_signManifests = vcDoc.m_signManifests; - m_signAssembly = vcDoc.m_signAssembly; - m_assemblyOriginatorKeyFile = vcDoc.m_assemblyOriginatorKeyFile; - m_delaySign = vcDoc.m_delaySign; - m_generateManifests = vcDoc.m_generateManifests; - m_targetZone = vcDoc.m_targetZone; - m_excludedPermissions = vcDoc.m_excludedPermissions; - m_targetFrameworkVersion = vcDoc.m_targetFrameworkVersion; - } - return *this; -} - -VcProjectDocument2008::~VcProjectDocument2008() -{ -} - -VcNodeWidget *VcProjectDocument2008::createSettingsWidget() -{ - return new VcProjectDocument2008Widget(this); -} - -MsBuildInformation::MsBuildVersion VcProjectDocument2008::minSupportedMsBuildVersion() const -{ - return MsBuildInformation::MSBUILD_V_3_5; -} - -MsBuildInformation::MsBuildVersion VcProjectDocument2008::maxSupportedMsBuildVersion() const -{ - return MsBuildInformation::MSBUILD_V_3_5; -} - -PublishingData::Ptr VcProjectDocument2008::publishingData() const -{ - return m_publishingData; -} - -VcProjectDocument2008::VcProjectDocument2008(const QString &filePath) - : VcProjectDocument2005(filePath), - m_publishingData(PublishingData::Ptr(new PublishingData)) -{ -} - -void VcProjectDocument2008::init() -{ - m_documentVersion = VcDocConstants::DV_MSVC_2008; - m_files = Files::Ptr(new Files(this)); - m_configurations = Configurations::Ptr(new Configurations(this)); - m_references = References::Ptr(new References); -} - -void VcProjectDocument2008::processNode(const QDomNode &node) -{ - if (node.isNull()) - return; - - if (node.nodeName() == QLatin1String("Platforms")) - m_platforms->processNode(node); - - else if (node.nodeName() == QLatin1String("Configurations")) - m_configurations->processNode(node); - - else if (node.nodeName() == QLatin1String("References")) - m_references->processNode(node); - - else if (node.nodeName() == QLatin1String("Files")) - m_files->processNode(node); - - else if (node.nodeName() == QLatin1String("Globals")) - m_globals->processNode(node); - - else if (node.nodeName() == QLatin1String("ToolFiles")) - m_toolFiles->processNode(node); - - else if (node.nodeName() == QLatin1String("PublishingData")) - m_publishingData->processNode(node); - - processNode(node.nextSibling()); -} - -void VcProjectDocument2008::processVisualStudioNode(const QDomElement &vsNode) -{ - VcProjectDocument2005::processVisualStudioNode(vsNode); - - QDomNamedNodeMap namedNodeMap = vsNode.attributes(); - - for (int i = 0; i < namedNodeMap.count(); ++i) { - QDomNode domNode = namedNodeMap.item(i); - - if (domNode.nodeType() == QDomNode::AttributeNode) { - QDomAttr domElement = domNode.toAttr(); - - if (domElement.name() == QLatin1String("AssemblyReferenceSearchPaths")) - m_assemblyReferenceSearchPaths = domElement.value(); - - else if (domElement.name() == QLatin1String("ManifestKeyFile")) - m_manifestKeyFile = domElement.value(); - - else if (domElement.name() == QLatin1String("ManifestCertificateThumbprint")) - m_manifestCertificateThumbprint = domElement.value(); - - else if (domElement.name() == QLatin1String("ManifestTimestampURL")) - m_manifestTimestampURL = domElement.value(); - - else if (domElement.name() == QLatin1String("SignManifests")) { - if (domElement.value() == QLatin1String("false")) - m_signManifests = false; - else - m_signManifests = true; - } - - else if (domElement.name() == QLatin1String("SignAssembly")) { - if (domElement.value() == QLatin1String("false")) - m_signAssembly = false; - else - m_signAssembly = true; - } - - else if (domElement.name() == QLatin1String("AssemblyOriginatorKeyFile")) - m_assemblyOriginatorKeyFile = domElement.value(); - - else if (domElement.name() == QLatin1String("DelaySign")) { - if (domElement.value() == QLatin1String("false")) - m_delaySign = false; - else - m_delaySign = true; - } - - else if (domElement.name() == QLatin1String("DelaySign")) { - if (domElement.value() == QLatin1String("GenerateManifests")) - m_generateManifests = false; - else - m_generateManifests = true; - } - - else if (domElement.name() == QLatin1String("TargetZone")) - m_targetZone = domElement.value(); - - else if (domElement.name() == QLatin1String("ExcludedPermissions")) - m_excludedPermissions = domElement.value(); - - else if (domElement.name() == QLatin1String("TargetFrameworkVersion")) - m_targetFrameworkVersion = domElement.value(); - } - } -} - -QDomElement VcProjectDocument2008::toVcDocumentElement(QDomDocument &domXMLDocument) const -{ - QDomElement vcDocNode = VcProjectDocument2005::toVcDocumentElement(domXMLDocument); - - if (!m_assemblyReferenceSearchPaths.isEmpty()) - vcDocNode.setAttribute(QLatin1String("AssemblyReferenceSearchPaths"), m_assemblyReferenceSearchPaths); - - if (!m_manifestKeyFile.isEmpty()) - vcDocNode.setAttribute(QLatin1String("ManifestKeyFile"), m_manifestKeyFile); - - if (!m_manifestCertificateThumbprint.isEmpty()) - vcDocNode.setAttribute(QLatin1String("ManifestCertificateThumbprint"), m_manifestCertificateThumbprint); - - if (!m_manifestTimestampURL.isEmpty()) - vcDocNode.setAttribute(QLatin1String("ManifestTimestampURL"), m_manifestTimestampURL); - - vcDocNode.setAttribute(QLatin1String("SignManifests"), QVariant(m_signManifests).toString()); - vcDocNode.setAttribute(QLatin1String("SignAssembly"), QVariant(m_signAssembly).toString()); - - if (!m_assemblyOriginatorKeyFile.isEmpty()) - vcDocNode.setAttribute(QLatin1String("AssemblyOriginatorKeyFile"), m_assemblyOriginatorKeyFile); - - vcDocNode.setAttribute(QLatin1String("DelaySign"), QVariant(m_delaySign).toString()); - vcDocNode.setAttribute(QLatin1String("GenerateManifests"), QVariant(m_generateManifests).toString()); - - if (!m_targetZone.isEmpty()) - vcDocNode.setAttribute(QLatin1String("TargetZone"), m_targetZone); - - if (!m_excludedPermissions.isEmpty()) - vcDocNode.setAttribute(QLatin1String("ExcludedPermissions"), m_excludedPermissions); - - if (!m_targetFrameworkVersion.isEmpty()) - vcDocNode.setAttribute(QLatin1String("TargetFrameworkVersion"), m_targetFrameworkVersion); - - if (m_publishingData->publishingItemCount() && m_publishingData->attributeContainer()->getAttributeCount()) - vcDocNode.appendChild(m_publishingData->toXMLDomNode(domXMLDocument)); - - return vcDocNode; -} - - -VcProjectDocument2008Widget::VcProjectDocument2008Widget(VcProjectDocument2008 *vcDoc) - : VcProjectDocumentWidget(vcDoc) -{ -} - -VcProjectDocument2008Widget::~VcProjectDocument2008Widget() -{ -} - - -VcProjectDocument *VcProjectDocumentFactory::create(const QString &filePath, VcDocConstants::DocumentVersion version) -{ - VcProjectDocument *vcDoc = 0; - - switch (version) { - case VcDocConstants::DV_MSVC_2003: - vcDoc = new VcProjectDocument2003(filePath); - break; - case VcDocConstants::DV_MSVC_2005: - vcDoc = new VcProjectDocument2005(filePath); - break; - case VcDocConstants::DV_MSVC_2008: - vcDoc = new VcProjectDocument2008(filePath); - break; - case VcDocConstants::DV_UNRECOGNIZED: - return 0; - } - - if (vcDoc) - vcDoc->init(); - return vcDoc; -} - } // namespace Internal } // namespace VcProjectManager diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectdocument.h b/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectdocument.h index 22308d76d5..04c5d0da76 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectdocument.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectdocument.h @@ -31,7 +31,7 @@ #ifndef VCPROJECTMANAGER_INTERNAL_VCPROJECTDOCUMENT_H #define VCPROJECTMANAGER_INTERNAL_VCPROJECTDOCUMENT_H -#include "ivcprojectnodemodel.h" +#include "../interfaces/ivisualstudioproject.h" #include "configurations.h" #include "files.h" @@ -48,103 +48,56 @@ namespace Internal { class ConfigurationsBaseWidget; -class VcProjectDocument : public IVcProjectXMLNode +class VcProjectDocument : public IVisualStudioProject { friend class VcProjectDocumentFactory; public: + VcProjectDocument(const QString &filePath, VcDocConstants::DocumentVersion docVersion); + VcProjectDocument(const VcProjectDocument &vcDoc); + VcProjectDocument& operator=(const VcProjectDocument &vcDoc); virtual ~VcProjectDocument(); + void processNode(const QDomNode &domDoc); - void readFromXMLDomDocument(const QDomNode &domDoc); bool saveToFile(const QString &filePath) const; VcDocConstants::DocumentVersion documentVersion() const; QString filePath() const; - void allProjectFiles(QStringList &sl) const; - - /*! - * Implementation should return a minimal version of MS Build tool that is required to build a project. - * For example VS 2008 project can be compiled with MS Build 3.0 and 3.5. - * So the minimal MS Build version for VS 2008 projects is 3.0 - * \return A minimal supported Ms Build version that is required to compile a project. - */ - virtual MsBuildInformation::MsBuildVersion minSupportedMsBuildVersion() const = 0; - - /*! - * Implementation should return a max version of MS Build tool that can be used to build a project. - * For example VS 2008 project can be compiled with MS Build 3.0 and 3.5. - * So the maximum MS Build version for VS 2008 projects is 3.5 - * \return - */ - virtual MsBuildInformation::MsBuildVersion maxSupportedMsBuildVersion() const = 0; - - // helper function, used to create a relative path to a file, path is relative to a project's file path - QString fileRelativePath(const QString &filePath); - Configurations::Ptr configurations() const; - Platforms::Ptr platforms() const; - Files::Ptr files() const; - Globals::Ptr globals() const; - References::Ptr references() const; + IConfigurations *configurations() const; + IFiles *files() const; + IGlobals *globals() const; + IPlatforms *platforms() const; + IReferences *referencess() const; + IToolFiles *toolFiles() const; + IPublishingData *publishingData() const; + IAttributeContainer* attributeContainer() const; + VcNodeWidget *createSettingsWidget(); protected: - VcProjectDocument(const QString &filePath); - VcProjectDocument(const VcProjectDocument &vcDoc); - VcProjectDocument& operator=(const VcProjectDocument &vcDoc); - void processNode(const QDomNode &node); - virtual void processVisualStudioNode(const QDomElement &vsNode); + void processDocumentNode(const QDomNode &node); + void processDocumentAttributes(const QDomElement &vsNode); QDomNode toXMLDomNode(QDomDocument &domXMLDocument) const; - virtual QDomElement toVcDocumentElement(QDomDocument &domXMLDocument) const; - - /*! - * Called to initialize VcProjectDocument after instance is created. - * This is the place in which objects that represent Configurations, References, Globals etc. should be created. - */ - virtual void init() = 0; + QDomElement toVcDocumentElement(QDomDocument &domXMLDocument) const; void parseProcessingInstruction(const QDomProcessingInstruction &processingInstruction); - QString m_filePath; - QString m_projectType; // optional - QString m_version; // optional - - QString m_projectGUID; // optional - QString m_rootNamespace; // optional - QString m_keyword; // optional - QString m_name; // optional - - QHash<QString, QString> m_anyAttribute; + QString m_filePath; // used to store path to a file // <?xml part QHash<QString, QString> m_processingInstructionData; QString m_processingInstructionTarget; VcDocConstants::DocumentVersion m_documentVersion; - Platforms::Ptr m_platforms; - Configurations::Ptr m_configurations; - Files::Ptr m_files; - References::Ptr m_references; - Globals::Ptr m_globals; + Platforms *m_platforms; + Configurations *m_configurations; + Files *m_files; + References *m_references; + Globals *m_globals; + ToolFiles *m_toolFiles; + PublishingData *m_publishingData; + GeneralAttributeContainer* m_attributeContainer; }; -class VcProjectDocument2003 : public VcProjectDocument -{ - friend class VcProjectDocumentFactory; - -public: - VcProjectDocument2003(const VcProjectDocument2003 &vcDoc); - VcProjectDocument2003& operator=(const VcProjectDocument2003 &vcDoc); - ~VcProjectDocument2003(); - - VcNodeWidget* createSettingsWidget(); - MsBuildInformation::MsBuildVersion minSupportedMsBuildVersion() const; - MsBuildInformation::MsBuildVersion maxSupportedMsBuildVersion() const; - -protected: - VcProjectDocument2003(const QString &filePath); - void init(); -}; - - class VcProjectDocumentWidget : public VcNodeWidget { Q_OBJECT @@ -166,103 +119,6 @@ protected: ConfigurationsBaseWidget *m_configurationsWidget; }; - -class VcProjectDocument2003Widget : public VcProjectDocumentWidget -{ - Q_OBJECT - -public: - explicit VcProjectDocument2003Widget(VcProjectDocument2003 *vcDoc); - ~VcProjectDocument2003Widget(); -}; - -class VcProjectDocument2005 : public VcProjectDocument2003 -{ - friend class VcProjectDocumentFactory; - -public: - VcProjectDocument2005(const VcProjectDocument2005 &vcDoc); - VcProjectDocument2005& operator=(const VcProjectDocument2005 &vcDoc); - ~VcProjectDocument2005(); - - VcNodeWidget* createSettingsWidget(); - MsBuildInformation::MsBuildVersion minSupportedMsBuildVersion() const; - MsBuildInformation::MsBuildVersion maxSupportedMsBuildVersion() const; - - ToolFiles::Ptr toolFiles() const; - -protected: - VcProjectDocument2005(const QString &filePath); - void init(); - void processNode(const QDomNode &node); - QDomElement toVcDocumentElement(QDomDocument &domXMLDocument) const; - - ToolFiles::Ptr m_toolFiles; -}; - -class VcProjectDocument2005Widget : public VcProjectDocumentWidget -{ - Q_OBJECT - -public: - explicit VcProjectDocument2005Widget(VcProjectDocument2005 *vcDoc); - ~VcProjectDocument2005Widget(); -}; - -class VcProjectDocument2008 : public VcProjectDocument2005 -{ - friend class VcProjectDocumentFactory; - -public: - VcProjectDocument2008(const VcProjectDocument2008 &vcDoc); - VcProjectDocument2008& operator=(const VcProjectDocument2008 &vcDoc); - ~VcProjectDocument2008(); - - VcNodeWidget* createSettingsWidget(); - MsBuildInformation::MsBuildVersion minSupportedMsBuildVersion() const; - MsBuildInformation::MsBuildVersion maxSupportedMsBuildVersion() const; - - PublishingData::Ptr publishingData() const; - -protected: - VcProjectDocument2008(const QString &filePath); - void init(); - void processNode(const QDomNode &node); - void processVisualStudioNode(const QDomElement &vsNode); - QDomElement toVcDocumentElement(QDomDocument &domXMLDocument) const; - -private: - PublishingData::Ptr m_publishingData; - - QString m_assemblyReferenceSearchPaths; - QString m_manifestKeyFile; - QString m_manifestCertificateThumbprint; - QString m_manifestTimestampURL; - bool m_signManifests; - bool m_signAssembly; - QString m_assemblyOriginatorKeyFile; - bool m_delaySign; - bool m_generateManifests; - QString m_targetZone; - QString m_excludedPermissions; - QString m_targetFrameworkVersion; -}; - -class VcProjectDocument2008Widget : public VcProjectDocumentWidget -{ - Q_OBJECT - -public: - explicit VcProjectDocument2008Widget(VcProjectDocument2008 *vcDoc); - ~VcProjectDocument2008Widget(); -}; - -class VcProjectDocumentFactory -{ -public: - static VcProjectDocument* create(const QString &filePath, VcDocConstants::DocumentVersion version); -}; - } // namespace Internal } // namespace VcProjectManager diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectdocument_constants.h b/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectdocument_constants.h index 8076a8bfbe..3cfdc279ab 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectdocument_constants.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectdocument_constants.h @@ -84,6 +84,26 @@ const char TOOL_FILE_RELATIVE_PATH [] = "RelativePath"; const char DEFAULT_TOOL_FILE [] = "DefaultToolFile"; const char DEFAULT_TOOL_FILE_FILE_NAME [] = "FileName"; +// Vs Project Constants +const char VS_PROJECT_PROJECT_TYPE [] = "ProjectType"; +const char VS_PROJECT_VERSION [] = "Version"; +const char VS_PROJECT_PROJECT_GUID [] = "ProjectGUID"; +const char VS_PROJECT_ROOT_NAMESPACE [] = "RootNamespace"; +const char VS_PROJECT_KEYWORD [] = "Keyword"; +const char VS_PROJECT_NAME [] = "Name"; +const char VS_PROJECT_ASSEMBLY_REFERENCE_SEARCH_PATH [] = "AssemblyReferenceSearchPaths"; +const char VS_PROJECT_MANIFEST_KEY_FILE [] = "ManifestKeyFile"; +const char VS_PROJECT_MANIFEST_CERTIFICATE_THUMBPRINT [] = "ManifestCertificateThumbprint"; +const char VS_PROJECT_MANIFEST_TIMESTAMP_URL [] = "ManifestTimestampURL"; +const char VS_PROJECT_SIGN_MANIFEST [] = "SignManifests"; +const char VS_PROJECT_SIGN_ASSEMBLY [] = "SignAssembly"; +const char VS_PROJECT_ASSEMBLY_ORIGINATOR_KEY_FILE [] = "AssemblyOriginatorKeyFile"; +const char VS_PROJECT_DELAY_SIGN [] = "DelaySign"; +const char VS_PROJECT_GENERATE_MANIFESTS [] = "GenerateManifests"; +const char VS_PROJECT_TARGET_ZONE [] = "TargetZone"; +const char VS_PROJECT_EXCLUDED_PERMISSIONS [] = "ExcludedPermissions"; +const char VS_PROJECT_TARGET_FRAMEWORK_VERSION [] = "TargetFrameworkVersion"; + } // VcDocConstants } // namespace Internal } // namespace VcProjectManager diff --git a/src/plugins/vcprojectmanager/widgets/configurationswidgets.cpp b/src/plugins/vcprojectmanager/widgets/configurationswidgets.cpp index ce8ca17604..37d15fc9bb 100644 --- a/src/plugins/vcprojectmanager/widgets/configurationswidgets.cpp +++ b/src/plugins/vcprojectmanager/widgets/configurationswidgets.cpp @@ -117,7 +117,7 @@ void ConfigurationsBaseWidget::saveData() void ConfigurationsBaseWidget::onAddNewConfig(QString newConfigName, QString copyFrom) { - Platforms::Ptr platforms = m_vcProjDoc->platforms(); + IPlatforms *platforms = m_vcProjDoc->platforms(); if (platforms && !newConfigName.isEmpty()) { if (copyFrom.isEmpty()) { @@ -156,7 +156,7 @@ void ConfigurationsBaseWidget::onAddNewConfig(QString newConfigName, QString cop void ConfigurationsBaseWidget::onRenameConfig(QString newConfigName, QString oldConfigNameWithPlatform) { - Platforms::Ptr platforms = m_vcProjDoc->platforms(); + IPlatforms *platforms = m_vcProjDoc->platforms(); if (!platforms || newConfigName.isEmpty() || oldConfigNameWithPlatform.isEmpty()) return; @@ -207,7 +207,7 @@ void ConfigurationsBaseWidget::onRenameConfig(QString newConfigName, QString old void ConfigurationsBaseWidget::onRemoveConfig(QString configNameWithPlatform) { - Platforms::Ptr platforms = m_vcProjDoc->platforms(); + IPlatforms *platforms = m_vcProjDoc->platforms(); if (!platforms || configNameWithPlatform.isEmpty()) return; @@ -286,7 +286,7 @@ IConfiguration *ConfigurationsBaseWidget::configInNewConfigurations(const QStrin void ConfigurationsBaseWidget::addConfigurationToFiles(const QString ©FromConfig, const QString &targetConfigName) { - Files::Ptr docFiles = m_vcProjDoc->files(); + IFiles *docFiles = m_vcProjDoc->files(); if (docFiles) { for (int i = 0; i < docFiles->fileContainerCount(); ++i) { |