aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRadovan Zivkovic <pivonroll@gmail.com>2013-06-05 02:54:08 +0200
committerOswald Buddenhagen <oswald.buddenhagen@digia.com>2014-03-11 19:54:54 +0100
commit88375277e78881b5f085a39295f70cf799ce6f9e (patch)
treea07c557fd6265c7bbd79267c22759c86e9e160ad
parent18037f1760df2f210c514ed1a58d480c986c0101 (diff)
Fixed fileExists method. Added remove file support.
Change-Id: I2fc55cacbc66b4b397a77e68b34e76a3b9658ee3 Reviewed-by: Bojan Petrovic <bojan85@gmail.com>
-rw-r--r--src/plugins/vcprojectmanager/vcprojectbuildconfiguration.cpp30
-rw-r--r--src/plugins/vcprojectmanager/vcprojectbuildconfiguration.h5
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/filter.cpp11
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/filter.h1
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/filtertype.cpp8
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/filtertype.h1
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/folder.cpp15
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.cpp142
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.h11
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/vcprojectdocument.cpp7
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