Added FileContainer.

Change-Id: Ia85e311a077267d8e34e60841ca2159057c248b4
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
This commit is contained in:
Radovan Zivkovic
2013-10-14 00:47:36 +02:00
committed by Oswald Buddenhagen
parent 5aa4b5353b
commit 689e126bbb
9 changed files with 104 additions and 539 deletions

View File

@@ -56,8 +56,8 @@ public:
virtual void removeFileContainer(IFileContainer *fileContainer) = 0;
virtual IAttributeContainer *attributeContainer() const = 0;
virtual QString name() const = 0;
virtual void setName(const QString &name) = 0;
virtual QString displayName() const = 0;
virtual void setDisplayName(const QString &displayName) = 0;
virtual void allFiles(QStringList &sl) const = 0;
virtual bool fileExists(const QString &relativeFilePath) const = 0;

View File

@@ -1,35 +1,7 @@
/**************************************************************************
**
** 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.
**
****************************************************************************/
#include "folder.h"
#include "filecontainer.h"
#include <QFileInfo>
#include <utils/qtcassert.h>
#include "vcprojectdocument.h"
#include "generalattributecontainer.h"
@@ -38,58 +10,62 @@
namespace VcProjectManager {
namespace Internal {
Folder::Folder(IVisualStudioProject *parentProjectDoc)
: m_parentProjectDoc(parentProjectDoc)
FileContainer::FileContainer(const QString &containerType, IVisualStudioProject *parentProjectDoc)
: m_parentProjectDoc(parentProjectDoc),
m_containerType(containerType)
{
m_attributeContainer = new GeneralAttributeContainer;
}
Folder::Folder(const Folder &folder)
FileContainer::FileContainer(const FileContainer &fileContainer)
{
m_parentProjectDoc = folder.m_parentProjectDoc;
m_name = folder.m_name;
m_parentProjectDoc = fileContainer.m_parentProjectDoc;
m_name = fileContainer.m_name;
m_attributeContainer = new GeneralAttributeContainer;
*m_attributeContainer = *(folder.m_attributeContainer);
*m_attributeContainer = *(fileContainer.m_attributeContainer);
foreach (IFile *file, folder.m_files)
foreach (IFile *file, fileContainer.m_files)
m_files.append(file->clone());
foreach (IFileContainer *filter, folder.m_fileContainers)
foreach (IFileContainer *filter, fileContainer.m_fileContainers)
m_fileContainers.append(filter->clone());
}
Folder &Folder::operator =(const Folder &folder)
FileContainer &FileContainer::operator=(const FileContainer &fileContainer)
{
if (this != &folder) {
m_parentProjectDoc = folder.m_parentProjectDoc;
m_name = folder.m_name;
*m_attributeContainer = *(folder.m_attributeContainer);
if (this != &fileContainer) {
m_parentProjectDoc = fileContainer.m_parentProjectDoc;
m_name = fileContainer.m_name;
*m_attributeContainer = *(fileContainer.m_attributeContainer);
qDeleteAll(m_files);
qDeleteAll(m_fileContainers);
m_files.clear();
m_fileContainers.clear();
foreach (IFile *file, folder.m_files)
foreach (IFile *file, fileContainer.m_files)
m_files.append(file->clone());
foreach (IFileContainer *filter, folder.m_fileContainers)
foreach (IFileContainer *filter, fileContainer.m_fileContainers)
m_fileContainers.append(filter->clone());
}
return *this;
}
Folder::~Folder()
FileContainer::~FileContainer()
{
qDeleteAll(m_files);
qDeleteAll(m_fileContainers);
delete m_attributeContainer;
}
QString Folder::containerType() const
QString FileContainer::containerType() const
{
return QLatin1String(Constants::VC_PROJECT_FILE_CONTAINER_FOLDER);
return m_containerType;
}
void Folder::processNode(const QDomNode &node)
void FileContainer::processNode(const QDomNode &node)
{
if (node.isNull())
return;
@@ -110,14 +86,14 @@ void Folder::processNode(const QDomNode &node)
}
}
VcNodeWidget *Folder::createSettingsWidget()
VcNodeWidget *FileContainer::createSettingsWidget()
{
return 0;
}
QDomNode Folder::toXMLDomNode(QDomDocument &domXMLDocument) const
QDomNode FileContainer::toXMLDomNode(QDomDocument &domXMLDocument) const
{
QDomElement fileNode = domXMLDocument.createElement(QLatin1String("Folder"));
QDomElement fileNode = domXMLDocument.createElement(m_containerType);
fileNode.setAttribute(QLatin1String("Name"), m_name);
@@ -132,7 +108,7 @@ QDomNode Folder::toXMLDomNode(QDomDocument &domXMLDocument) const
return fileNode;
}
void Folder::addFile(IFile *file)
void FileContainer::addFile(IFile *file)
{
if (m_files.contains(file))
return;
@@ -144,43 +120,24 @@ void Folder::addFile(IFile *file)
m_files.append(file);
}
void Folder::removeFile(IFile *file)
void FileContainer::removeFile(IFile *file)
{
m_files.removeAll(file);
delete file;
}
void Folder::removeFile(const QString &relativeFilePath)
IFile *FileContainer::file(int index) const
{
foreach (IFile *file, m_files) {
if (file->relativePath() == relativeFilePath) {
removeFile(file);
return;
}
}
QTC_ASSERT(0 <= index && index < m_files.size(), return 0);
return m_files[index];
}
IFile *Folder::file(const QString &relativeFilePath) const
{
foreach (IFile *file, m_files) {
if (file->relativePath() == relativeFilePath)
return file;
}
return 0;
}
IFile *Folder::file(int index) const
{
if (0 <= index && index < m_files.size())
return m_files[index];
return 0;
}
int Folder::fileCount() const
int FileContainer::fileCount() const
{
return m_files.size();
}
void Folder::addFileContainer(IFileContainer *fileContainer)
void FileContainer::addFileContainer(IFileContainer *fileContainer)
{
if (!fileContainer && m_fileContainers.contains(fileContainer))
return;
@@ -188,29 +145,28 @@ void Folder::addFileContainer(IFileContainer *fileContainer)
m_fileContainers.append(fileContainer);
}
int Folder::childCount() const
int FileContainer::childCount() const
{
return m_fileContainers.size();
}
IFileContainer *Folder::fileContainer(int index) const
IFileContainer *FileContainer::fileContainer(int index) const
{
if (0 <= index && index < m_fileContainers.size())
return m_fileContainers[index];
return 0;
QTC_ASSERT(0 <= index && index < m_fileContainers.size(), return 0);
return m_fileContainers[index];
}
void Folder::removeFileContainer(IFileContainer *fileContainer)
void FileContainer::removeFileContainer(IFileContainer *fileContainer)
{
m_fileContainers.removeAll(fileContainer);
}
IAttributeContainer *Folder::attributeContainer() const
IAttributeContainer *FileContainer::attributeContainer() const
{
return m_attributeContainer;
}
bool Folder::fileExists(const QString &relativeFilePath) const
bool FileContainer::fileExists(const QString &relativeFilePath) const
{
foreach (IFile *filePtr, m_files) {
if (filePtr->relativePath() == relativeFilePath)
@@ -225,17 +181,22 @@ bool Folder::fileExists(const QString &relativeFilePath) const
return false;
}
QString Folder::name() const
IFileContainer *FileContainer::clone() const
{
return new FileContainer(*this);
}
QString FileContainer::displayName() const
{
return m_name;
}
void Folder::setName(const QString &name)
void FileContainer::setDisplayName(const QString &name)
{
m_name = name;
}
void Folder::allFiles(QStringList &sl) const
void FileContainer::allFiles(QStringList &sl) const
{
foreach (IFileContainer *filter, m_fileContainers)
filter->allFiles(sl);
@@ -244,12 +205,7 @@ void Folder::allFiles(QStringList &sl) const
sl.append(file->canonicalPath());
}
IFileContainer *Folder::clone() const
{
return new Folder(*this);
}
void Folder::processFile(const QDomNode &fileNode)
void FileContainer::processFile(const QDomNode &fileNode)
{
IFile *file = new File(m_parentProjectDoc);
file->processNode(fileNode);
@@ -267,9 +223,10 @@ void Folder::processFile(const QDomNode &fileNode)
}
}
void Folder::processFilter(const QDomNode &filterNode)
void FileContainer::processFilter(const QDomNode &filterNode)
{
IFileContainer *filter = new Filter(m_parentProjectDoc);
IFileContainer *filter = new FileContainer(QLatin1String(Constants::VC_PROJECT_FILE_CONTAINER_FILTER),
m_parentProjectDoc);
filter->processNode(filterNode);
m_fileContainers.append(filter);
@@ -285,9 +242,10 @@ void Folder::processFilter(const QDomNode &filterNode)
}
}
void Folder::processFolder(const QDomNode &folderNode)
void FileContainer::processFolder(const QDomNode &folderNode)
{
IFileContainer *folder = new Folder(m_parentProjectDoc);
IFileContainer *folder = new FileContainer(QLatin1String(Constants::VC_PROJECT_FILE_CONTAINER_FOLDER),
m_parentProjectDoc);
folder->processNode(folderNode);
m_fileContainers.append(folder);
@@ -303,7 +261,7 @@ void Folder::processFolder(const QDomNode &folderNode)
}
}
void Folder::processNodeAttributes(const QDomElement &element)
void FileContainer::processNodeAttributes(const QDomElement &element)
{
QDomNamedNodeMap namedNodeMap = element.attributes();
@@ -314,7 +272,7 @@ void Folder::processNodeAttributes(const QDomElement &element)
QDomAttr domElement = domNode.toAttr();
if (domElement.name() == QLatin1String("Name"))
setName(domElement.value());
setDisplayName(domElement.value());
else
m_attributeContainer->setAttribute(domElement.name(), domElement.value());

View File

@@ -27,9 +27,10 @@
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
****************************************************************************/
#ifndef VCPROJECTMANAGER_INTERNAL_FOLDER_H
#define VCPROJECTMANAGER_INTERNAL_FOLDER_H
#ifndef VCPROJECTMANAGER_INTERNAL_FILECONTAINER_H
#define VCPROJECTMANAGER_INTERNAL_FILECONTAINER_H
#include "../interfaces/ivcprojectnodemodel.h"
#include "file.h"
#include "filter.h"
#include "../interfaces/ifilecontainer.h"
@@ -37,38 +38,34 @@
namespace VcProjectManager {
namespace Internal {
class Folder : public IFileContainer
class FileContainer : public IFileContainer
{
public:
Folder(IVisualStudioProject *parentProjectDoc);
Folder(const Folder &folder);
Folder& operator=(const Folder &folder);
~Folder();
FileContainer(const QString &containerType, IVisualStudioProject *parentProjectDoc);
FileContainer(const FileContainer &fileContainer);
FileContainer& operator=(const FileContainer &folder);
~FileContainer();
QString containerType() const;
void processNode(const QDomNode &node);
VcNodeWidget* createSettingsWidget();
QDomNode toXMLDomNode(QDomDocument &domXMLDocument) const;
void addFile(IFile *file);
void removeFile(IFile *file);
void removeFile(const QString &relativeFilePath);
IFile* file(const QString &relativeFilePath) const;
IFile *file(int index) const;
int fileCount() const;
void removeFile(IFile *file);
void addFileContainer(IFileContainer *fileContainer);
int childCount() const;
IFileContainer* fileContainer(int index) const;
IFileContainer *fileContainer(int index) const;
void removeFileContainer(IFileContainer *fileContainer);
IAttributeContainer *attributeContainer() const;
bool fileExists(const QString &relativeFilePath) const;
QString name() const;
void setName(const QString &name);
QString displayName() const;
void setDisplayName(const QString &displayName);
void allFiles(QStringList &sl) const;
IFileContainer* clone() const;
bool fileExists(const QString &relativeFilePath) const;
IFileContainer *clone() const;
void processNode(const QDomNode &node);
VcNodeWidget *createSettingsWidget();
QDomNode toXMLDomNode(QDomDocument &domXMLDocument) const;
private:
void processFile(const QDomNode &fileNode);
@@ -82,9 +79,10 @@ private:
QString m_name; // required
IVisualStudioProject *m_parentProjectDoc;
GeneralAttributeContainer *m_attributeContainer;
QString m_containerType;
};
} // namespace Internal
} // namespace VcProjectManager
#endif // VCPROJECTMANAGER_INTERNAL_FOLDER_H
#endif // VCPROJECTMANAGER_INTERNAL_FILECONTAINER_H

View File

@@ -182,7 +182,7 @@ void Files::addFileContainer(IFileContainer *fileContainer)
foreach (IFileContainer *fileCont, m_fileContainers) {
if (fileCont &&
fileCont->containerType() == fileContainer->containerType() &&
fileCont->name() == fileContainer->name())
fileCont->displayName() == fileContainer->displayName())
return;
}
@@ -226,7 +226,7 @@ void Files::processFile(const QDomNode &fileNode)
void Files::processFilter(const QDomNode &filterNode)
{
IFileContainer *filter = new Filter(m_parentProject);
IFileContainer *filter = new FileContainer(QLatin1String("Filter"), m_parentProject);
filter->processNode(filterNode);
m_fileContainers.append(filter);
@@ -244,7 +244,7 @@ void Files::processFilter(const QDomNode &filterNode)
void Files::processFolder(const QDomNode &folderNode)
{
IFileContainer *folder = new Folder(m_parentProject);
IFileContainer *folder = new FileContainer(QLatin1String("Folder"), m_parentProject);
folder->processNode(folderNode);
m_fileContainers.append(folder);

View File

@@ -34,8 +34,7 @@
#include "../interfaces/ifiles.h"
#include "file.h"
#include "filter.h"
#include "folder.h"
#include "filecontainer.h"
namespace VcProjectManager {
namespace Internal {

View File

@@ -1,301 +0,0 @@
/**************************************************************************
**
** 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.
**
****************************************************************************/
#include "filter.h"
#include <QFileInfo>
#include "vcprojectdocument.h"
#include "generalattributecontainer.h"
#include "../vcprojectmanagerconstants.h"
namespace VcProjectManager {
namespace Internal {
Filter::Filter(IVisualStudioProject *parentProjectDoc)
: m_parentProjectDoc(parentProjectDoc)
{
m_attributeContainer = new GeneralAttributeContainer;
}
Filter::Filter(const Filter &filter)
{
m_parentProjectDoc = filter.m_parentProjectDoc;
m_name = filter.m_name;
m_attributeContainer = new GeneralAttributeContainer;
*(m_attributeContainer) = *(filter.m_attributeContainer);
foreach (IFile *file, filter.m_files)
m_files.append(file->clone());
foreach (IFileContainer *filt, filter.m_fileContainers)
m_fileContainers.append(filt->clone());
}
Filter &Filter::operator =(const Filter &filter)
{
if (this != &filter) {
m_name = filter.m_name;
m_parentProjectDoc = filter.m_parentProjectDoc;
*(m_attributeContainer) = *(filter.m_attributeContainer);
m_files.clear();
m_fileContainers.clear();
foreach (IFile *file, filter.m_files)
m_files.append(file->clone());
foreach (IFileContainer *filt, filter.m_fileContainers)
m_fileContainers.append(filt->clone());
}
return *this;
}
Filter::~Filter()
{
delete m_attributeContainer;
}
QString Filter::containerType() const
{
return QLatin1String(Constants::VC_PROJECT_FILE_CONTAINER_FILTER);
}
void Filter::processNode(const QDomNode &node)
{
if (node.isNull())
return;
if (node.nodeType() == QDomNode::ElementNode)
processNodeAttributes(node.toElement());
if (node.hasChildNodes()) {
QDomNode firstChild = node.firstChild();
if (!firstChild.isNull()) {
if (firstChild.nodeName() == QLatin1String("Filter"))
processFilter(firstChild);
else if (firstChild.nodeName() == QLatin1String("File"))
processFile(firstChild);
}
}
}
VcNodeWidget *Filter::createSettingsWidget()
{
return 0;
}
QDomNode Filter::toXMLDomNode(QDomDocument &domXMLDocument) const
{
QDomElement fileNode = domXMLDocument.createElement(QLatin1String("Filter"));
fileNode.setAttribute(QLatin1String("Name"), m_name);
m_attributeContainer->appendToXMLNode(fileNode);
foreach (IFile *file, m_files)
fileNode.appendChild(file->toXMLDomNode(domXMLDocument));
foreach (IFileContainer *filter, m_fileContainers)
fileNode.appendChild(filter->toXMLDomNode(domXMLDocument));
return fileNode;
}
QString Filter::name() const
{
return m_name;
}
void Filter::setName(const QString &name)
{
m_name = name;
}
void Filter::addFile(IFile *file)
{
if (m_files.contains(file))
return;
foreach (IFile *f, m_files) {
if (f->relativePath() == file->relativePath())
return;
}
m_files.append(file);
}
void Filter::removeFile(IFile *file)
{
m_files.removeAll(file);
}
void Filter::removeFile(const QString &relativeFilePath)
{
foreach (IFile *file, m_files) {
if (file->relativePath() == relativeFilePath) {
removeFile(file);
delete file;
return;
}
}
}
IFile* Filter::file(const QString &relativePath) const
{
foreach (IFile *file, m_files) {
if (file->relativePath() == relativePath)
return file;
}
return 0;
}
IFile *Filter::file(int index) const
{
if (0 <= index && index < m_files.size())
return m_files[index];
return 0;
}
int Filter::fileCount() const
{
return m_files.size();
}
void Filter::addFileContainer(IFileContainer *fileContainer)
{
if (!fileContainer && m_fileContainers.contains(fileContainer))
return;
m_fileContainers.append(fileContainer);
}
int Filter::childCount() const
{
return m_fileContainers.size();
}
IFileContainer *Filter::fileContainer(int index) const
{
if (0 <= index && index < m_fileContainers.size())
return m_fileContainers[index];
return 0;
}
void Filter::removeFileContainer(IFileContainer *fileContainer)
{
m_fileContainers.removeAll(fileContainer);
}
IAttributeContainer *Filter::attributeContainer() const
{
return m_attributeContainer;
}
bool Filter::fileExists(const QString &relativeFilePath) const
{
foreach (IFile *filePtr, m_files) {
if (filePtr->relativePath() == relativeFilePath)
return true;
}
foreach (IFileContainer *filterPtr, m_fileContainers) {
if (filterPtr->fileExists(relativeFilePath))
return true;
}
return false;
}
void Filter::allFiles(QStringList &sl) const
{
foreach (IFileContainer *filter, m_fileContainers)
filter->allFiles(sl);
foreach (IFile *file, m_files)
sl.append(file->canonicalPath());
}
IFileContainer *Filter::clone() const
{
return new Filter(*this);
}
void Filter::processFile(const QDomNode &fileNode)
{
IFile *file = new File(m_parentProjectDoc);
file->processNode(fileNode);
addFile(file);
// process next sibling
QDomNode nextSibling = fileNode.nextSibling();
if (!nextSibling.isNull()) {
if (nextSibling.nodeName() == QLatin1String("File"))
processFile(nextSibling);
else
processFilter(nextSibling);
}
}
void Filter::processFilter(const QDomNode &filterNode)
{
IFileContainer *filter = new Filter(m_parentProjectDoc);
filter->processNode(filterNode);
addFileContainer(filter);
// process next sibling
QDomNode nextSibling = filterNode.nextSibling();
if (!nextSibling.isNull()) {
if (nextSibling.nodeName() == QLatin1String("File"))
processFile(nextSibling);
else
processFilter(nextSibling);
}
}
void Filter::processNodeAttributes(const QDomElement &element)
{
QDomNamedNodeMap namedNodeMap = element.attributes();
for (int i = 0; i < namedNodeMap.size(); ++i) {
QDomNode domNode = namedNodeMap.item(i);
if (domNode.nodeType() == QDomNode::AttributeNode) {
QDomAttr domElement = domNode.toAttr();
if (domElement.name() == QLatin1String("Name"))
m_name = domElement.value();
else
m_attributeContainer->setAttribute(domElement.name(), domElement.value());
}
}
}
} // namespace Internal
} // namespace VcProjectManager

View File

@@ -1,90 +0,0 @@
/**************************************************************************
**
** 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_FILTER_H
#define VCPROJECTMANAGER_INTERNAL_FILTER_H
#include "../interfaces/ivcprojectnodemodel.h"
#include "file.h"
#include "../interfaces/ifilecontainer.h"
namespace VcProjectManager {
namespace Internal {
class Filter;
class Filter : public IFileContainer
{
public:
Filter(IVisualStudioProject *parentProjectDoc);
Filter(const Filter &filter);
Filter& operator=(const Filter &filter);
~Filter();
QString containerType() const;
void processNode(const QDomNode &node);
VcNodeWidget* createSettingsWidget();
QDomNode toXMLDomNode(QDomDocument &domXMLDocument) const;
QString name() const;
void setName(const QString &name);
void addFile(IFile *file);
void removeFile(IFile *file);
void removeFile(const QString &relativeFilePath);
IFile *file(const QString &relativePath) const;
IFile *file(int index) const;
int fileCount() const;
void addFileContainer(IFileContainer *fileContainer);
int childCount() const;
IFileContainer *fileContainer(int index) const;
void removeFileContainer(IFileContainer *fileContainer);
IAttributeContainer *attributeContainer() const;
bool fileExists(const QString &relativeFilePath) const;
void allFiles(QStringList &sl) const;
IFileContainer* clone() const;
private:
void processFile(const QDomNode &fileNode);
void processFilter(const QDomNode &filterNode);
void processNodeAttributes(const QDomElement &element);
QString m_name;
QList<IFileContainer *> m_fileContainers;
QList<IFile *> m_files;
IVisualStudioProject *m_parentProjectDoc;
GeneralAttributeContainer *m_attributeContainer;
};
} // namespace Internal
} // namespace VcProjectManager
#endif // VCPROJECTMANAGER_INTERNAL_FILTER_H

View File

@@ -30,10 +30,9 @@
#include "vcdocprojectnodes.h"
#include "vcprojectdocument.h"
#include "folder.h"
#include "filter.h"
#include "file.h"
#include "files.h"
#include "filecontainer.h"
#include "../vcprojectmanagerconstants.h"
#include <QFileInfo>
@@ -60,7 +59,7 @@ void VcFileNode::readChildren(VcDocProjectNode *vcDocProj)
}
VcFileContainerNode::VcFileContainerNode(IFileContainer *fileContainerModel, VcDocProjectNode *vcDocProjNode)
: ProjectExplorer::FolderNode(fileContainerModel->name()),
: ProjectExplorer::FolderNode(fileContainerModel->displayName()),
m_vcFileContainerModel(fileContainerModel),
m_parentVcDocProjNode(vcDocProjNode)
{
@@ -124,12 +123,14 @@ void VcFileContainerNode::addFileContainerNode(const QString &name, VcContainerT
IFileContainer *fileContainerModel = 0;
if (type == VcContainerType_Filter)
fileContainerModel = new Filter(m_parentVcDocProjNode->m_vcProjectModel);
fileContainerModel = new FileContainer(QLatin1String(Constants::VC_PROJECT_FILE_CONTAINER_FILTER),
m_parentVcDocProjNode->m_vcProjectModel);
else if (type == VcContainerType_Folder)
fileContainerModel = new Folder(m_parentVcDocProjNode->m_vcProjectModel);
fileContainerModel = new FileContainer(QLatin1String(Constants::VC_PROJECT_FILE_CONTAINER_FOLDER),
m_parentVcDocProjNode->m_vcProjectModel);
if (fileContainerModel) {
fileContainerModel->setName(name);
fileContainerModel->setDisplayName(name);
VcFileContainerNode *folderNode = new VcFileContainerNode(fileContainerModel, m_parentVcDocProjNode);
if (!appendFileContainerNode(folderNode)) {
@@ -152,7 +153,7 @@ bool VcFileContainerNode::appendFileContainerNode(VcFileContainerNode *fileConta
if (vcFileContainerNode &&
vcFileContainerNode->m_vcFileContainerModel &&
vcFileContainerNode->m_vcFileContainerModel->name() == fileContainer->m_vcFileContainerModel->name())
vcFileContainerNode->m_vcFileContainerModel->displayName() == fileContainer->m_vcFileContainerModel->displayName())
return false;
}
}
@@ -452,11 +453,13 @@ void VcDocProjectNode::addFileContainerNode(const QString &name, VcFileContainer
IFileContainer *fileContainer = 0;
if (type == VcFileContainerNode::VcContainerType_Filter)
fileContainer = new Filter(m_vcProjectModel);
fileContainer = new FileContainer(QLatin1String(Constants::VC_PROJECT_FILE_CONTAINER_FILTER),
m_vcProjectModel);
else
fileContainer = new Folder(m_vcProjectModel);
fileContainer = new FileContainer(QLatin1String(Constants::VC_PROJECT_FILE_CONTAINER_FOLDER),
m_vcProjectModel);
fileContainer->setName(name);
fileContainer->setDisplayName(name);
VcFileContainerNode *folderNode = new VcFileContainerNode(fileContainer, this);
if (!appendFileContainerNode(folderNode)) {
@@ -479,7 +482,7 @@ bool VcDocProjectNode::appendFileContainerNode(VcFileContainerNode *fileContaine
if (vcFileContainerNode &&
vcFileContainerNode->m_vcFileContainerModel &&
fileContainerNode->m_vcFileContainerModel &&
vcFileContainerNode->m_vcFileContainerModel->name() == fileContainerNode->m_vcFileContainerModel->name())
vcFileContainerNode->m_vcFileContainerModel->displayName() == fileContainerNode->m_vcFileContainerModel->displayName())
return false;
}
}

View File

@@ -11,8 +11,6 @@ HEADERS += \
vcprojectmodel/platform.h \
vcprojectmodel/globals.h \
vcprojectmodel/global.h \
vcprojectmodel/folder.h \
vcprojectmodel/filter.h \
vcprojectmodel/files.h \
vcprojectmodel/file.h \
vcprojectmodel/deploymenttool.h \
@@ -45,7 +43,8 @@ HEADERS += \
vcprojectmodel/configurationbuildtools.h \
vcprojectmodel/deploymenttools.h \
vcprojectmodel/tools.h \
vcprojectmodel/debuggertools.h
vcprojectmodel/debuggertools.h \
vcprojectmodel/filecontainer.h
SOURCES += \
vcprojectmodel/vcprojectdocument.cpp \
@@ -59,8 +58,6 @@ SOURCES += \
vcprojectmodel/platform.cpp \
vcprojectmodel/globals.cpp \
vcprojectmodel/global.cpp \
vcprojectmodel/folder.cpp \
vcprojectmodel/filter.cpp \
vcprojectmodel/files.cpp \
vcprojectmodel/file.cpp \
vcprojectmodel/deploymenttool.cpp \
@@ -91,7 +88,8 @@ SOURCES += \
vcprojectmodel/configurationbuildtools.cpp \
vcprojectmodel/deploymenttools.cpp \
vcprojectmodel/tools.cpp \
vcprojectmodel/debuggertools.cpp
vcprojectmodel/debuggertools.cpp \
vcprojectmodel/filecontainer.cpp
OTHER_FILES += \
vcprojectmodel/tools/xml_definitions/VCXMLDataGeneratorTool.xml \