summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRadovan Zivkovic <pivonroll@gmail.com>2013-09-24 00:59:52 +0200
committerOswald Buddenhagen <oswald.buddenhagen@digia.com>2014-03-11 19:54:57 +0100
commita5d062b9db49e3ff36eccd37c338a1b2a158e40c (patch)
tree043d2b715841df34b7f611813da53257dd4945a1
parent4e787157b6a8cbf61cfb210d90d890d8a1399958 (diff)
downloadqt-creator-a5d062b9db49e3ff36eccd37c338a1b2a158e40c.tar.gz
Filter and Folder classes now implement IFileContainer interface.
Change-Id: If6aca14658c1242e37b17f7fda64dab0949bdf42 Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
-rw-r--r--src/plugins/vcprojectmanager/interfaces/ifile.h4
-rw-r--r--src/plugins/vcprojectmanager/interfaces/ifilecontainer.h70
-rw-r--r--src/plugins/vcprojectmanager/interfaces/interfaces.pri2
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/file.cpp5
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/file.h2
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/files.cpp119
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/files.h28
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/filter.cpp175
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/filter.h44
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/folder.cpp239
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/folder.h56
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.cpp152
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.h19
-rw-r--r--src/plugins/vcprojectmanager/widgets/configurationswidgets.cpp59
-rw-r--r--src/plugins/vcprojectmanager/widgets/configurationswidgets.h12
15 files changed, 471 insertions, 515 deletions
diff --git a/src/plugins/vcprojectmanager/interfaces/ifile.h b/src/plugins/vcprojectmanager/interfaces/ifile.h
index 85f74e34e5..033e1a70c0 100644
--- a/src/plugins/vcprojectmanager/interfaces/ifile.h
+++ b/src/plugins/vcprojectmanager/interfaces/ifile.h
@@ -31,6 +31,7 @@
#define VCPROJECTMANAGER_INTERNAL_IFILE_H
#include <QString>
+#include <projectexplorer/projectnodes.h>
#include "../vcprojectmodel/ivcprojectnodemodel.h"
@@ -48,8 +49,11 @@ public:
virtual QString relativePath() const = 0;
virtual void setRelativePath(const QString &path) = 0;
+ virtual QString canonicalPath() const = 0;
virtual ConfigurationContainer* configurationContainer() const = 0;
virtual IAttributeContainer* attributeContainer() const = 0;
+ virtual IFile* clone() const = 0;
+ virtual ProjectExplorer::FileType fileType() const = 0;
};
} // namespace Internal
diff --git a/src/plugins/vcprojectmanager/interfaces/ifilecontainer.h b/src/plugins/vcprojectmanager/interfaces/ifilecontainer.h
new file mode 100644
index 0000000000..9ba14d0ac1
--- /dev/null
+++ b/src/plugins/vcprojectmanager/interfaces/ifilecontainer.h
@@ -0,0 +1,70 @@
+/**************************************************************************
+**
+** 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_IFILECONTAINER_H
+#define VCPROJECTMANAGER_INTERNAL_IFILECONTAINER_H
+
+#include "../vcprojectmodel/ivcprojectnodemodel.h"
+
+namespace VcProjectManager {
+namespace Internal {
+
+class IFile;
+class IAttributeContainer;
+
+class IFileContainer : public IVcProjectXMLNode
+{
+public:
+ virtual ~IFileContainer() {}
+
+ virtual QString containerType() const = 0;
+
+ virtual void addFile(IFile *file) = 0;
+ virtual IFile* file(int index) const = 0;
+ virtual int fileCount() const = 0;
+ virtual void removeFile(IFile *file) = 0;
+
+ virtual void addFileContainer(IFileContainer *fileContainer) = 0;
+ virtual int childCount() const = 0;
+ virtual IFileContainer* fileContainer(int index) const = 0;
+ virtual void removeFileContainer(IFileContainer *fileContainer) = 0;
+ virtual IAttributeContainer *attributeContainer() const = 0;
+
+ virtual QString name() const = 0;
+ virtual void setName(const QString &name) = 0;
+
+ virtual void allFiles(QStringList &sl) const = 0;
+ virtual bool fileExists(const QString &relativeFilePath) const = 0;
+ virtual IFileContainer* clone() const = 0;
+};
+
+} // namespace Internal
+} // namespace VcProjectManager
+
+#endif // VCPROJECTMANAGER_INTERNAL_IFILECONTAINER_H
diff --git a/src/plugins/vcprojectmanager/interfaces/interfaces.pri b/src/plugins/vcprojectmanager/interfaces/interfaces.pri
index 14c2940c27..2adb38ad3c 100644
--- a/src/plugins/vcprojectmanager/interfaces/interfaces.pri
+++ b/src/plugins/vcprojectmanager/interfaces/interfaces.pri
@@ -11,4 +11,4 @@ HEADERS += \
interfaces/iattributedescriptiondataitem.h \
interfaces/iconfigurations.h \
interfaces/ifile.h \
- interfaces/ifile.h
+ interfaces/ifilecontainer.h
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/file.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/file.cpp
index 9d002ddd77..f38f7736ab 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/file.cpp
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/file.cpp
@@ -156,6 +156,11 @@ void File::setRelativePath(const QString &relativePath)
m_relativePath = relativePath;
}
+IFile *File::clone() const
+{
+ return new File(*this);
+}
+
ProjectExplorer::FileType File::fileType() const
{
const Core::MimeDatabase *mdb = Core::ICore::mimeDatabase();
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/file.h b/src/plugins/vcprojectmanager/vcprojectmodel/file.h
index f5615490db..2b40a4629b 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/file.h
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/file.h
@@ -63,7 +63,7 @@ public:
QString relativePath() const;
void setRelativePath(const QString &relativePath);
-
+ IFile* clone() const;
ProjectExplorer::FileType fileType() const;
QString canonicalPath() const;
private:
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/files.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/files.cpp
index f8317da2cd..f951875312 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/files.cpp
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/files.cpp
@@ -63,10 +63,10 @@ QDomNode Files::toXMLDomNode(QDomDocument &domXMLDocument) const
{
QDomElement fileNode = domXMLDocument.createElement(QLatin1String("Files"));
- foreach (const File::Ptr &file, m_files)
+ foreach (IFile *file, m_files)
fileNode.appendChild(file->toXMLDomNode(domXMLDocument));
- foreach (const Filter::Ptr &filter, m_filters)
+ foreach (IFileContainer *filter, m_filters)
fileNode.appendChild(filter->toXMLDomNode(domXMLDocument));
return fileNode;
@@ -77,12 +77,12 @@ bool Files::isEmpty() const
return m_files.isEmpty() && m_filters.isEmpty();
}
-void Files::addFilter(Filter::Ptr newFilter)
+void Files::addFilter(IFileContainer *newFilter)
{
if (m_filters.contains(newFilter))
return;
- foreach (const Filter::Ptr &filter, m_filters) {
+ foreach (IFileContainer *filter, m_filters) {
if (filter->name() == newFilter->name())
return;
}
@@ -90,14 +90,14 @@ void Files::addFilter(Filter::Ptr newFilter)
m_filters.append(newFilter);
}
-void Files::removeFilter(Filter::Ptr filter)
+void Files::removeFilter(IFileContainer *filter)
{
m_filters.removeAll(filter);
}
void Files::removeFilter(const QString &filterName)
{
- foreach (const Filter::Ptr &filter, m_filters) {
+ foreach (IFileContainer *filter, m_filters) {
if (filter->name() == filterName) {
removeFilter(filter);
return;
@@ -105,26 +105,17 @@ void Files::removeFilter(const QString &filterName)
}
}
-QList<Filter::Ptr> Files::filters() const
+QList<IFileContainer *> Files::fileContainers() const
{
return m_filters;
}
-Filter::Ptr Files::filter(const QString &filterName) const
-{
- foreach (const Filter::Ptr &filter, m_filters) {
- if (filter->name() == filterName)
- return filter;
- }
- return Filter::Ptr();
-}
-
-void Files::addFile(File::Ptr newFile)
+void Files::addFile(IFile *newFile)
{
if (m_files.contains(newFile))
return;
- foreach (const File::Ptr &file, m_files) {
+ foreach (IFile *file, m_files) {
if (file->relativePath() == newFile->relativePath())
return;
}
@@ -132,33 +123,33 @@ void Files::addFile(File::Ptr newFile)
m_files.append(newFile);
}
-void Files::removeFile(File::Ptr file)
+void Files::removeFile(IFile *file)
{
m_files.removeAll(file);
}
-QList<File::Ptr> Files::files() const
+QList<IFile *> Files::files() const
{
return m_files;
}
-File::Ptr Files::file(const QString &relativePath) const
+IFile* Files::file(const QString &relativePath) const
{
- foreach (const File::Ptr &file, m_files) {
+ foreach (IFile *file, m_files) {
if (file->relativePath() == relativePath)
return file;
}
- return File::Ptr();
+ return 0;
}
bool Files::fileExists(const QString &relativeFilePath) const
{
- foreach (const File::Ptr &filePtr, m_files) {
+ foreach (IFile *filePtr, m_files) {
if (filePtr->relativePath() == relativeFilePath)
return true;
}
- foreach (const Filter::Ptr &filterPtr, m_filters) {
+ foreach (IFileContainer *filterPtr, m_filters) {
if (filterPtr->fileExists(relativeFilePath))
return true;
}
@@ -168,10 +159,10 @@ bool Files::fileExists(const QString &relativeFilePath) const
void Files::allProjectFiles(QStringList &sl) const
{
- foreach (const Filter::Ptr &filter, m_filters)
+ foreach (IFileContainer *filter, m_filters)
filter->allFiles(sl);
- foreach (const File::Ptr &file, m_files)
+ foreach (IFile *file, m_files)
sl.append(file->canonicalPath());
}
@@ -185,11 +176,11 @@ Files::Files(const Files &files)
m_files.clear();
m_filters.clear();
- foreach (const File::Ptr &file, files.m_files)
- m_files.append(File::Ptr(new File(*file)));
+ foreach (IFile *file, files.m_files)
+ m_files.append(file->clone());
- foreach (const Filter::Ptr &filter, files.m_filters)
- m_filters.append(Filter::Ptr(new Filter(*filter)));
+ foreach (IFileContainer *filter, files.m_filters)
+ m_filters.append(filter->clone());
}
Files &Files::operator=(const Files &files)
@@ -198,18 +189,18 @@ Files &Files::operator=(const Files &files)
m_files.clear();
m_filters.clear();
- foreach (const File::Ptr &file, files.m_files)
- m_files.append(File::Ptr(new File(*file)));
+ foreach (IFile *file, files.m_files)
+ m_files.append(file->clone());
- foreach (const Filter::Ptr &filter, files.m_filters)
- m_filters.append(Filter::Ptr(new Filter(*filter)));
+ foreach (IFileContainer *filter, files.m_filters)
+ m_filters.append(filter->clone());
}
return *this;
}
void Files::processFile(const QDomNode &fileNode)
{
- File::Ptr file(new File(m_parentProject));
+ IFile *file = new File(m_parentProject);
file->processNode(fileNode);
m_files.append(file);
@@ -225,7 +216,7 @@ void Files::processFile(const QDomNode &fileNode)
void Files::processFilter(const QDomNode &filterNode)
{
- Filter::Ptr filter(new Filter(m_parentProject));
+ IFileContainer *filter = new Filter(QLatin1String("Filter"), m_parentProject);
filter->processNode(filterNode);
m_filters.append(filter);
@@ -277,8 +268,8 @@ Files2005::Files2005(const Files2005 &files)
{
m_folders.clear();
- foreach (const Folder::Ptr &folder, files.m_folders)
- m_folders.append(Folder::Ptr(new Folder(*folder)));
+ foreach (IFileContainer *folder, files.m_folders)
+ m_folders.append(folder->clone());
}
Files2005 &Files2005::operator=(const Files2005 &files)
@@ -287,8 +278,8 @@ Files2005 &Files2005::operator=(const Files2005 &files)
Files::operator =(files);
m_folders.clear();
- foreach (const Folder::Ptr &folder, files.m_folders)
- m_folders.append(Folder::Ptr(new Folder(*folder)));
+ foreach (IFileContainer *folder, files.m_folders)
+ m_folders.append(folder->clone());
}
return *this;
}
@@ -320,13 +311,13 @@ QDomNode Files2005::toXMLDomNode(QDomDocument &domXMLDocument) const
{
QDomElement fileNode = domXMLDocument.createElement(QLatin1String("Files"));
- foreach (const File::Ptr &file, m_files)
+ foreach (IFile *file, m_files)
fileNode.appendChild(file->toXMLDomNode(domXMLDocument));
- foreach (const Filter::Ptr &filter, m_filters)
+ foreach (IFileContainer *filter, m_filters)
fileNode.appendChild(filter->toXMLDomNode(domXMLDocument));
- foreach (const Folder::Ptr &folder, m_folders)
+ foreach (IFileContainer *folder, m_folders)
fileNode.appendChild(folder->toXMLDomNode(domXMLDocument));
return fileNode;
@@ -344,17 +335,17 @@ Files *Files2005::clone() const
bool Files2005::fileExists(const QString &relativeFilePath) const
{
- foreach (const File::Ptr &filePtr, m_files) {
+ foreach (IFile *filePtr, m_files) {
if (filePtr->relativePath() == relativeFilePath)
return true;
}
- foreach (const Filter::Ptr &filterPtr, m_filters) {
+ foreach (IFileContainer *filterPtr, m_filters) {
if (filterPtr->fileExists(relativeFilePath))
return true;
}
- foreach (const Folder::Ptr &folderPtr, m_folders) {
+ foreach (IFileContainer *folderPtr, m_folders) {
if (folderPtr->fileExists(relativeFilePath))
return true;
}
@@ -362,12 +353,12 @@ bool Files2005::fileExists(const QString &relativeFilePath) const
return false;
}
-void Files2005::addFolder(Folder::Ptr newFolder)
+void Files2005::addFolder(IFileContainer *newFolder)
{
if (m_folders.contains(newFolder))
return;
- foreach (const Folder::Ptr &folder, m_folders) {
+ foreach (IFileContainer *folder, m_folders) {
if (folder->name() == newFolder->name())
return;
}
@@ -375,50 +366,46 @@ void Files2005::addFolder(Folder::Ptr newFolder)
m_folders.append(newFolder);
}
-void Files2005::removeFolder(Folder::Ptr folder)
-{
- m_folders.removeAll(folder);
-}
-
void Files2005::removeFolder(const QString &folderName)
{
- foreach (const Folder::Ptr &folder, m_folders) {
+ foreach (IFileContainer *folder, m_folders) {
if (folder->name() == folderName) {
- removeFolder(folder);
+ m_folders.removeOne(folder);
+ delete folder;
return;
}
}
}
-QList<Folder::Ptr> Files2005::folders() const
+QList<IFileContainer *> Files2005::folders() const
{
return m_folders;
}
-Folder::Ptr Files2005::folder(const QString &folderName) const
+IFileContainer *Files2005::folder(const QString &folderName) const
{
- foreach (const Folder::Ptr &folder, m_folders) {
+ foreach (IFileContainer *folder, m_folders) {
if (folder->name() == folderName)
return folder;
}
- return Folder::Ptr();
+ return 0;
}
void Files2005::allProjectFiles(QStringList &sl) const
{
- foreach (const Filter::Ptr &filter, m_filters)
+ foreach (IFileContainer *filter, m_filters)
filter->allFiles(sl);
- foreach (const Folder::Ptr &filter, m_folders)
+ foreach (IFileContainer *filter, m_folders)
filter->allFiles(sl);
- foreach (const File::Ptr &file, m_files)
+ foreach (IFile *file, m_files)
sl.append(file->canonicalPath());
}
void Files2005::processFile(const QDomNode &fileNode)
{
- File::Ptr file(new File(m_parentProject));
+ IFile *file = new File(m_parentProject);
file->processNode(fileNode);
m_files.append(file);
@@ -436,7 +423,7 @@ void Files2005::processFile(const QDomNode &fileNode)
void Files2005::processFilter(const QDomNode &filterNode)
{
- Filter::Ptr filter(new Filter(m_parentProject));
+ IFileContainer *filter = new Filter(QLatin1String("Filter"), m_parentProject);
filter->processNode(filterNode);
m_filters.append(filter);
@@ -454,7 +441,7 @@ void Files2005::processFilter(const QDomNode &filterNode)
void Files2005::processFolder(const QDomNode &folderNode)
{
- Folder::Ptr folder(new Folder(m_parentProject));
+ IFileContainer *folder = new Folder(QLatin1String("Folder"), m_parentProject);
folder->processNode(folderNode);
m_folders.append(folder);
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/files.h b/src/plugins/vcprojectmanager/vcprojectmodel/files.h
index 921e5b20c8..be35e13ff3 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/files.h
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/files.h
@@ -57,16 +57,15 @@ public:
*/
virtual Files* clone() const = 0;
- void addFilter(Filter::Ptr newFilter);
- void removeFilter(Filter::Ptr filter);
+ void addFilter(IFileContainer *newFilter);
+ void removeFilter(IFileContainer *filter);
void removeFilter(const QString &filterName);
- QList<Filter::Ptr> filters() const;
- Filter::Ptr filter(const QString &filterName) const;
+ QList<IFileContainer *> fileContainers() const;
- void addFile(File::Ptr file);
- void removeFile(File::Ptr file);
- QList<File::Ptr> files() const;
- File::Ptr file(const QString &relativePath) const;
+ void addFile(IFile *file);
+ void removeFile(IFile *file);
+ QList<IFile *> files() const;
+ IFile *file(const QString &relativePath) const;
virtual bool fileExists(const QString &relativeFilePath) const;
virtual void allProjectFiles(QStringList &sl) const;
@@ -79,8 +78,8 @@ protected:
virtual void processFile(const QDomNode &fileNode);
virtual void processFilter(const QDomNode &filterNode);
- QList<Filter::Ptr> m_filters;
- QList<File::Ptr> m_files;
+ QList<IFileContainer *> m_filters;
+ QList<IFile *> m_files;
VcProjectDocument *m_parentProject;
};
@@ -114,11 +113,10 @@ public:
Files* clone() const;
bool fileExists(const QString &relativeFilePath) const;
- void addFolder(Folder::Ptr newFolder);
- void removeFolder(Folder::Ptr folder);
+ void addFolder(IFileContainer *newFolder);
void removeFolder(const QString &folderName);
- QList<Folder::Ptr> folders() const;
- Folder::Ptr folder(const QString &folderName) const;
+ QList<IFileContainer *> folders() const;
+ IFileContainer* folder(const QString &folderName) const;
void allProjectFiles(QStringList &sl) const;
@@ -127,7 +125,7 @@ protected:
void processFilter(const QDomNode &filterNode);
void processFolder(const QDomNode &folderNode);
- QList<Folder::Ptr> m_folders;
+ QList<IFileContainer *> m_folders;
};
class Files2008 : public Files
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/filter.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/filter.cpp
index 211516255f..6ca8fd4ce9 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/filter.cpp
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/filter.cpp
@@ -32,26 +32,31 @@
#include <QFileInfo>
#include "vcprojectdocument.h"
+#include "generalattributecontainer.h"
namespace VcProjectManager {
namespace Internal {
-Filter::Filter(VcProjectDocument *parentProjectDoc)
- : m_parentProjectDoc(parentProjectDoc)
+Filter::Filter(const QString &containerType, VcProjectDocument *parentProjectDoc)
+ : m_parentProjectDoc(parentProjectDoc),
+ m_containerType(containerType)
{
+ m_attributeContainer = new GeneralAttributeContainer;
}
Filter::Filter(const Filter &filter)
{
m_parentProjectDoc = filter.m_parentProjectDoc;
- m_anyAttribute = filter.m_anyAttribute;
m_name = filter.m_name;
+ m_containerType = filter.m_containerType;
+ m_attributeContainer = new GeneralAttributeContainer;
+ *(m_attributeContainer) = *(filter.m_attributeContainer);
- foreach (const File::Ptr &file, filter.m_files)
- m_files.append(File::Ptr(new File(*file)));
+ foreach (IFile *file, filter.m_files)
+ m_files.append(file->clone());
- foreach (const Filter::Ptr &filt, filter.m_filters)
- m_filters.append(Filter::Ptr(new Filter(*filt)));
+ foreach (IFileContainer *filt, filter.m_fileContainers)
+ m_fileContainers.append(filt->clone());
}
Filter &Filter::operator =(const Filter &filter)
@@ -59,21 +64,29 @@ Filter &Filter::operator =(const Filter &filter)
if (this != &filter) {
m_name = filter.m_name;
m_parentProjectDoc = filter.m_parentProjectDoc;
- m_anyAttribute = filter.m_anyAttribute;
+ m_containerType = filter.m_containerType;
+ *(m_attributeContainer) = *(filter.m_attributeContainer);
+
m_files.clear();
- m_filters.clear();
+ m_fileContainers.clear();
- foreach (const File::Ptr &file, filter.m_files)
- m_files.append(File::Ptr(new File(*file)));
+ foreach (IFile *file, filter.m_files)
+ m_files.append(file->clone());
- foreach (const Filter::Ptr &filt, filter.m_filters)
- m_filters.append(Filter::Ptr(new Filter(*filt)));
+ foreach (IFileContainer *filt, filter.m_fileContainers)
+ m_fileContainers.append(filt->clone());
}
return *this;
}
Filter::~Filter()
{
+ delete m_attributeContainer;
+}
+
+QString Filter::containerType() const
+{
+ return m_containerType;
}
void Filter::processNode(const QDomNode &node)
@@ -104,17 +117,13 @@ QDomNode Filter::toXMLDomNode(QDomDocument &domXMLDocument) const
{
QDomElement fileNode = domXMLDocument.createElement(QLatin1String("Filter"));
fileNode.setAttribute(QLatin1String("Name"), m_name);
- QHashIterator<QString, QString> it(m_anyAttribute);
- while (it.hasNext()) {
- it.next();
- fileNode.setAttribute(it.key(), it.value());
- }
+ m_attributeContainer->appendToXMLNode(fileNode);
- foreach (const File::Ptr &file, m_files)
+ foreach (IFile *file, m_files)
fileNode.appendChild(file->toXMLDomNode(domXMLDocument));
- foreach (const Filter::Ptr &filter, m_filters)
+ foreach (IFileContainer *filter, m_fileContainers)
fileNode.appendChild(filter->toXMLDomNode(domXMLDocument));
return fileNode;
@@ -130,45 +139,12 @@ void Filter::setName(const QString &name)
m_name = name;
}
-void Filter::addFilter(Filter::Ptr filter)
-{
- if (m_filters.contains(filter))
- return;
-
- foreach (const Filter::Ptr &filt, m_filters) {
- if (filt->name() == filter->name())
- return;
- }
-
- m_filters.append(filter);
-}
-
-void Filter::removeFilter(Filter::Ptr filter)
-{
- m_filters.removeAll(filter);
-}
-
-void Filter::removeFilter(const QString &filterName)
-{
- foreach (const Filter::Ptr &filter, m_filters) {
- if (filter->name() == filterName) {
- removeFilter(filter);
- return;
- }
- }
-}
-
-QList<Filter::Ptr> Filter::filters() const
-{
- return m_filters;
-}
-
-void Filter::addFile(File::Ptr file)
+void Filter::addFile(IFile *file)
{
if (m_files.contains(file))
return;
- foreach (const File::Ptr &f, m_files) {
+ foreach (IFile *f, m_files) {
if (f->relativePath() == file->relativePath())
return;
}
@@ -176,83 +152,110 @@ void Filter::addFile(File::Ptr file)
m_files.append(file);
}
-void Filter::removeFile(File::Ptr file)
+void Filter::removeFile(IFile *file)
{
m_files.removeAll(file);
}
void Filter::removeFile(const QString &relativeFilePath)
{
- foreach (const File::Ptr &file, m_files) {
+ foreach (IFile *file, m_files) {
if (file->relativePath() == relativeFilePath) {
removeFile(file);
+ delete file;
return;
}
}
}
-File::Ptr Filter::file(const QString &relativePath) const
+IFile* Filter::file(const QString &relativePath) const
{
- foreach (const File::Ptr &file, m_files) {
+ foreach (IFile *file, m_files) {
if (file->relativePath() == relativePath)
return file;
}
- return File::Ptr();
+ return 0;
}
-QList<File::Ptr> Filter::files() const
+QList<IFile *> Filter::files() const
{
return m_files;
}
-bool Filter::fileExists(const QString &relativeFilePath)
+IFile *Filter::file(int index) const
{
- foreach (const File::Ptr &filePtr, m_files) {
- if (filePtr->relativePath() == relativeFilePath)
- return true;
- }
+ if (0 <= index && index < m_files.size())
+ return m_files[index];
+ return 0;
+}
- foreach (const Filter::Ptr &filterPtr, m_filters) {
- if (filterPtr->fileExists(relativeFilePath))
- return true;
- }
+int Filter::fileCount() const
+{
+ return m_files.size();
+}
- return false;
+void Filter::addFileContainer(IFileContainer *fileContainer)
+{
+ if (!fileContainer && m_fileContainers.contains(fileContainer))
+ return;
+
+ m_fileContainers.append(fileContainer);
+}
+
+int Filter::childCount() const
+{
+ return m_fileContainers.size();
}
-QString Filter::attributeValue(const QString &attributeName) const
+IFileContainer *Filter::fileContainer(int index) const
{
- return m_anyAttribute.value(attributeName);
+ if (0 <= index && index < m_fileContainers.size())
+ return m_fileContainers[index];
+ return 0;
}
-void Filter::setAttribute(const QString &attributeName, const QString &attributeValue)
+void Filter::removeFileContainer(IFileContainer *fileContainer)
{
- m_anyAttribute.insert(attributeName, attributeValue);
+ m_fileContainers.removeAll(fileContainer);
}
-void Filter::clearAttribute(const QString &attributeName)
+IAttributeContainer *Filter::attributeContainer() const
{
- if (m_anyAttribute.contains(attributeName))
- m_anyAttribute.insert(attributeName, QString());
+ return m_attributeContainer;
}
-void Filter::removeAttribute(const QString &attributeName)
+bool Filter::fileExists(const QString &relativeFilePath) const
{
- m_anyAttribute.remove(attributeName);
+ 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 (const Filter::Ptr &filter, m_filters)
+ foreach (IFileContainer *filter, m_fileContainers)
filter->allFiles(sl);
- foreach (const File::Ptr &file, m_files)
+ foreach (IFile *file, m_files)
sl.append(file->canonicalPath());
}
+IFileContainer *Filter::clone() const
+{
+ return new Filter(*this);
+}
+
void Filter::processFile(const QDomNode &fileNode)
{
- File::Ptr file(new File(m_parentProjectDoc));
+ IFile *file = new File(m_parentProjectDoc);
file->processNode(fileNode);
addFile(file);
@@ -268,9 +271,9 @@ void Filter::processFile(const QDomNode &fileNode)
void Filter::processFilter(const QDomNode &filterNode)
{
- Filter::Ptr filter(new Filter(m_parentProjectDoc));
+ IFileContainer *filter = new Filter(QLatin1String("Filter"), m_parentProjectDoc);
filter->processNode(filterNode);
- addFilter(filter);
+ addFileContainer(filter);
// process next sibling
QDomNode nextSibling = filterNode.nextSibling();
@@ -296,7 +299,7 @@ void Filter::processNodeAttributes(const QDomElement &element)
m_name = domElement.value();
else
- m_anyAttribute.insert(domElement.name(), domElement.value());
+ m_attributeContainer->setAttribute(domElement.name(), domElement.value());
}
}
}
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/filter.h b/src/plugins/vcprojectmanager/vcprojectmodel/filter.h
index 77249cf4db..8c13d2e844 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/filter.h
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/filter.h
@@ -32,22 +32,23 @@
#include "ivcprojectnodemodel.h"
#include "file.h"
+#include "../interfaces/ifilecontainer.h"
namespace VcProjectManager {
namespace Internal {
class Filter;
-class Filter : public IVcProjectXMLNode
+class Filter : public IFileContainer
{
public:
- typedef QSharedPointer<Filter> Ptr;
-
- Filter(VcProjectDocument *parentProjectDoc);
+ Filter(const QString &containerType, VcProjectDocument *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;
@@ -55,24 +56,22 @@ public:
QString name() const;
void setName(const QString &name);
- void addFilter(Filter::Ptr filter);
- void removeFilter(Filter::Ptr filter);
- void removeFilter(const QString &filterName);
- QList<Filter::Ptr> filters() const;
-
- void addFile(File::Ptr file);
- void removeFile(File::Ptr file);
+ void addFile(IFile *file);
+ void removeFile(IFile *file);
void removeFile(const QString &relativeFilePath);
- File::Ptr file(const QString &relativePath) const;
- QList<File::Ptr> files() const;
- bool fileExists(const QString &relativeFilePath);
-
- QString attributeValue(const QString &attributeName) const;
- void setAttribute(const QString &attributeName, const QString &attributeValue);
- void clearAttribute(const QString &attributeName);
- void removeAttribute(const QString &attributeName);
+ IFile *file(const QString &relativePath) const;
+ QList<IFile *> files() 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);
@@ -80,10 +79,11 @@ private:
void processNodeAttributes(const QDomElement &element);
QString m_name;
- QHash<QString, QString> m_anyAttribute;
- QList<QSharedPointer<Filter> > m_filters;
- QList<File::Ptr> m_files;
+ QList<IFileContainer *> m_fileContainers;
+ QList<IFile *> m_files;
VcProjectDocument *m_parentProjectDoc;
+ IAttributeContainer *m_attributeContainer;
+ QString m_containerType;
};
} // namespace Internal
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/folder.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/folder.cpp
index cc3301cfd9..b5177a4f66 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/folder.cpp
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/folder.cpp
@@ -32,29 +32,31 @@
#include <QFileInfo>
#include "vcprojectdocument.h"
+#include "generalattributecontainer.h"
namespace VcProjectManager {
namespace Internal {
-Folder::Folder(VcProjectDocument *parentProjectDoc)
- : m_parentProjectDoc(parentProjectDoc)
+Folder::Folder(const QString &containerType, VcProjectDocument *parentProjectDoc)
+ : m_parentProjectDoc(parentProjectDoc),
+ m_containerName(containerType)
{
+ m_attributeContainer = new GeneralAttributeContainer;
}
Folder::Folder(const Folder &folder)
{
m_parentProjectDoc = folder.m_parentProjectDoc;
m_name = folder.m_name;
- m_anyAttribute = folder.m_anyAttribute;
+ m_attributeContainer = new GeneralAttributeContainer;
+ *m_attributeContainer = *(folder.m_attributeContainer);
+ m_containerName = folder.m_containerName;
- foreach (const File::Ptr &file, folder.m_files)
- m_files.append(File::Ptr(new File(*file)));
+ foreach (IFile *file, folder.m_files)
+ m_files.append(file->clone());
- foreach (const Filter::Ptr &filter, folder.m_filters)
- m_filters.append(Filter::Ptr(new Filter(*filter)));
-
- foreach (const Folder::Ptr &fold, folder.m_folders)
- m_folders.append(Folder::Ptr(new Folder(*fold)));
+ foreach (IFileContainer *filter, folder.m_fileContainers)
+ m_fileContainers.append(filter->clone());
}
Folder &Folder::operator =(const Folder &folder)
@@ -62,20 +64,19 @@ Folder &Folder::operator =(const Folder &folder)
if (this != &folder) {
m_parentProjectDoc = folder.m_parentProjectDoc;
m_name = folder.m_name;
- m_anyAttribute = folder.m_anyAttribute;
+ m_containerName = folder.m_containerName;
+ *m_attributeContainer = *(folder.m_attributeContainer);
+ qDeleteAll(m_files);
+ qDeleteAll(m_fileContainers);
m_files.clear();
- m_folders.clear();
- m_filters.clear();
-
- foreach (const File::Ptr &file, folder.m_files)
- m_files.append(File::Ptr(new File(*file)));
+ m_fileContainers.clear();
- foreach (const Filter::Ptr &filter, folder.m_filters)
- m_filters.append(Filter::Ptr(new Filter(*filter)));
+ foreach (IFile *file, folder.m_files)
+ m_files.append(file->clone());
- foreach (const Folder::Ptr &fold, folder.m_folders)
- m_folders.append(Folder::Ptr(new Folder(*fold)));
+ foreach (IFileContainer *filter, folder.m_fileContainers)
+ m_fileContainers.append(filter->clone());
}
return *this;
@@ -85,6 +86,11 @@ Folder::~Folder()
{
}
+QString Folder::containerType() const
+{
+ return m_containerName;
+}
+
void Folder::processNode(const QDomNode &node)
{
if (node.isNull())
@@ -113,91 +119,41 @@ VcNodeWidget *Folder::createSettingsWidget()
QDomNode Folder::toXMLDomNode(QDomDocument &domXMLDocument) const
{
- QDomElement fileNode = domXMLDocument.createElement(QLatin1String("Folder"));
+ QDomElement fileNode = domXMLDocument.createElement(m_containerName);
fileNode.setAttribute(QLatin1String("Name"), m_name);
- QHashIterator<QString, QString> it(m_anyAttribute);
+ m_attributeContainer->appendToXMLNode(fileNode);
- while (it.hasNext()) {
- it.next();
- fileNode.setAttribute(it.key(), it.value());
- }
-
- foreach (const File::Ptr &file, m_files)
+ foreach (IFile *file, m_files)
fileNode.appendChild(file->toXMLDomNode(domXMLDocument));
- foreach (const Filter::Ptr &filter, m_filters)
+ foreach (IFileContainer *filter, m_fileContainers)
fileNode.appendChild(filter->toXMLDomNode(domXMLDocument));
- foreach (const Folder::Ptr &folder, m_folders)
- fileNode.appendChild(folder->toXMLDomNode(domXMLDocument));
-
return fileNode;
}
-void Folder::addFilter(Filter::Ptr filter)
-{
- if (m_filters.contains(filter))
- return;
-
- foreach (const Filter::Ptr &filt, m_filters) {
- if (filt->name() == filter->name())
- return;
- }
-
- m_filters.append(filter);
-}
-
-void Folder::removeFilter(Filter::Ptr filter)
-{
- m_filters.removeAll(filter);
-}
-
-void Folder::removeFilter(const QString &filterName)
-{
- foreach (const Filter::Ptr &filter, m_filters) {
- if (filter->name() == filterName) {
- removeFilter(filter);
- return;
- }
- }
-}
-
-QList<Filter::Ptr> Folder::filters() const
-{
- return m_filters;
-}
-
-Filter::Ptr Folder::filter(const QString &filterName) const
-{
- foreach (const Filter::Ptr &filter, m_filters) {
- if (filter->name() == filterName)
- return filter;
- }
- return Filter::Ptr();
-}
-
-void Folder::addFile(File::Ptr file)
+void Folder::addFile(IFile *file)
{
if (m_files.contains(file))
return;
- foreach (const File::Ptr &f, m_files) {
+ foreach (IFile *f, m_files) {
if (f->relativePath() == file->relativePath())
return;
}
m_files.append(file);
}
-void Folder::removeFile(File::Ptr file)
+void Folder::removeFile(IFile *file)
{
m_files.removeAll(file);
}
void Folder::removeFile(const QString &relativeFilePath)
{
- foreach (const File::Ptr &file, m_files) {
+ foreach (IFile *file, m_files) {
if (file->relativePath() == relativeFilePath) {
removeFile(file);
return;
@@ -205,79 +161,75 @@ void Folder::removeFile(const QString &relativeFilePath)
}
}
-QList<File::Ptr> Folder::files() const
+QList<IFile *> Folder::files() const
{
return m_files;
}
-File::Ptr Folder::file(const QString &relativeFilePath) const
+IFile *Folder::file(const QString &relativeFilePath) const
{
- foreach (const File::Ptr &file, m_files) {
+ foreach (IFile *file, m_files) {
if (file->relativePath() == relativeFilePath)
return file;
}
- return File::Ptr();
+ return 0;
}
-bool Folder::fileExists(const QString &relativeFilePath)
+IFile *Folder::file(int index) const
{
- foreach (const File::Ptr &filePtr, m_files) {
- if (filePtr->relativePath() == relativeFilePath)
- return true;
- }
-
- foreach (const Filter::Ptr &filterPtr, m_filters) {
- if (filterPtr->fileExists(relativeFilePath))
- return true;
- }
-
- foreach (const Folder::Ptr &folderPtr, m_folders) {
- if (folderPtr->fileExists(relativeFilePath))
- return true;
- }
+ if (0 <= index && index < m_files.size())
+ return m_files[index];
+ return 0;
+}
- return false;
+int Folder::fileCount() const
+{
+ return m_files.size();
}
-void Folder::addFolder(Folder::Ptr folder)
+void Folder::addFileContainer(IFileContainer *fileContainer)
{
- if (m_folders.contains(folder))
+ if (!fileContainer && m_fileContainers.contains(fileContainer))
return;
- foreach (const Folder::Ptr &f, m_folders) {
- if (f->name() == folder->name())
- return;
- }
- m_folders.append(folder);
+ m_fileContainers.append(fileContainer);
}
-void Folder::removeFolder(Folder::Ptr folder)
+int Folder::childCount() const
{
- m_folders.removeAll(folder);
+ return m_fileContainers.size();
}
-void Folder::removeFolder(const QString &folderName)
+IFileContainer *Folder::fileContainer(int index) const
{
- foreach (const Folder::Ptr &f, m_folders) {
- if (f->name() == folderName) {
- removeFolder(f);
- return;
- }
- }
+ if (0 <= index && index < m_fileContainers.size())
+ return m_fileContainers[index];
+ return 0;
+}
+
+void Folder::removeFileContainer(IFileContainer *fileContainer)
+{
+ m_fileContainers.removeAll(fileContainer);
}
-QList<Folder::Ptr> Folder::folders() const
+IAttributeContainer *Folder::attributeContainer() const
{
- return m_folders;
+ return m_attributeContainer;
}
-Folder::Ptr Folder::folder(const QString &folderName) const
+bool Folder::fileExists(const QString &relativeFilePath) const
{
- foreach (const Folder::Ptr &folder, m_folders) {
- if (folder->name() == folderName)
- return folder;
+ foreach (IFile *filePtr, m_files) {
+ if (filePtr->relativePath() == relativeFilePath)
+ return true;
}
- return Folder::Ptr();
+
+ foreach (IFileContainer *filterPtr, m_fileContainers) {
+ if (filterPtr->fileExists(relativeFilePath))
+ return true;
+ }
+
+ return false;
}
QString Folder::name() const
@@ -290,42 +242,23 @@ void Folder::setName(const QString &name)
m_name = name;
}
-QString Folder::attributeValue(const QString &attributeName) const
-{
- return m_anyAttribute.value(attributeName);
-}
-
-void Folder::setAttribute(const QString &attributeName, const QString &attributeValue)
-{
- m_anyAttribute.insert(attributeName, attributeValue);
-}
-
-void Folder::clearAttribute(const QString &attributeName)
+void Folder::allFiles(QStringList &sl) const
{
- if (m_anyAttribute.contains(attributeName))
- m_anyAttribute.insert(attributeName, QString());
-}
+ foreach (IFileContainer *filter, m_fileContainers)
+ filter->allFiles(sl);
-void Folder::removeAttribute(const QString &attributeName)
-{
- m_anyAttribute.remove(attributeName);
+ foreach (IFile *file, m_files)
+ sl.append(file->canonicalPath());
}
-void Folder::allFiles(QStringList &sl)
+IFileContainer *Folder::clone() const
{
- foreach (const Filter::Ptr &filter, m_filters)
- filter->allFiles(sl);
-
- foreach (const Folder::Ptr &filter, m_folders)
- filter->allFiles(sl);
-
- foreach (const File::Ptr &file, m_files)
- sl.append(file->canonicalPath());
+ return new Folder(*this);
}
void Folder::processFile(const QDomNode &fileNode)
{
- File::Ptr file(new File(m_parentProjectDoc));
+ IFile *file = new File(m_parentProjectDoc);
file->processNode(fileNode);
m_files.append(file);
@@ -343,9 +276,9 @@ void Folder::processFile(const QDomNode &fileNode)
void Folder::processFilter(const QDomNode &filterNode)
{
- Filter::Ptr filter(new Filter(m_parentProjectDoc));
+ IFileContainer *filter = new Filter(QLatin1String("Filter"), m_parentProjectDoc);
filter->processNode(filterNode);
- m_filters.append(filter);
+ m_fileContainers.append(filter);
// process next sibling
QDomNode nextSibling = filterNode.nextSibling();
@@ -361,9 +294,9 @@ void Folder::processFilter(const QDomNode &filterNode)
void Folder::processFolder(const QDomNode &folderNode)
{
- Folder::Ptr folder(new Folder(m_parentProjectDoc));
+ IFileContainer *folder = new Folder(QLatin1String("Folder"), m_parentProjectDoc);
folder->processNode(folderNode);
- m_folders.append(folder);
+ m_fileContainers.append(folder);
// process next sibling
QDomNode nextSibling = folderNode.nextSibling();
@@ -391,7 +324,7 @@ void Folder::processNodeAttributes(const QDomElement &element)
setName(domElement.value());
else
- setAttribute(domElement.name(), domElement.value());
+ m_attributeContainer->setAttribute(domElement.name(), domElement.value());
}
}
}
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/folder.h b/src/plugins/vcprojectmanager/vcprojectmodel/folder.h
index 7641564420..bf15e4a49e 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/folder.h
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/folder.h
@@ -30,56 +30,46 @@
#ifndef VCPROJECTMANAGER_INTERNAL_FOLDER_H
#define VCPROJECTMANAGER_INTERNAL_FOLDER_H
-#include "ivcprojectnodemodel.h"
-
#include "file.h"
#include "filter.h"
+#include "../interfaces/ifilecontainer.h"
namespace VcProjectManager {
namespace Internal {
-class Folder : public IVcProjectXMLNode
+class Folder : public IFileContainer
{
public:
- typedef QSharedPointer<Folder> Ptr;
-
- Folder(VcProjectDocument *parentProjectDoc);
+ Folder(const QString &containerType, VcProjectDocument *parentProjectDoc);
Folder(const Folder &folder);
Folder& operator=(const Folder &folder);
~Folder();
+ QString containerType() const;
+
void processNode(const QDomNode &node);
VcNodeWidget* createSettingsWidget();
QDomNode toXMLDomNode(QDomDocument &domXMLDocument) const;
- void addFilter(Filter::Ptr filter);
- void removeFilter(Filter::Ptr filter);
- void removeFilter(const QString &filterName);
- QList<Filter::Ptr> filters() const;
- Filter::Ptr filter(const QString &filterName) const;
-
- void addFile(File::Ptr file);
- void removeFile(File::Ptr file);
+ void addFile(IFile *file);
+ void removeFile(IFile *file);
void removeFile(const QString &relativeFilePath);
- QList<File::Ptr> files() const;
- File::Ptr file(const QString &relativeFilePath) const;
- bool fileExists(const QString &relativeFilePath);
-
- void addFolder(Folder::Ptr folder);
- void removeFolder(Folder::Ptr folder);
- void removeFolder(const QString &folderName);
- QList<Folder::Ptr> folders() const;
- Folder::Ptr folder(const QString &folderName) const;
+ QList<IFile *> files() const;
+ IFile* file(const QString &relativeFilePath) 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;
QString name() const;
void setName(const QString &name);
- QString attributeValue(const QString &attributeName) const;
- void setAttribute(const QString &attributeName, const QString &attributeValue);
- void clearAttribute(const QString &attributeName);
- void removeAttribute(const QString &attributeName);
-
- void allFiles(QStringList &sl);
+ void allFiles(QStringList &sl) const;
+ IFileContainer* clone() const;
private:
void processFile(const QDomNode &fileNode);
@@ -87,13 +77,13 @@ private:
void processFolder(const QDomNode &folderNode);
void processNodeAttributes(const QDomElement &element);
- QList<QSharedPointer<Folder> > m_folders;
- QList<File::Ptr> m_files;
- QList<Filter::Ptr> m_filters;
+ QList<IFile *> m_files;
+ QList<IFileContainer *> m_fileContainers;
QString m_name; // required
- QHash<QString, QString> m_anyAttribute;
VcProjectDocument *m_parentProjectDoc;
+ IAttributeContainer *m_attributeContainer;
+ QString m_containerName;
};
} // namespace Internal
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.cpp
index 470ab669f5..9f9733f67a 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.cpp
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.cpp
@@ -41,7 +41,7 @@
namespace VcProjectManager {
namespace Internal {
-VcFileNode::VcFileNode(File *fileModel, VcDocProjectNode *vcDocProject)
+VcFileNode::VcFileNode(IFile *fileModel, VcDocProjectNode *vcDocProject)
: ProjectExplorer::FileNode(fileModel->canonicalPath(), fileModel->fileType(), false),
m_vcFileModel(fileModel)
{
@@ -91,7 +91,7 @@ VcFileNode *VcContainerNode::findFileNode(const QString &filePath)
}
-VcFilterNode::VcFilterNode(Filter *filterModel, VcDocProjectNode *vcDocProjNode)
+VcFilterNode::VcFilterNode(VcProjectManager::Internal::IFileContainer *filterModel, VcDocProjectNode *vcDocProjNode)
: VcContainerNode(filterModel->name()),
m_vcFilterModel(filterModel)
{
@@ -134,8 +134,7 @@ bool VcFilterNode::appendFileNode(VcFileNode *fileNode)
}
}
- File::Ptr filePtr = File::Ptr(fileNode->m_vcFileModel);
- m_vcFilterModel->addFile(filePtr);
+ m_vcFilterModel->addFile(fileNode->m_vcFileModel);
QList<ProjectExplorer::FileNode *> vcFileNodes;
vcFileNodes << fileNode;
m_parentVcDocProjNode->addFileNodes(vcFileNodes, this);
@@ -144,7 +143,7 @@ bool VcFilterNode::appendFileNode(VcFileNode *fileNode)
void VcFilterNode::addFilterNode(const QString &name)
{
- Filter *filter = new Filter(m_parentVcDocProjNode->m_vcProjectModel);
+ Filter *filter = new Filter(QLatin1String("Filter"), m_parentVcDocProjNode->m_vcProjectModel);
filter->setName(name);
VcFilterNode *filterNode = new VcFilterNode(filter, m_parentVcDocProjNode);
@@ -154,12 +153,12 @@ void VcFilterNode::addFilterNode(const QString &name)
}
}
-bool VcFilterNode::appendFilterNode(VcFilterNode *folderNode)
+bool VcFilterNode::appendFilterNode(VcFilterNode *filterNode)
{
- if (!m_vcFilterModel || !folderNode || !folderNode->m_vcFilterModel)
+ if (!m_vcFilterModel || !filterNode || !filterNode->m_vcFilterModel)
return false;
- if (m_subFolderNodes.contains(folderNode))
+ if (m_subFolderNodes.contains(filterNode))
return false;
else {
foreach (ProjectExplorer::FolderNode *fNode, m_subFolderNodes) {
@@ -167,15 +166,14 @@ bool VcFilterNode::appendFilterNode(VcFilterNode *folderNode)
if (vcFilterNode &&
vcFilterNode->m_vcFilterModel &&
- vcFilterNode->m_vcFilterModel->name() == folderNode->m_vcFilterModel->name())
+ vcFilterNode->m_vcFilterModel->name() == filterNode->m_vcFilterModel->name())
return false;
}
}
- Filter::Ptr filterPtr = Filter::Ptr(folderNode->m_vcFilterModel);
- m_vcFilterModel->addFilter(filterPtr);
+ m_vcFilterModel->addFileContainer(filterNode->m_vcFilterModel);
QList<ProjectExplorer::FolderNode *> vcFolderNodes;
- vcFolderNodes << folderNode;
+ vcFolderNodes << filterNode;
m_parentVcDocProjNode->addFolderNodes(vcFolderNodes, this);
m_parentVcDocProjNode->m_vcProjectModel->saveToFile(m_parentVcDocProjNode->m_vcProjectModel->filePath());
return true;
@@ -186,13 +184,13 @@ void VcFilterNode::removeFilterNode(VcFilterNode *filterNode)
if (!filterNode || !filterNode->m_vcFilterModel)
return;
- QString filterName = filterNode->m_vcFilterModel->name();
+ IFileContainer *filter = filterNode->m_vcFilterModel;
QList<ProjectExplorer::FolderNode *> folderNodesToRemove;
folderNodesToRemove << filterNode;
m_parentVcDocProjNode->removeFolderNodes(folderNodesToRemove, this);
- m_vcFilterModel->removeFilter(filterName);
+ m_vcFilterModel->removeFileContainer(filter);
m_parentVcDocProjNode->m_vcProjectModel->saveToFile(m_parentVcDocProjNode->m_vcProjectModel->filePath());
}
@@ -201,38 +199,42 @@ void VcFilterNode::removeFileNode(VcFileNode *fileNode)
if (!fileNode || !fileNode->m_vcFileModel)
return;
- QString relativePath = fileNode->m_vcFileModel->relativePath();
+ IFile *file = fileNode->m_vcFileModel;
QList<ProjectExplorer::FileNode *> fileNodesToRemove;
fileNodesToRemove << fileNode;
m_parentVcDocProjNode->removeFileNodes(fileNodesToRemove, this);
- File::Ptr filePtr = m_vcFilterModel->file(relativePath);
-
- m_vcFilterModel->removeFile(filePtr);
+ m_vcFilterModel->removeFile(file);
m_parentVcDocProjNode->m_vcProjectModel->saveToFile(m_parentVcDocProjNode->m_vcProjectModel->filePath());
}
void VcFilterNode::readChildren()
{
- QList<Filter::Ptr> filters = m_vcFilterModel->filters();
- QList<File::Ptr> files = m_vcFilterModel->files();
-
QList<ProjectExplorer::FolderNode *> vcFolderNodes;
- foreach (const Filter::Ptr &filter, filters)
- vcFolderNodes.append(new VcFilterNode(filter.data(), m_parentVcDocProjNode));
+
+ for (int i = 0; i < m_vcFilterModel->childCount(); ++i) {
+ IFileContainer *fileCont = m_vcFilterModel->fileContainer(i);
+ if (fileCont)
+ vcFolderNodes.append(new VcFilterNode(fileCont, m_parentVcDocProjNode));
+ }
m_parentVcDocProjNode->addFolderNodes(vcFolderNodes, this);
QList<ProjectExplorer::FileNode *> vcFileNodes;
- foreach (const File::Ptr &file, files)
- vcFileNodes.append(new VcFileNode(file.data(), m_parentVcDocProjNode));
+
+ for (int i = 0; i < m_vcFilterModel->fileCount(); ++i) {
+ IFile *file = m_vcFilterModel->file(i);
+
+ if (file)
+ vcFileNodes.append(new VcFileNode(file, m_parentVcDocProjNode));
+ }
m_parentVcDocProjNode->addFileNodes(vcFileNodes, this);
}
-VcFolderNode::VcFolderNode(Folder *folderModel, VcDocProjectNode *vcDocProjNode)
+VcFolderNode::VcFolderNode(VcProjectManager::Internal::IFileContainer *folderModel, VcDocProjectNode *vcDocProjNode)
: VcContainerNode(folderModel->name()),
m_vcFolderModel(folderModel)
{
@@ -275,8 +277,7 @@ bool VcFolderNode::appendFileNode(VcFileNode *fileNode)
}
}
- File::Ptr filePtr = File::Ptr(fileNode->m_vcFileModel);
- m_vcFolderModel->addFile(filePtr);
+ m_vcFolderModel->addFile(fileNode->m_vcFileModel);
QList<ProjectExplorer::FileNode *> vcFileNodes;
vcFileNodes << fileNode;
m_parentVcDocProjNode->addFileNodes(vcFileNodes, this);
@@ -285,7 +286,7 @@ bool VcFolderNode::appendFileNode(VcFileNode *fileNode)
void VcFolderNode::addFilterNode(const QString &name)
{
- Filter *filter = new Filter(m_parentVcDocProjNode->m_vcProjectModel);
+ Filter *filter = new Filter(QLatin1String("Filter"), m_parentVcDocProjNode->m_vcProjectModel);
filter->setName(name);
VcFilterNode *filterNode = new VcFilterNode(filter, m_parentVcDocProjNode);
@@ -313,8 +314,7 @@ bool VcFolderNode::appendFilterNode(VcFilterNode *filterNode)
}
}
- Filter::Ptr filterPtr = Filter::Ptr(filterNode->m_vcFilterModel);
- m_vcFolderModel->addFilter(filterPtr);
+ m_vcFolderModel->addFileContainer(filterNode->m_vcFilterModel);
QList<ProjectExplorer::FolderNode *> vcFolderNodes;
vcFolderNodes << filterNode;
m_parentVcDocProjNode->addFolderNodes(vcFolderNodes, this);
@@ -327,15 +327,13 @@ void VcFolderNode::removeFileNode(VcFileNode *fileNode)
if (!fileNode || !fileNode->m_vcFileModel)
return;
- QString relativePath = fileNode->m_vcFileModel->relativePath();
+ IFile *file = fileNode->m_vcFileModel;
QList<ProjectExplorer::FileNode *> fileNodesToRemove;
fileNodesToRemove << fileNode;
m_parentVcDocProjNode->removeFileNodes(fileNodesToRemove, this);
- File::Ptr filePtr = m_vcFolderModel->file(relativePath);
-
- m_vcFolderModel->removeFile(filePtr);
+ m_vcFolderModel->removeFile(file);
m_parentVcDocProjNode->m_vcProjectModel->saveToFile(m_parentVcDocProjNode->m_vcProjectModel->filePath());
}
@@ -344,19 +342,19 @@ void VcFolderNode::removeFilterNode(VcFilterNode *filterNode)
if (!filterNode || !filterNode->m_vcFilterModel)
return;
- QString filterName = filterNode->m_vcFilterModel->name();
+ IFileContainer *filter = filterNode->m_vcFilterModel;
QList<ProjectExplorer::FolderNode *> folderNodesToRemove;
folderNodesToRemove << filterNode;
m_parentVcDocProjNode->removeFolderNodes(folderNodesToRemove, this);
- m_vcFolderModel->removeFilter(filterName);
+ m_vcFolderModel->removeFileContainer(filter);
m_parentVcDocProjNode->m_vcProjectModel->saveToFile(m_parentVcDocProjNode->m_vcProjectModel->filePath());
}
void VcFolderNode::addFolderNode(const QString &name)
{
- Folder *folder = new Folder(m_parentVcDocProjNode->m_vcProjectModel);
+ Folder *folder = new Folder(QLatin1String("Folder"), m_parentVcDocProjNode->m_vcProjectModel);
folder->setName(name);
VcFolderNode *folderNode = new VcFolderNode(folder, m_parentVcDocProjNode);
@@ -384,8 +382,7 @@ bool VcFolderNode::appendFolderNode(VcFolderNode *folderNode)
}
}
- Folder::Ptr folderPtr = Folder::Ptr(folderNode->m_vcFolderModel);
- m_vcFolderModel->addFolder(folderPtr);
+ m_vcFolderModel->addFileContainer(folderNode->m_vcFolderModel);
QList<ProjectExplorer::FolderNode *> vcFolderNodes;
vcFolderNodes << folderNode;
m_parentVcDocProjNode->addFolderNodes(vcFolderNodes, this);
@@ -398,37 +395,37 @@ void VcFolderNode::removeFolderNode(VcFolderNode *folderNode)
if (!folderNode || !folderNode->m_vcFolderModel)
return;
- QString folderName = folderNode->m_vcFolderModel->name();
+ IFileContainer *folder = folderNode->m_vcFolderModel;
QList<ProjectExplorer::FolderNode *> folderNodesToRemove;
folderNodesToRemove << folderNode;
m_parentVcDocProjNode->removeFolderNodes(folderNodesToRemove, this);
- m_vcFolderModel->removeFolder(folderName);
+ m_vcFolderModel->removeFileContainer(folder);
m_parentVcDocProjNode->m_vcProjectModel->saveToFile(m_parentVcDocProjNode->m_vcProjectModel->filePath());
}
void VcFolderNode::readChildren()
{
- QList<Filter::Ptr> filters = m_vcFolderModel->filters();
- QList<Folder::Ptr> folders = m_vcFolderModel->folders();
- QList<File::Ptr> files = m_vcFolderModel->files();
-
QList<ProjectExplorer::FolderNode *> vcFolderNodes;
- foreach (const Filter::Ptr &filter, filters)
- vcFolderNodes.append(new VcFilterNode(filter.data(), m_parentVcDocProjNode));
-
- m_parentVcDocProjNode->addFolderNodes(vcFolderNodes, this);
- vcFolderNodes.clear();
- foreach (const Folder::Ptr &folder, folders)
- vcFolderNodes.append(new VcFolderNode(folder.data(), m_parentVcDocProjNode));
+ for (int i = 0; i < m_vcFolderModel->childCount(); ++i) {
+ IFileContainer *fileCont = m_vcFolderModel->fileContainer(i);
+ if (fileCont && fileCont->containerType() == QLatin1String("Filter"))
+ vcFolderNodes.append(new VcFilterNode(fileCont, m_parentVcDocProjNode));
+ else if (fileCont && fileCont->containerType() == QLatin1String("Folder"))
+ vcFolderNodes.append(new VcFolderNode(fileCont, m_parentVcDocProjNode));
+ }
m_parentVcDocProjNode->addFolderNodes(vcFolderNodes, this);
QList<ProjectExplorer::FileNode *> vcFileNodes;
- foreach (const File::Ptr &file, files)
- vcFileNodes.append(new VcFileNode(file.data(), m_parentVcDocProjNode));
+
+ for (int i = 0; i < m_vcFolderModel->fileCount(); ++i) {
+ IFile *file = m_vcFolderModel->file(i);
+ if (file)
+ vcFileNodes.append(new VcFileNode(file, m_parentVcDocProjNode));
+ }
m_parentVcDocProjNode->addFileNodes(vcFileNodes, this);
}
@@ -440,42 +437,42 @@ VcDocProjectNode::VcDocProjectNode(VcProjectDocument *vcProjectModel)
{
if (m_vcProjectModel->documentVersion() == VcDocConstants::DV_MSVC_2005) {
QSharedPointer<Files2005> files2005 = m_vcProjectModel->files().staticCast<Files2005>();
- QList<Filter::Ptr> filters = files2005->filters();
+ QList<IFileContainer *> filters = files2005->fileContainers();
QList<ProjectExplorer::FolderNode *> vcFolderNodes;
- foreach (const Filter::Ptr &filter, filters)
- vcFolderNodes.append(new VcFilterNode(filter.data(), this));
+ foreach (IFileContainer *filter, filters)
+ vcFolderNodes.append(new VcFilterNode(filter, this));
addFolderNodes(vcFolderNodes, this);
- QList<Folder::Ptr> folders = files2005->folders();
+ QList<IFileContainer *> folders = files2005->folders();
vcFolderNodes.clear();
- foreach (const Folder::Ptr &folder, folders)
- vcFolderNodes.append(new VcFolderNode(folder.data(), this));
+ foreach (IFileContainer *folder, folders)
+ vcFolderNodes.append(new VcFolderNode(folder, this));
addFolderNodes(vcFolderNodes, this);
- QList<File::Ptr> files = files2005->files();
+ QList<IFile *> files = files2005->files();
QList<ProjectExplorer::FileNode *> vcFileNodes;
- foreach (const File::Ptr &file, files)
- vcFileNodes.append(new VcFileNode(file.data(), this));
+ foreach (IFile *file, files)
+ vcFileNodes.append(new VcFileNode(file, this));
addFileNodes(vcFileNodes, this);
}
else {
- QList<Filter::Ptr> filters = m_vcProjectModel->files()->filters();
+ QList<IFileContainer *> filters = m_vcProjectModel->files()->fileContainers();
QList<ProjectExplorer::FolderNode *> vcFolderNodes;
- foreach (const Filter::Ptr &filter, filters)
- vcFolderNodes.append(new VcFilterNode(filter.data(), this));
+ foreach (IFileContainer *filter, filters)
+ vcFolderNodes.append(new VcFilterNode(filter, this));
addFolderNodes(vcFolderNodes, this);
- QList<File::Ptr> files = m_vcProjectModel->files()->files();
+ QList<IFile *> files = m_vcProjectModel->files()->files();
QList<ProjectExplorer::FileNode *> vcFileNodes;
- foreach (const File::Ptr &file, files)
- vcFileNodes.append(new VcFileNode(file.data(), this));
+ foreach (IFile *file, files)
+ vcFileNodes.append(new VcFileNode(file, this));
addFileNodes(vcFileNodes, this);
}
@@ -672,7 +669,7 @@ void VcDocProjectNode::addFileNode(const QString &filePath)
void VcDocProjectNode::addFolderNode(const QString &name)
{
- Folder *folder = new Folder(m_vcProjectModel);
+ Folder *folder = new Folder(QLatin1String("Folder"), m_vcProjectModel);
folder->setName(name);
VcFolderNode *folderNode = new VcFolderNode(folder, this);
@@ -684,7 +681,7 @@ void VcDocProjectNode::addFolderNode(const QString &name)
void VcDocProjectNode::addFilterNode(const QString &name)
{
- Filter *filter = new Filter(m_vcProjectModel);
+ Filter *filter = new Filter(QLatin1String("Filter"), m_vcProjectModel);
filter->setName(name);
VcFilterNode *folderNode = new VcFilterNode(filter, this);
@@ -716,8 +713,7 @@ bool VcDocProjectNode::appendFolderNode(VcFolderNode *folderNode)
}
}
- Folder::Ptr folderPtr = Folder::Ptr(folderNode->m_vcFolderModel);
- m_vcProjectModel->files().staticCast<Files2005>()->addFolder(folderPtr);
+ m_vcProjectModel->files().staticCast<Files2005>()->addFolder(folderNode->m_vcFolderModel);
QList<ProjectExplorer::FolderNode *> vcFolderNodes;
vcFolderNodes << folderNode;
addFolderNodes(vcFolderNodes, this);
@@ -741,8 +737,7 @@ bool VcDocProjectNode::appendFilterNode(VcFilterNode *filterNode)
}
}
- Filter::Ptr filterPtr = Filter::Ptr(filterNode->m_vcFilterModel);
- m_vcProjectModel->files()->addFilter(filterPtr);
+ m_vcProjectModel->files()->addFilter(filterNode->m_vcFilterModel);
QList<ProjectExplorer::FolderNode *> vcFolderNodes;
vcFolderNodes << filterNode;
addFolderNodes(vcFolderNodes, this);
@@ -766,8 +761,7 @@ bool VcDocProjectNode::appendFileNode(VcFileNode *fileNode)
}
}
- File::Ptr filePtr = File::Ptr(fileNode->m_vcFileModel);
- m_vcProjectModel->files()->addFile(filePtr);
+ m_vcProjectModel->files()->addFile(fileNode->m_vcFileModel);
QList<ProjectExplorer::FileNode *> vcFileNodes;
vcFileNodes << fileNode;
addFileNodes(vcFileNodes, this);
@@ -818,7 +812,7 @@ void VcDocProjectNode::removeFileNode(VcFileNode *fileNode)
fileNodesToRemove << fileNode;
removeFileNodes(fileNodesToRemove, this);
- File::Ptr filePtr = m_vcProjectModel->files()->file(relativePath);
+ IFile *filePtr = m_vcProjectModel->files()->file(relativePath);
m_vcProjectModel->files()->removeFile(filePtr);
m_vcProjectModel->saveToFile(m_vcProjectModel->filePath());
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.h b/src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.h
index 7bf99b22ae..f64856405b 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.h
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/vcdocprojectnodes.h
@@ -36,9 +36,8 @@ namespace VcProjectManager {
namespace Internal {
class VcProjectDocument;
-class Folder;
-class Filter;
-class File;
+class IFileContainer;
+class IFile;
class VcDocProjectNode;
class VcFileNode : public ProjectExplorer::FileNode
@@ -50,14 +49,14 @@ class VcFileNode : public ProjectExplorer::FileNode
friend class VcFilterNode;
public:
- VcFileNode(File *fileModel, VcDocProjectNode *vcDocProject);
+ VcFileNode(IFile *fileModel, VcDocProjectNode *vcDocProject);
~VcFileNode();
protected:
void readChildren(VcDocProjectNode *vcDocProj);
private:
- File *m_vcFileModel;
+ IFile *m_vcFileModel;
};
class VcFilterNode;
@@ -136,14 +135,14 @@ class VcFilterNode : public VcContainerNode
friend class VcFolderNode;
public:
- VcFilterNode(Filter *filterModel, VcDocProjectNode *vcDocProjNode);
+ VcFilterNode(IFileContainer *filterModel, VcDocProjectNode *vcDocProjNode);
~VcFilterNode();
void addFileNode(const QString &filePath);
bool appendFileNode(VcFileNode *fileNode);
void addFilterNode(const QString &name);
- bool appendFilterNode(VcFilterNode *folderNode);
+ bool appendFilterNode(VcFilterNode *filterNode);
void removeFilterNode(VcFilterNode *filterNode);
void removeFileNode(VcFileNode *fileNode);
@@ -152,7 +151,7 @@ protected:
void readChildren();
private:
- Filter *m_vcFilterModel;
+ IFileContainer *m_vcFilterModel;
};
// used only for VS 2005 projects
@@ -165,7 +164,7 @@ class VcFolderNode : public VcContainerNode
friend class VcFilterNode;
public:
- VcFolderNode(Folder *folderModel, VcDocProjectNode *vcDocProjNode);
+ VcFolderNode(IFileContainer *folderModel, VcDocProjectNode *vcDocProjNode);
~VcFolderNode();
void addFileNode(const QString &filePath);
@@ -186,7 +185,7 @@ protected:
void readChildren();
private:
- Folder *m_vcFolderModel;
+ IFileContainer *m_vcFolderModel;
};
class VcDocProjectNode : public ProjectExplorer::ProjectNode
diff --git a/src/plugins/vcprojectmanager/widgets/configurationswidgets.cpp b/src/plugins/vcprojectmanager/widgets/configurationswidgets.cpp
index 261757d9e0..61c81b590c 100644
--- a/src/plugins/vcprojectmanager/widgets/configurationswidgets.cpp
+++ b/src/plugins/vcprojectmanager/widgets/configurationswidgets.cpp
@@ -98,7 +98,7 @@ void ConfigurationsBaseWidget::saveData()
foreach (IConfiguration *newConfig, m_newConfigurations)
m_configs->addConfiguration(newConfig);
- QHashIterator<QSharedPointer<File>, QList<IConfiguration*> > fileConfigIt(m_newFilesConfigurations);
+ QHashIterator<IFile*, QList<IConfiguration*> > fileConfigIt(m_newFilesConfigurations);
while (fileConfigIt.hasNext()) {
fileConfigIt.next();
@@ -299,59 +299,34 @@ void ConfigurationsBaseWidget::addConfigurationToFiles(const QString &copyFromCo
{
Files::Ptr docFiles = m_vcProjDoc->files();
if (docFiles) {
- QList<Filter::Ptr> filters = docFiles->filters();
+ QList<IFileContainer *> filters = docFiles->fileContainers();
- foreach (Filter::Ptr filter, filters)
+ foreach (IFileContainer *filter, filters)
addConfigurationToFilesInFilter(filter, copyFromConfig, targetConfigName);
- QList<File::Ptr> files = docFiles->files();
+ QList<IFile *> files = docFiles->files();
- foreach (File::Ptr file, files)
+ foreach (IFile *file, files)
addConfigurationToFile(file, copyFromConfig, targetConfigName);
-
- Files2005::Ptr docFiles2005 = docFiles.dynamicCast<Files2005>();
-
- if (docFiles2005) {
- QList<Folder::Ptr> folders = docFiles2005->folders();
-
- foreach (Folder::Ptr folder, folders)
- addConfigurationToFilesInFolder(folder, copyFromConfig, targetConfigName);
- }
}
}
-void ConfigurationsBaseWidget::addConfigurationToFilesInFilter(QSharedPointer<Filter> filterPtr, const QString &copyFromConfig, const QString &targetConfigName)
+void ConfigurationsBaseWidget::addConfigurationToFilesInFilter(IFileContainer *filterPtr, const QString &copyFromConfig, const QString &targetConfigName)
{
- QList<Filter::Ptr> filters = filterPtr->filters();
-
- foreach (Filter::Ptr filter, filters)
- addConfigurationToFilesInFilter(filter, copyFromConfig, targetConfigName);
-
- QList<File::Ptr> files = filterPtr->files();
-
- foreach (File::Ptr file, files)
- addConfigurationToFile(file, copyFromConfig, targetConfigName);
-}
-
-void ConfigurationsBaseWidget::addConfigurationToFilesInFolder(QSharedPointer<Folder> folderPtr, const QString &copyFromConfig, const QString &targetConfigName)
-{
- QList<Filter::Ptr> filters = folderPtr->filters();
-
- foreach (Filter::Ptr filter, filters)
- addConfigurationToFilesInFilter(filter, copyFromConfig, targetConfigName);
-
- QList<Folder::Ptr> folders = folderPtr->folders();
-
- foreach (Folder::Ptr folder, folders)
- addConfigurationToFilesInFolder(folder, copyFromConfig, targetConfigName);
-
- QList<File::Ptr> files = folderPtr->files();
+ for (int i = 0; i < filterPtr->childCount(); ++i) {
+ IFileContainer *fileContainer = filterPtr->fileContainer(i);
+ if (fileContainer)
+ addConfigurationToFilesInFilter(fileContainer, copyFromConfig, targetConfigName);
+ }
- foreach (File::Ptr file, files)
- addConfigurationToFile(file, copyFromConfig, targetConfigName);
+ for (int i = 0; i < filterPtr->fileCount(); ++i) {
+ IFile *file = filterPtr->file(i);
+ if (file)
+ addConfigurationToFile(file, copyFromConfig, targetConfigName);
+ }
}
-void ConfigurationsBaseWidget::addConfigurationToFile(QSharedPointer<File> filePtr, const QString &copyFromConfig, const QString &targetConfigName)
+void ConfigurationsBaseWidget::addConfigurationToFile(IFile *filePtr, const QString &copyFromConfig, const QString &targetConfigName)
{
IConfiguration *configPtr = filePtr->configurationContainer()->configuration(copyFromConfig);
diff --git a/src/plugins/vcprojectmanager/widgets/configurationswidgets.h b/src/plugins/vcprojectmanager/widgets/configurationswidgets.h
index c53587b71a..d1c82024af 100644
--- a/src/plugins/vcprojectmanager/widgets/configurationswidgets.h
+++ b/src/plugins/vcprojectmanager/widgets/configurationswidgets.h
@@ -43,9 +43,8 @@ class Configurations;
class Configuration;
class VcProjectDocument;
class ConfigurationsWidget;
-class Filter;
-class Folder;
-class File;
+class IFile;
+class IFileContainer;
class ConfigurationsBaseWidget : public VcNodeWidget
{
@@ -67,9 +66,8 @@ protected:
IConfiguration* createConfiguration(const QString &configNameWithPlatform) const;
IConfiguration* configInNewConfigurations(const QString &configNameWithPlatform) const;
void addConfigurationToFiles(const QString &copyFromConfig, const QString &targetConfigName);
- void addConfigurationToFilesInFilter(QSharedPointer<Filter> filterPtr, const QString &copyFromConfig, const QString &targetConfigName);
- void addConfigurationToFilesInFolder(QSharedPointer<Folder> folderPtr, const QString &copyFromConfig, const QString &targetConfigName);
- void addConfigurationToFile(QSharedPointer<File> filePtr, const QString &copyFromConfig, const QString &targetConfigName);
+ void addConfigurationToFilesInFilter(IFileContainer *filterPtr, const QString &copyFromConfig, const QString &targetConfigName);
+ void addConfigurationToFile(IFile *filePtr, const QString &copyFromConfig, const QString &targetConfigName);
Configurations *m_configs;
VcProjectDocument *m_vcProjDoc;
@@ -79,7 +77,7 @@ protected:
QList<QString> m_removedConfigurations;
QMap<IConfiguration*, QString> m_renamedConfigurations; // <oldName, newName>
- QHash<QSharedPointer<File>, QList<IConfiguration*> > m_newFilesConfigurations;
+ QHash<IFile*, QList<IConfiguration*> > m_newFilesConfigurations;
};
class Configurations2003Widget : public ConfigurationsBaseWidget