From 1f5909153816892917d004433221c2d02794a801 Mon Sep 17 00:00:00 2001 From: Radovan Zivkovic Date: Tue, 17 Sep 2013 00:24:18 +0200 Subject: Add file configuration when cloning an existing configuration. Change-Id: I06de1320bcb957c03b6fa312bf6206424cedfbc1 Reviewed-by: hjk Reviewed-by: Radovan Zivkovic --- .../vcprojectmanager/vcprojectmodel/file.cpp | 15 +++++ src/plugins/vcprojectmanager/vcprojectmodel/file.h | 2 + .../widgets/configurationswidgets.cpp | 78 ++++++++++++++++++++++ .../widgets/configurationswidgets.h | 9 +++ 4 files changed, 104 insertions(+) diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/file.cpp b/src/plugins/vcprojectmanager/vcprojectmodel/file.cpp index 1ecd5283ec..89ab7364fa 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/file.cpp +++ b/src/plugins/vcprojectmanager/vcprojectmodel/file.cpp @@ -152,6 +152,21 @@ void File::removeFileConfiguration(Configuration::Ptr fileConfig) m_fileConfigurations.removeAll(fileConfig); } +Configuration::Ptr File::fileConfiguration(const QString &name) const +{ + foreach (const Configuration::Ptr configPtr, m_fileConfigurations) { + if (configPtr->name() == name) + return configPtr; + } + + return Configuration::Ptr(); +} + +QList File::fileConfigurations() const +{ + return m_fileConfigurations; +} + QString File::attributeValue(const QString &attributeName) const { return m_anyAttribute.value(attributeName); diff --git a/src/plugins/vcprojectmanager/vcprojectmodel/file.h b/src/plugins/vcprojectmanager/vcprojectmodel/file.h index 82a1b3380b..a812d29327 100644 --- a/src/plugins/vcprojectmanager/vcprojectmodel/file.h +++ b/src/plugins/vcprojectmanager/vcprojectmodel/file.h @@ -59,6 +59,8 @@ public: void removeFile(File::Ptr file); void addFileConfiguration(Configuration::Ptr fileConfig); void removeFileConfiguration(Configuration::Ptr fileConfig); + Configuration::Ptr fileConfiguration(const QString &name) const; + QList fileConfigurations() const; QString attributeValue(const QString &attributeName) const; void setAttribute(const QString &attributeName, const QString &attributeValue); diff --git a/src/plugins/vcprojectmanager/widgets/configurationswidgets.cpp b/src/plugins/vcprojectmanager/widgets/configurationswidgets.cpp index 82bb86b7f7..ec19339b2c 100644 --- a/src/plugins/vcprojectmanager/widgets/configurationswidgets.cpp +++ b/src/plugins/vcprojectmanager/widgets/configurationswidgets.cpp @@ -39,6 +39,8 @@ #include "../vcprojectmodel/tools/toolattributes/tooldescription.h" #include "../vcprojectmodel/tools/toolattributes/tooldescriptiondatamanager.h" #include "configurationwidgets.h" +#include "../vcprojectmodel/files.h" +#include "../vcprojectmodel/file.h" namespace VcProjectManager { namespace Internal { @@ -92,6 +94,13 @@ void ConfigurationsBaseWidget::saveData() foreach (const Configuration::Ptr &newConfig, m_newConfigurations) m_configs->appendConfiguration(newConfig); + QHashIterator, Configuration::Ptr> fileConfigIt(m_newFilesConfigurations); + + while (fileConfigIt.hasNext()) { + fileConfigIt.next(); + fileConfigIt.key()->addFileConfiguration(fileConfigIt.value()); + } + // save data for every configuration QList configWidgets = m_configsWidget->configWidgets(); foreach (ConfigurationBaseWidget *configWidget, configWidgets) { @@ -147,6 +156,8 @@ void ConfigurationsBaseWidget::onAddNewConfig(QString newConfigName, QString cop m_newConfigurations.append(newConfig); addConfiguration(newConfig.data()); } + + addConfigurationToFiles(copyFrom, newConfigName + QLatin1Char('|') + platform->name()); } } } @@ -283,6 +294,73 @@ Configuration::Ptr ConfigurationsBaseWidget::configInNewConfigurations(const QSt return Configuration::Ptr(); } +void ConfigurationsBaseWidget::addConfigurationToFiles(const QString ©FromConfig, const QString &targetConfigName) +{ + Files::Ptr docFiles = m_vcProjDoc->files(); + if (docFiles) { + QList filters = docFiles->filters(); + + foreach (Filter::Ptr filter, filters) + addConfigurationToFilesInFilter(filter, copyFromConfig, targetConfigName); + + QList files = docFiles->files(); + + foreach (File::Ptr file, files) + addConfigurationToFile(file, copyFromConfig, targetConfigName); + + Files2005::Ptr docFiles2005 = docFiles.dynamicCast(); + + if (docFiles2005) { + QList folders = docFiles2005->folders(); + + foreach (Folder::Ptr folder, folders) + addConfigurationToFilesInFolder(folder, copyFromConfig, targetConfigName); + } + } +} + +void ConfigurationsBaseWidget::addConfigurationToFilesInFilter(QSharedPointer filterPtr, const QString ©FromConfig, const QString &targetConfigName) +{ + QList filters = filterPtr->filters(); + + foreach (Filter::Ptr filter, filters) + addConfigurationToFilesInFilter(filter, copyFromConfig, targetConfigName); + + QList files = filterPtr->files(); + + foreach (File::Ptr file, files) + addConfigurationToFile(file, copyFromConfig, targetConfigName); +} + +void ConfigurationsBaseWidget::addConfigurationToFilesInFolder(QSharedPointer folderPtr, const QString ©FromConfig, const QString &targetConfigName) +{ + QList filters = folderPtr->filters(); + + foreach (Filter::Ptr filter, filters) + addConfigurationToFilesInFilter(filter, copyFromConfig, targetConfigName); + + QList folders = folderPtr->folders(); + + foreach (Folder::Ptr folder, folders) + addConfigurationToFilesInFolder(folder, copyFromConfig, targetConfigName); + + QList files = folderPtr->files(); + + foreach (File::Ptr file, files) + addConfigurationToFile(file, copyFromConfig, targetConfigName); +} + +void ConfigurationsBaseWidget::addConfigurationToFile(QSharedPointer filePtr, const QString ©FromConfig, const QString &targetConfigName) +{ + Configuration::Ptr configPtr = filePtr->fileConfiguration(copyFromConfig); + + if (configPtr) { + Configuration::Ptr newConfig = configPtr->clone(); + newConfig->setName(targetConfigName); + m_newFilesConfigurations[filePtr] = newConfig; + } +} + Configurations2003Widget::Configurations2003Widget(Configurations *configs, VcProjectDocument *vcProjDoc) : ConfigurationsBaseWidget(configs, vcProjDoc) { diff --git a/src/plugins/vcprojectmanager/widgets/configurationswidgets.h b/src/plugins/vcprojectmanager/widgets/configurationswidgets.h index c3ca2d5f17..e259f7c6bf 100644 --- a/src/plugins/vcprojectmanager/widgets/configurationswidgets.h +++ b/src/plugins/vcprojectmanager/widgets/configurationswidgets.h @@ -43,6 +43,9 @@ class Configurations; class Configuration; class VcProjectDocument; class ConfigurationsWidget; +class Filter; +class Folder; +class File; class ConfigurationsBaseWidget : public VcNodeWidget { @@ -67,6 +70,10 @@ protected: void removeConfiguration(Configuration *config); Configuration::Ptr createConfiguration(const QString &configNameWithPlatform) const; Configuration::Ptr configInNewConfigurations(const QString &configNameWithPlatform) const; + void addConfigurationToFiles(const QString ©FromConfig, const QString &targetConfigName); + void addConfigurationToFilesInFilter(QSharedPointer filterPtr, const QString ©FromConfig, const QString &targetConfigName); + void addConfigurationToFilesInFolder(QSharedPointer folderPtr, const QString ©FromConfig, const QString &targetConfigName); + void addConfigurationToFile(QSharedPointer filePtr, const QString ©FromConfig, const QString &targetConfigName); Configurations *m_configs; VcProjectDocument *m_vcProjDoc; @@ -75,6 +82,8 @@ protected: QList > m_newConfigurations; QList m_removedConfigurations; QMap m_renamedConfigurations; // + + QHash, Configuration::Ptr> m_newFilesConfigurations; }; class Configurations2003Widget : public ConfigurationsBaseWidget -- cgit v1.2.1