diff options
author | Radovan Zivkovic <pivonroll@gmail.com> | 2013-09-17 00:24:18 +0200 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@digia.com> | 2014-03-11 19:54:57 +0100 |
commit | 1f5909153816892917d004433221c2d02794a801 (patch) | |
tree | 777122a851c11fc3cabc76d387e59c2c6f7254d4 | |
parent | 5c3f3c865b1ee9d8ad3720f871eceab3ea4f9ff1 (diff) | |
download | qt-creator-1f5909153816892917d004433221c2d02794a801.tar.gz |
Add file configuration when cloning an existing configuration.
Change-Id: I06de1320bcb957c03b6fa312bf6206424cedfbc1
Reviewed-by: hjk <hjk121@nokiamail.com>
Reviewed-by: Radovan Zivkovic <pivonroll@gmail.com>
4 files changed, 104 insertions, 0 deletions
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<Configuration::Ptr> 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<Configuration::Ptr> 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<QSharedPointer<File>, Configuration::Ptr> fileConfigIt(m_newFilesConfigurations); + + while (fileConfigIt.hasNext()) { + fileConfigIt.next(); + fileConfigIt.key()->addFileConfiguration(fileConfigIt.value()); + } + // save data for every configuration QList<ConfigurationBaseWidget *> 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<Filter::Ptr> filters = docFiles->filters(); + + foreach (Filter::Ptr filter, filters) + addConfigurationToFilesInFilter(filter, copyFromConfig, targetConfigName); + + QList<File::Ptr> files = docFiles->files(); + + foreach (File::Ptr 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 ©FromConfig, 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 ©FromConfig, 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(); + + foreach (File::Ptr file, files) + addConfigurationToFile(file, copyFromConfig, targetConfigName); +} + +void ConfigurationsBaseWidget::addConfigurationToFile(QSharedPointer<File> 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<Filter> filterPtr, const QString ©FromConfig, const QString &targetConfigName); + void addConfigurationToFilesInFolder(QSharedPointer<Folder> folderPtr, const QString ©FromConfig, const QString &targetConfigName); + void addConfigurationToFile(QSharedPointer<File> filePtr, const QString ©FromConfig, const QString &targetConfigName); Configurations *m_configs; VcProjectDocument *m_vcProjDoc; @@ -75,6 +82,8 @@ protected: QList<QSharedPointer<Configuration> > m_newConfigurations; QList<QString> m_removedConfigurations; QMap<Configuration::Ptr, QString> m_renamedConfigurations; // <oldName, newName> + + QHash<QSharedPointer<File>, Configuration::Ptr> m_newFilesConfigurations; }; class Configurations2003Widget : public ConfigurationsBaseWidget |