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 void removeFileContainer(IFileContainer *fileContainer) = 0;
virtual IAttributeContainer *attributeContainer() const = 0; virtual IAttributeContainer *attributeContainer() const = 0;
virtual QString name() const = 0; virtual QString displayName() const = 0;
virtual void setName(const QString &name) = 0; virtual void setDisplayName(const QString &displayName) = 0;
virtual void allFiles(QStringList &sl) const = 0; virtual void allFiles(QStringList &sl) const = 0;
virtual bool fileExists(const QString &relativeFilePath) const = 0; virtual bool fileExists(const QString &relativeFilePath) const = 0;

View File

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

View File

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

View File

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