summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRadovan Zivkovic <pivonroll@gmail.com>2013-09-22 21:59:29 +0200
committerOswald Buddenhagen <oswald.buddenhagen@digia.com>2014-03-11 19:54:57 +0100
commit82130c9c3f4f1335e861e1f06b6542ddb8c02046 (patch)
treea2b83b596cce2d67740da9ccef53ac4569dcb973
parent67e04d3803840726aa32fc80108f47bf67595b80 (diff)
downloadqt-creator-82130c9c3f4f1335e861e1f06b6542ddb8c02046.tar.gz
Added ConfigurationContainer class.
Change-Id: Id564204974baa72b73672e1dbbf2970f82fed570 Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
-rw-r--r--src/plugins/vcprojectmanager/interfaces/iconfigurations.h8
-rw-r--r--src/plugins/vcprojectmanager/interfaces/ifile.h56
-rw-r--r--src/plugins/vcprojectmanager/interfaces/interfaces.pri4
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/configurationcontainer.cpp116
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/configurationcontainer.h62
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/configurations.cpp59
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/configurations.h4
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/file.cpp62
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/file.h11
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/vcprojectmodel.pri8
-rw-r--r--src/plugins/vcprojectmanager/widgets/configurationswidgets.cpp11
-rw-r--r--src/plugins/vcprojectmanager/widgets/configurationswidgets.h2
12 files changed, 292 insertions, 111 deletions
diff --git a/src/plugins/vcprojectmanager/interfaces/iconfigurations.h b/src/plugins/vcprojectmanager/interfaces/iconfigurations.h
index b6eae3b4c8..7f4bafc44c 100644
--- a/src/plugins/vcprojectmanager/interfaces/iconfigurations.h
+++ b/src/plugins/vcprojectmanager/interfaces/iconfigurations.h
@@ -35,18 +35,14 @@
namespace VcProjectManager {
namespace Internal {
-class IConfiguration;
+class ConfigurationContainer;
class IConfigurations
{
public:
virtual ~IConfigurations() {}
- virtual void addConfiguration(IConfiguration *config) = 0;
- virtual IConfiguration* configuration(const QString &name) const = 0;
- virtual IConfiguration* configuration(int index) const = 0;
- virtual int configurationCount() const = 0;
- virtual void removeConfiguration(const QString &fullName) = 0;
+ virtual ConfigurationContainer* configurationContainer() const = 0;
};
} // namespace Internal
diff --git a/src/plugins/vcprojectmanager/interfaces/ifile.h b/src/plugins/vcprojectmanager/interfaces/ifile.h
new file mode 100644
index 0000000000..c3923a8e22
--- /dev/null
+++ b/src/plugins/vcprojectmanager/interfaces/ifile.h
@@ -0,0 +1,56 @@
+/**************************************************************************
+**
+** 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_IFILE_H
+#define VCPROJECTMANAGER_INTERNAL_IFILE_H
+
+#include <QString>
+
+#include "../vcprojectmodel/ivcprojectnodemodel.h"
+
+namespace VcProjectManager {
+namespace Internal {
+
+class IConfiguration;
+class ConfigurationContainer;
+
+class IFile : public IVcProjectXMLNode
+{
+public:
+ virtual ~IFile() {}
+
+ virtual QString relativePath() const = 0;
+ virtual void setRelativePath(const QString &path) = 0;
+ virtual ConfigurationContainer* configurationContainer() const = 0;
+};
+
+} // namespace Internal
+} // namespace VcProjectManager
+
+#endif // VCPROJECTMANAGER_INTERNAL_IFILE_H
diff --git a/src/plugins/vcprojectmanager/interfaces/interfaces.pri b/src/plugins/vcprojectmanager/interfaces/interfaces.pri
index af1b64e0eb..14c2940c27 100644
--- a/src/plugins/vcprojectmanager/interfaces/interfaces.pri
+++ b/src/plugins/vcprojectmanager/interfaces/interfaces.pri
@@ -9,4 +9,6 @@ HEADERS += \
interfaces/itoolsectiondescription.h \
interfaces/itoolattribute.h \
interfaces/iattributedescriptiondataitem.h \
- interfaces/iconfigurations.h
+ interfaces/iconfigurations.h \
+ interfaces/ifile.h \
+ interfaces/ifile.h
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/configurationcontainer.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/configurationcontainer.cpp
new file mode 100644
index 0000000000..ae9b583a7e
--- /dev/null
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/configurationcontainer.cpp
@@ -0,0 +1,116 @@
+/**************************************************************************
+**
+** 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 "configurationcontainer.h"
+#include "../interfaces/iconfiguration.h"
+
+namespace VcProjectManager {
+namespace Internal {
+
+ConfigurationContainer::ConfigurationContainer()
+{
+}
+
+ConfigurationContainer::ConfigurationContainer(const ConfigurationContainer &configCont)
+{
+ foreach (const IConfiguration *config, configCont.m_configs)
+ m_configs.append(config->clone());
+}
+
+ConfigurationContainer &ConfigurationContainer::operator=(const ConfigurationContainer &configCont)
+{
+ if (this != &configCont) {
+ m_configs.clear();
+
+ foreach (const IConfiguration *config, configCont.m_configs)
+ m_configs.append(config->clone());
+ }
+
+ return *this;
+}
+
+ConfigurationContainer::~ConfigurationContainer()
+{
+ qDeleteAll(m_configs);
+}
+
+void ConfigurationContainer::addConfiguration(IConfiguration *config)
+{
+ if (m_configs.contains(config))
+ return;
+
+ // if there is already a configuration with the same name
+ foreach (const IConfiguration *conf, m_configs) {
+ if (config->fullName() == conf->fullName())
+ return;
+ }
+ m_configs.append(config);
+}
+
+IConfiguration *ConfigurationContainer::configuration(const QString &fullName) const
+{
+ foreach (IConfiguration *config, m_configs) {
+ if (config->fullName() == fullName)
+ return config;
+ }
+ return 0;
+}
+
+IConfiguration *ConfigurationContainer::configuration(int index) const
+{
+ if (0 <= index && index < m_configs.size())
+ return m_configs[index];
+ return 0;
+}
+
+int ConfigurationContainer::configurationCount() const
+{
+ return m_configs.size();
+}
+
+void ConfigurationContainer::removeConfiguration(const QString &fullName)
+{
+ // if there is already a configuration with the same name
+ foreach (IConfiguration *conf, m_configs) {
+ if (conf->fullName() == fullName) {
+ m_configs.removeOne(conf);
+ delete conf;
+ return;
+ }
+ }
+}
+
+void ConfigurationContainer::appendToXMLNode(QDomElement &domElement, QDomDocument &domXMLDocument)
+{
+ foreach (const IConfiguration *config, m_configs)
+ domElement.appendChild(config->toXMLDomNode(domXMLDocument));
+}
+
+} // Internal
+} // VcProjectManager
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/configurationcontainer.h b/src/plugins/vcprojectmanager/vcprojectmodel/configurationcontainer.h
new file mode 100644
index 0000000000..6fbb37c1a7
--- /dev/null
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/configurationcontainer.h
@@ -0,0 +1,62 @@
+/**************************************************************************
+**
+** 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 ICONFIGURATIONCONTAINER_H
+#define ICONFIGURATIONCONTAINER_H
+
+#include <QList>
+#include <QDomElement>
+
+namespace VcProjectManager {
+namespace Internal {
+
+class IConfiguration;
+
+class ConfigurationContainer
+{
+public:
+ ConfigurationContainer();
+ ConfigurationContainer(const ConfigurationContainer &configCont);
+ ConfigurationContainer& operator=(const ConfigurationContainer &configCont);
+ ~ConfigurationContainer();
+
+ void addConfiguration(IConfiguration *config);
+ IConfiguration* configuration(const QString &fullName) const;
+ IConfiguration* configuration(int index) const;
+ int configurationCount() const;
+ void removeConfiguration(const QString &fullName);
+ void appendToXMLNode(QDomElement &domElement, QDomDocument &domXMLDocument);
+
+private:
+ QList<IConfiguration *> m_configs;
+};
+
+} // Internal
+} // VcProjectManager
+#endif // ICONFIGURATIONCONTAINER_H
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/configurations.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/configurations.cpp
index 1d2a3c30f8..4e4e05785c 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/configurations.cpp
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/configurations.cpp
@@ -33,6 +33,7 @@
#include "vcprojectdocument.h"
#include "../widgets/configurationswidgets.h"
#include "../interfaces/iconfiguration.h"
+#include "configurationcontainer.h"
namespace VcProjectManager {
namespace Internal {
@@ -42,24 +43,21 @@ class ConfigurationsBaseWidget;
Configurations::Configurations(VcProjectDocument *vcProjDoc)
: m_vcProjDoc(vcProjDoc)
{
+ m_configurationContainer = new ConfigurationContainer;
}
Configurations::Configurations(const Configurations &configs)
{
+ m_configurationContainer = new ConfigurationContainer;
+ *m_configurationContainer = *(configs.m_configurationContainer);
m_vcProjDoc = configs.m_vcProjDoc;
-
- foreach (const IConfiguration *config, configs.m_configs)
- m_configs.append(config->clone());
}
Configurations &Configurations::operator =(const Configurations &configs)
{
if (this != &configs) {
m_vcProjDoc = configs.m_vcProjDoc;
- m_configs.clear();
-
- foreach (const IConfiguration *config, configs.m_configs)
- m_configs.append(config->clone());
+ *m_configurationContainer = *(configs.m_configurationContainer);
}
return *this;
@@ -67,7 +65,7 @@ Configurations &Configurations::operator =(const Configurations &configs)
Configurations::~Configurations()
{
- qDeleteAll(m_configs);
+ delete m_configurationContainer;
}
void Configurations::processNode(const QDomNode &node)
@@ -91,62 +89,43 @@ VcNodeWidget *Configurations::createSettingsWidget()
QDomNode Configurations::toXMLDomNode(QDomDocument &domXMLDocument) const
{
QDomElement configsNode = domXMLDocument.createElement(QLatin1String("Configurations"));
-
- foreach (const IConfiguration *config, m_configs)
- configsNode.appendChild(config->toXMLDomNode(domXMLDocument));
-
+ m_configurationContainer->appendToXMLNode(configsNode, domXMLDocument);
return configsNode;
}
-void Configurations::addConfiguration(IConfiguration *config)
+ConfigurationContainer *Configurations::configurationContainer() const
{
- if (m_configs.contains(config))
- return;
+ return m_configurationContainer;
+}
- // if there is already a configuration with the same name
- foreach (const IConfiguration *conf, m_configs) {
- if (config->fullName() == conf->fullName())
- return;
- }
- m_configs.append(config);
+void Configurations::addConfiguration(IConfiguration *config)
+{
+ m_configurationContainer->addConfiguration(config);
}
IConfiguration *Configurations::configuration(const QString &fullName) const
{
- foreach (IConfiguration *config, m_configs) {
- if (config->fullName() == fullName)
- return config;
- }
- return 0;
+ return m_configurationContainer->configuration(fullName);
}
IConfiguration *Configurations::configuration(int index) const
{
- if (0 <= index && index < m_configs.size())
- return m_configs[index];
- return 0;
+ return m_configurationContainer->configuration(index);
}
int Configurations::configurationCount() const
{
- return m_configs.size();
+ return m_configurationContainer->configurationCount();
}
void Configurations::removeConfiguration(const QString &fullName)
{
- // if there is already a configuration with the same name
- foreach (IConfiguration *conf, m_configs) {
- if (conf->fullName() == fullName) {
- m_configs.removeOne(conf);
- delete conf;
- return;
- }
- }
+ m_configurationContainer->removeConfiguration(fullName);
}
bool Configurations::isEmpty() const
{
- return m_configs.isEmpty();
+ return m_configurationContainer->configurationCount() == 0;
}
void Configurations::processConfiguration(const QDomNode &configurationNode)
@@ -162,7 +141,7 @@ void Configurations::processConfiguration(const QDomNode &configurationNode)
if (config) {
config->processNode(configurationNode);
- m_configs.append(config);
+ addConfiguration(config);
}
// process next sibling
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/configurations.h b/src/plugins/vcprojectmanager/vcprojectmodel/configurations.h
index 6fb1fb5bd7..c611740789 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/configurations.h
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/configurations.h
@@ -55,6 +55,8 @@ public:
VcNodeWidget* createSettingsWidget();
QDomNode toXMLDomNode(QDomDocument &domXMLDocument) const;
+ ConfigurationContainer* configurationContainer() const;
+
// IConfigurations interface
void addConfiguration(IConfiguration *config);
IConfiguration *configuration(const QString &fullName) const;
@@ -68,7 +70,7 @@ private:
void processConfiguration(const QDomNode &configurationNode);
VcProjectDocument *m_vcProjDoc;
- QList<IConfiguration *> m_configs;
+ ConfigurationContainer* m_configurationContainer;
};
} // namespace Internal
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/file.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/file.cpp
index 97f7f80552..5b61bc76ef 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/file.cpp
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/file.cpp
@@ -31,6 +31,7 @@
#include "configurationsfactory.h"
#include "vcprojectdocument.h"
+#include "configurationcontainer.h"
#include <projectexplorer/projectexplorerconstants.h>
#include <coreplugin/mimedatabase.h>
@@ -42,18 +43,18 @@ namespace Internal {
File::File(VcProjectDocument *parentProjectDoc)
: m_parentProjectDoc(parentProjectDoc)
{
+ m_configurationContainer = new ConfigurationContainer;
}
File::File(const File &file)
{
m_parentProjectDoc = file.m_parentProjectDoc;
m_relativePath = file.m_relativePath;
+ m_configurationContainer = new ConfigurationContainer;
+ *m_configurationContainer = *(file.m_configurationContainer);
foreach (const File::Ptr &f, file.m_files)
m_files.append(File::Ptr(new File(*f)));
-
- foreach (const IConfiguration *fileConfig, m_fileConfigurations)
- m_fileConfigurations.append(fileConfig->clone());
}
File &File::operator =(const File &file)
@@ -61,15 +62,12 @@ File &File::operator =(const File &file)
if (this != &file) {
m_parentProjectDoc = file.m_parentProjectDoc;
m_relativePath = file.m_relativePath;
+ *m_configurationContainer = *(file.m_configurationContainer);
m_files.clear();
- m_fileConfigurations.clear();
foreach (const File::Ptr &f, file.m_files)
m_files.append(File::Ptr(new File(*f)));
-
- foreach (const IConfiguration *fileConfig, m_fileConfigurations)
- m_fileConfigurations.append(fileConfig->clone());
}
return *this;
}
@@ -77,7 +75,7 @@ File &File::operator =(const File &file)
File::~File()
{
m_files.clear();
- qDeleteAll(m_fileConfigurations);
+ delete m_configurationContainer;
}
void File::processNode(const QDomNode &node)
@@ -120,12 +118,16 @@ QDomNode File::toXMLDomNode(QDomDocument &domXMLDocument) const
foreach (const File::Ptr &file, m_files)
fileNode.appendChild(file->toXMLDomNode(domXMLDocument));
- foreach (const IConfiguration *fileConfig, m_fileConfigurations)
- fileNode.appendChild(fileConfig->toXMLDomNode(domXMLDocument));
+ m_configurationContainer->appendToXMLNode(fileNode, domXMLDocument);
return fileNode;
}
+ConfigurationContainer *File::configurationContainer() const
+{
+ return m_configurationContainer;
+}
+
void File::addFile(File::Ptr file)
{
if (m_files.contains(file))
@@ -139,44 +141,6 @@ void File::removeFile(File::Ptr file)
m_files.removeAll(file);
}
-void File::addFileConfiguration(IConfiguration *fileConfig)
-{
- if (!fileConfig)
- return;
-
- foreach (const IConfiguration *configPtr, m_fileConfigurations) {
- if (configPtr->fullName() == fileConfig->fullName())
- return;
- }
- m_fileConfigurations.append(fileConfig);
-}
-
-void File::removeFileConfiguration(IConfiguration *fileConfig)
-{
- foreach (IConfiguration *configPtr, m_fileConfigurations) {
- if (configPtr->fullName() == fileConfig->fullName()) {
- m_fileConfigurations.removeOne(configPtr);
- delete configPtr;
- return;
- }
- }
-}
-
-IConfiguration* File::fileConfiguration(const QString &name) const
-{
- foreach (IConfiguration *configPtr, m_fileConfigurations) {
- if (configPtr->fullName() == name)
- return configPtr;
- }
-
- return 0;
-}
-
-QList<IConfiguration *> File::fileConfigurations() const
-{
- return m_fileConfigurations;
-}
-
QString File::attributeValue(const QString &attributeName) const
{
return m_anyAttribute.value(attributeName);
@@ -253,7 +217,7 @@ void File::processFileConfiguration(const QDomNode &fileConfigNode)
if (fileConfig) {
fileConfig->processNode(fileConfigNode);
- m_fileConfigurations.append(fileConfig);
+ m_configurationContainer->addConfiguration(fileConfig);
}
// process next sibling
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/file.h b/src/plugins/vcprojectmanager/vcprojectmodel/file.h
index 8c6ddea35d..fe6ef894ea 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/file.h
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/file.h
@@ -32,6 +32,7 @@
#include "ivcprojectnodemodel.h"
#include "configuration.h"
+#include "../interfaces/ifile.h"
#include <projectexplorer/projectnodes.h>
@@ -40,7 +41,7 @@ namespace Internal {
class VcProjectDocument;
-class File : public IVcProjectXMLNode
+class File : public IFile
{
friend class FileFactory;
@@ -55,12 +56,10 @@ public:
VcNodeWidget* createSettingsWidget();
QDomNode toXMLDomNode(QDomDocument &domXMLDocument) const;
+ ConfigurationContainer *configurationContainer() const;
+
void addFile(File::Ptr file);
void removeFile(File::Ptr file);
- void addFileConfiguration(IConfiguration *fileConfig);
- void removeFileConfiguration(IConfiguration *fileConfig);
- IConfiguration *fileConfiguration(const QString &name) const;
- QList<IConfiguration*> fileConfigurations() const;
QString attributeValue(const QString &attributeName) const;
void setAttribute(const QString &attributeName, const QString &attributeValue);
@@ -79,9 +78,9 @@ private:
QString m_relativePath; // required
QList<QSharedPointer<File> > m_files;
- QList<IConfiguration*> m_fileConfigurations;
QHash<QString, QString> m_anyAttribute;
VcProjectDocument *m_parentProjectDoc;
+ ConfigurationContainer *m_configurationContainer;
};
} // namespace Internal
diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectmodel.pri b/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectmodel.pri
index 5f2766ed1c..34946caef5 100644
--- a/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectmodel.pri
+++ b/src/plugins/vcprojectmanager/vcprojectmodel/vcprojectmodel.pri
@@ -43,7 +43,8 @@ HEADERS += \
vcprojectmodel/tools/toolattributes/attributedescriptiondataitem.h \
vcprojectmodel/generalattributecontainer.h \
vcprojectmodel/configurationtools.h \
- vcprojectmodel/tools/toolattributes/toolsectioncontainer.h
+ vcprojectmodel/tools/toolattributes/toolsectioncontainer.h \
+ vcprojectmodel/configurationcontainer.h
SOURCES += \
vcprojectmodel/vcprojectdocument.cpp \
@@ -84,9 +85,10 @@ SOURCES += \
vcprojectmodel/tools/toolsection.cpp \
vcprojectmodel/tools/toolattributes/toolattributeoption.cpp \
vcprojectmodel/tools/toolattributes/attributedescriptiondataitem.cpp \
- vcprojectmodel/tools/toolattributes/toolsectioncontainer.cpp \
vcprojectmodel/generalattributecontainer.cpp \
- vcprojectmodel/configurationtools.cpp
+ vcprojectmodel/configurationtools.cpp \
+ vcprojectmodel/tools/toolattributes/toolsectioncontainer.cpp \
+ vcprojectmodel/configurationcontainer.cpp
OTHER_FILES += \
vcprojectmodel/tools/xml_definitions/VCXMLDataGeneratorTool.xml \
diff --git a/src/plugins/vcprojectmanager/widgets/configurationswidgets.cpp b/src/plugins/vcprojectmanager/widgets/configurationswidgets.cpp
index 10bf8cf840..261757d9e0 100644
--- a/src/plugins/vcprojectmanager/widgets/configurationswidgets.cpp
+++ b/src/plugins/vcprojectmanager/widgets/configurationswidgets.cpp
@@ -43,6 +43,7 @@
#include "../vcprojectmodel/file.h"
#include "../interfaces/iattributecontainer.h"
#include "../interfaces/itools.h"
+#include "../vcprojectmodel/configurationcontainer.h"
namespace VcProjectManager {
namespace Internal {
@@ -97,11 +98,13 @@ void ConfigurationsBaseWidget::saveData()
foreach (IConfiguration *newConfig, m_newConfigurations)
m_configs->addConfiguration(newConfig);
- QHashIterator<QSharedPointer<File>, IConfiguration*> fileConfigIt(m_newFilesConfigurations);
+ QHashIterator<QSharedPointer<File>, QList<IConfiguration*> > fileConfigIt(m_newFilesConfigurations);
while (fileConfigIt.hasNext()) {
fileConfigIt.next();
- fileConfigIt.key()->addFileConfiguration(fileConfigIt.value());
+
+ foreach (IConfiguration *newFileConfig, fileConfigIt.value())
+ fileConfigIt.key()->configurationContainer()->addConfiguration(newFileConfig);
}
// save data for every configuration
@@ -350,12 +353,12 @@ void ConfigurationsBaseWidget::addConfigurationToFilesInFolder(QSharedPointer<Fo
void ConfigurationsBaseWidget::addConfigurationToFile(QSharedPointer<File> filePtr, const QString &copyFromConfig, const QString &targetConfigName)
{
- IConfiguration *configPtr = filePtr->fileConfiguration(copyFromConfig);
+ IConfiguration *configPtr = filePtr->configurationContainer()->configuration(copyFromConfig);
if (configPtr) {
IConfiguration *newConfig = configPtr->clone();
newConfig->setFullName(targetConfigName);
- m_newFilesConfigurations[filePtr] = newConfig;
+ m_newFilesConfigurations[filePtr].append(newConfig);
}
}
diff --git a/src/plugins/vcprojectmanager/widgets/configurationswidgets.h b/src/plugins/vcprojectmanager/widgets/configurationswidgets.h
index c842bd6af6..c53587b71a 100644
--- a/src/plugins/vcprojectmanager/widgets/configurationswidgets.h
+++ b/src/plugins/vcprojectmanager/widgets/configurationswidgets.h
@@ -79,7 +79,7 @@ protected:
QList<QString> m_removedConfigurations;
QMap<IConfiguration*, QString> m_renamedConfigurations; // <oldName, newName>
- QHash<QSharedPointer<File>, IConfiguration*> m_newFilesConfigurations;
+ QHash<QSharedPointer<File>, QList<IConfiguration*> > m_newFilesConfigurations;
};
class Configurations2003Widget : public ConfigurationsBaseWidget