diff options
author | Radovan Zivkovic <pivonroll@gmail.com> | 2013-06-05 02:54:08 +0200 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@digia.com> | 2014-03-11 19:54:54 +0100 |
commit | 88375277e78881b5f085a39295f70cf799ce6f9e (patch) | |
tree | a07c557fd6265c7bbd79267c22759c86e9e160ad | |
parent | 18037f1760df2f210c514ed1a58d480c986c0101 (diff) |
Fixed fileExists method. Added remove file support.
Change-Id: I2fc55cacbc66b4b397a77e68b34e76a3b9658ee3
Reviewed-by: Bojan Petrovic <bojan85@gmail.com>
10 files changed, 211 insertions, 20 deletions
diff --git a/src/plugins/vcprojectmanager/vcprojectbuildconfiguration.cpp b/src/plugins/vcprojectmanager/vcprojectbuildconfiguration.cpp index 09cf38b592..369c2fc268 100644 --- a/src/plugins/vcprojectmanager/vcprojectbuildconfiguration.cpp +++ b/src/plugins/vcprojectmanager/vcprojectbuildconfiguration.cpp @@ -82,17 +82,37 @@ ProjectExplorer::BuildConfiguration::BuildType VcProjectBuildConfiguration::buil return Debug; } -QVariantMap VcProjectBuildConfiguration::toMap() const -{ - return ProjectExplorer::BuildConfiguration::toMap(); -} - void VcProjectBuildConfiguration::setConfiguration(Configuration::Ptr config) { m_configuration = config; connect(m_configuration.data(), SIGNAL(nameChanged()), this, SLOT(reloadConfigurationName())); } +QString VcProjectBuildConfiguration::configurationNameOnly() const +{ + QStringList splits = m_configuration->name().split(QLatin1Char('|')); + + if (splits.isEmpty()) + return QString(); + + return splits[0]; +} + +QString VcProjectBuildConfiguration::platformNameOnly() const +{ + QStringList splits = m_configuration->name().split(QLatin1Char('|')); + + if (splits.isEmpty() || splits.size() <= 1 || splits.size() > 2) + return QString(); + + return splits[1]; +} + +QVariantMap VcProjectBuildConfiguration::toMap() const +{ + return ProjectExplorer::BuildConfiguration::toMap(); +} + void VcProjectBuildConfiguration::reloadConfigurationName() { setDisplayName(m_configuration->name()); diff --git a/src/plugins/vcprojectmanager/vcprojectbuildconfiguration.h b/src/plugins/vcprojectmanager/vcprojectbuildconfiguration.h index 4a312f9723..92f1b6a726 100644 --- a/src/plugins/vcprojectmanager/vcprojectbuildconfiguration.h +++ b/src/plugins/vcprojectmanager/vcprojectbuildconfiguration.h @@ -50,9 +50,12 @@ public: QString buildDirectory() const; ProjectExplorer::IOutputParser *createOutputParser() const; BuildType buildType() const; - QVariantMap toMap() const; void setConfiguration(Configuration::Ptr config); + QString configurationNameOnly() const; + QString platformNameOnly() const; + + QVariantMap toMap() const; private slots: void reloadConfigurationName(); diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/filter.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/filter.cpp index 79d1aeeb9b..4a468c98f5 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/filter.cpp +++ b/src/plugins/vcprojectmanager/vcprojectmodel/filter.cpp @@ -123,6 +123,11 @@ void Filter::removeFile(const QString &relativeFilePath) m_filterType->removeFile(relativeFilePath); } +File::Ptr Filter::file(const QString &relativePath) const +{ + return m_filterType->file(relativePath); +} + QList<File::Ptr > Filter::files() const { return m_filterType->files(); @@ -137,6 +142,12 @@ bool Filter::fileExists(const QString &relativeFilePath) return true; } + QList<Filter::Ptr> filters = m_filterType->filters(); + + foreach (Filter::Ptr filterPtr, filters) + if (filterPtr->fileExists(relativeFilePath)) + return true; + return false; } diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/filter.h b/src/plugins/vcprojectmanager/vcprojectmodel/filter.h index cc325f100e..eb3c7da785 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/filter.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/filter.h @@ -63,6 +63,7 @@ public: void addFile(File::Ptr file); void removeFile(File::Ptr file); void removeFile(const QString &relativeFilePath); + File::Ptr file(const QString &relativePath) const; QList<File::Ptr > files() const; bool fileExists(const QString &relativeFilePath); diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/filtertype.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/filtertype.cpp index 1b30ea75b9..8ec0e4705b 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/filtertype.cpp +++ b/src/plugins/vcprojectmanager/vcprojectmodel/filtertype.cpp @@ -149,6 +149,14 @@ void FilterType::removeFile(const QString &relativeFilePath) } } +File::Ptr FilterType::file(const QString &relativePath) const +{ + foreach (File::Ptr file, m_files) + if (file->relativePath() == relativePath) + return file; + return File::Ptr(); +} + QList<File::Ptr > FilterType::files() const { return m_files; diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/filtertype.h b/src/plugins/vcprojectmanager/vcprojectmodel/filtertype.h index 218c40c123..41ccf7885b 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/filtertype.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/filtertype.h @@ -59,6 +59,7 @@ public: void addFile(File::Ptr file); void removeFile(File::Ptr file); void removeFile(const QString &relativeFilePath); + File::Ptr file(const QString &relativePath) const; QList<File::Ptr > files() const; QString attributeValue(const QString &attributeName) const; diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/folder.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/folder.cpp index 24443548f0..905f44612e 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/folder.cpp +++ b/src/plugins/vcprojectmanager/vcprojectmodel/folder.cpp @@ -132,10 +132,21 @@ bool Folder::fileExists(const QString &relativeFilePath) { QList<File::Ptr> files = m_folderType->files(); - foreach (File::Ptr filePtr, files) { + foreach (File::Ptr filePtr, files) if (filePtr->relativePath() == relativeFilePath) return true; - } + + QList<Filter::Ptr> filters = m_folderType->filters(); + + foreach (Filter::Ptr filterPtr, filters) + if (filterPtr->fileExists(relativeFilePath)) + return true; + + QList<Folder::Ptr> folders = m_folderType->folders(); + + foreach (Folder::Ptr folderPtr, folders) + if (folderPtr->fileExists(relativeFilePath)) + return true; return false; } diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.cpp index c3fa262a3c..c629b72c04 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.cpp +++ b/src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.cpp @@ -73,6 +73,24 @@ VcContainerNode::VcContainerType VcContainerNode::vcContainerType() const return m_vcContainerType; } +VcFileNode *VcContainerNode::findFileNode(const QString &filePath) +{ + VcFileNode *fileNode = static_cast<VcFileNode *>(findFile(filePath)); + + if (fileNode) + return fileNode; + + foreach (ProjectExplorer::FolderNode *folderNode, m_subFolderNodes) { + VcContainerNode *containerNode = static_cast<VcContainerNode *>(folderNode); + fileNode = containerNode->findFileNode(filePath); + + if (fileNode) + return fileNode; + } + + return 0; +} + VcFilterNode::VcFilterNode(Filter *filterModel, VcDocProjectNode *vcDocProjNode) : VcContainerNode(filterModel->name()), @@ -179,6 +197,23 @@ void VcFilterNode::removeFilterNode(VcFilterNode *filterNode) m_parentVcDocProjNode->m_vcProjectModel->saveToFile(m_parentVcDocProjNode->m_vcProjectModel->filePath()); } +void VcFilterNode::removeFileNode(VcFileNode *fileNode) +{ + if (!fileNode || !fileNode->m_vcFileModel) + return; + + QString relativePath = fileNode->m_vcFileModel->relativePath(); + + QList<ProjectExplorer::FileNode *> fileNodesToRemove; + fileNodesToRemove << fileNode; + m_parentVcDocProjNode->removeFileNodes(fileNodesToRemove, this); + + File::Ptr filePtr = m_vcFilterModel->file(relativePath); + + m_vcFilterModel->removeFile(filePtr); + m_parentVcDocProjNode->m_vcProjectModel->saveToFile(m_parentVcDocProjNode->m_vcProjectModel->filePath()); +} + void VcFilterNode::readChildren() { QList<Filter::Ptr > filters = m_vcFilterModel->filters(); @@ -288,6 +323,23 @@ bool VcFolderNode::appendFilterNode(VcFilterNode *filterNode) return true; } +void VcFolderNode::removeFileNode(VcFileNode *fileNode) +{ + if (!fileNode || !fileNode->m_vcFileModel) + return; + + QString relativePath = fileNode->m_vcFileModel->relativePath(); + + QList<ProjectExplorer::FileNode *> fileNodesToRemove; + fileNodesToRemove << fileNode; + m_parentVcDocProjNode->removeFileNodes(fileNodesToRemove, this); + + File::Ptr filePtr = m_vcFolderModel->file(relativePath); + + m_vcFolderModel->removeFile(filePtr); + m_parentVcDocProjNode->m_vcProjectModel->saveToFile(m_parentVcDocProjNode->m_vcProjectModel->filePath()); +} + void VcFolderNode::removeFilterNode(VcFilterNode *filterNode) { if (!filterNode || !filterNode->m_vcFilterModel) @@ -342,17 +394,19 @@ bool VcFolderNode::appendFolderNode(VcFolderNode *folderNode) return true; } -void VcFolderNode::removeFolderNode(VcFolderNode *node) +void VcFolderNode::removeFolderNode(VcFolderNode *folderNode) { - if (!node) + if (!folderNode || !folderNode->m_vcFolderModel) return; - // Folder *vcFolderModel = node->m_vcFolderModel; + QString folderName = folderNode->m_vcFolderModel->name(); - // QList<ProjectExplorer::FolderNode *> folderNodesToRemove; - // folderNodesToRemove << node; - // m_parentVcDocProjNode->removeFileNodes(folderNodesToRemove, this); + QList<ProjectExplorer::FolderNode *> folderNodesToRemove; + folderNodesToRemove << folderNode; + m_parentVcDocProjNode->removeFolderNodes(folderNodesToRemove, this); + m_vcFolderModel->removeFolder(folderName); + m_parentVcDocProjNode->m_vcProjectModel->saveToFile(m_parentVcDocProjNode->m_vcProjectModel->filePath()); } void VcFolderNode::readChildren() @@ -535,9 +589,42 @@ bool VcDocProjectNode::addFiles(const ProjectExplorer::FileType fileType, const bool VcDocProjectNode::removeFiles(const ProjectExplorer::FileType fileType, const QStringList &filePaths, QStringList *notRemoved) { Q_UNUSED(fileType) - Q_UNUSED(filePaths) - Q_UNUSED(notRemoved) - return false; + + QStringList filesNotRemoved; + + foreach (const QString &filePath, filePaths) { + QString relativeFilePath = m_vcProjectModel->fileRelativePath(filePath); + + if (m_vcProjectModel->files()->fileExists(relativeFilePath)) { + VcFileNode *fileNode = static_cast<VcFileNode *>(findFileNode(filePath)); + + if (fileNode) { + ProjectExplorer::FolderNode *parentNode = fileNode->parentFolderNode(); + + if (parentNode && parentNode->nodeType() == ProjectExplorer::FolderNodeType) { + VcContainerNode *containerNode = static_cast<VcContainerNode *>(parentNode); + + if (containerNode) + containerNode->removeFileNode(fileNode); + } + + else if (parentNode && parentNode->nodeType() == ProjectExplorer::ProjectFileType) { + VcDocProjectNode *projectNode = static_cast<VcDocProjectNode *>(parentNode); + + if (projectNode) + projectNode->removeFileNode(fileNode); + } + } + } + + else + filesNotRemoved << filePath; + } + + if (notRemoved) + *notRemoved = filesNotRemoved; + + return filesNotRemoved.isEmpty(); } bool VcDocProjectNode::deleteFiles(const ProjectExplorer::FileType fileType, const QStringList &filePaths) @@ -697,7 +784,7 @@ void VcDocProjectNode::removeFilterNode(VcFilterNode *filterNode) QList<ProjectExplorer::FolderNode *> folderNodesToRemove; folderNodesToRemove << filterNode; - removeFolderNodes(folderNodesToRemove, this); + removeFolderNodes(folderNodesToRemove, filterNode->parentFolderNode()); m_vcProjectModel->files()->removeFilter(filterName); m_vcProjectModel->saveToFile(m_vcProjectModel->filePath()); @@ -721,5 +808,40 @@ void VcDocProjectNode::removeFolderNode(VcFolderNode *folderNode) m_vcProjectModel->saveToFile(m_vcProjectModel->filePath()); } +void VcDocProjectNode::removeFileNode(VcFileNode *fileNode) +{ + if (!m_vcProjectModel || !fileNode || !fileNode->m_vcFileModel) + return; + + QString relativePath = fileNode->m_vcFileModel->relativePath(); + + QList<ProjectExplorer::FileNode *> fileNodesToRemove; + fileNodesToRemove << fileNode; + removeFileNodes(fileNodesToRemove, this); + + File::Ptr filePtr = m_vcProjectModel->files()->file(relativePath); + + m_vcProjectModel->files()->removeFile(filePtr); + m_vcProjectModel->saveToFile(m_vcProjectModel->filePath()); +} + +VcFileNode *VcDocProjectNode::findFileNode(const QString &filePath) +{ + VcFileNode *fileNode = static_cast<VcFileNode *>(findFile(filePath)); + + if (fileNode) + return fileNode; + + foreach (ProjectExplorer::FolderNode *folderNode, m_subFolderNodes) { + VcContainerNode *containerNode = static_cast<VcContainerNode *>(folderNode); + fileNode = containerNode->findFileNode(filePath); + + if (fileNode) + return fileNode; + } + + return 0; +} + } // namespace Internal } // namespace VcProjectManager diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.h b/src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.h index 3e0e7c8c0e..aafcefe38d 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.h @@ -87,6 +87,9 @@ public: virtual bool appendFilterNode(VcFilterNode *folderNode) = 0; virtual void removeFilterNode(VcFilterNode *filterNode) = 0; + virtual void removeFileNode(VcFileNode *fileNode) = 0; + + VcFileNode* findFileNode(const QString &filePath); protected: VcContainerType m_vcContainerType; @@ -112,6 +115,7 @@ public: bool appendFilterNode(VcFilterNode *folderNode); void removeFilterNode(VcFilterNode *filterNode); + void removeFileNode(VcFileNode *fileNode); protected: void readChildren(); @@ -120,6 +124,7 @@ private: Filter *m_vcFilterModel; }; +// used only for VS 2005 projects class VcFolderNode : public VcContainerNode { Q_OBJECT @@ -138,12 +143,13 @@ public: void addFilterNode(const QString &name); bool appendFilterNode(VcFilterNode *folderNode); + void removeFileNode(VcFileNode *fileNode); void removeFilterNode(VcFilterNode *filterNode); void addFolderNode(const QString &name); // only for VS 2005 bool appendFolderNode(VcFolderNode *folderNode); // only for VS 2005 - void removeFolderNode(VcFolderNode *node); + void removeFolderNode(VcFolderNode *folderNode); protected: void readChildren(); @@ -193,8 +199,11 @@ public: void removeFilterNode(VcFilterNode *filterNode); void removeFolderNode(VcFolderNode *folderNode); + void removeFileNode(VcFileNode *fileNode); private: + VcFileNode* findFileNode(const QString &filePath); + VcProjectDocument *m_vcProjectModel; }; diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectdocument.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectdocument.cpp index da499b9499..852abc2278 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectdocument.cpp +++ b/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectdocument.cpp @@ -92,7 +92,12 @@ void VcProjectDocument::allProjectFiles(QStringList &sl) const QString VcProjectDocument::fileRelativePath(const QString &filePath) { - return QFileInfo(m_filePath).absoluteDir().relativeFilePath(filePath); + QString relativePath = QFileInfo(m_filePath).absoluteDir().relativeFilePath(filePath).replace(QLatin1String("/"), QLatin1String("\\")); + + if (!relativePath.startsWith(QLatin1String(".."))) + relativePath.prepend(QLatin1String(".\\")); + + return relativePath; } Configurations::Ptr VcProjectDocument::configurations() const |