summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRadovan Zivkovic <pivonroll@gmail.com>2013-09-17 00:24:18 +0200
committerOswald Buddenhagen <oswald.buddenhagen@digia.com>2014-03-11 19:54:57 +0100
commit1f5909153816892917d004433221c2d02794a801 (patch)
tree777122a851c11fc3cabc76d387e59c2c6f7254d4
parent5c3f3c865b1ee9d8ad3720f871eceab3ea4f9ff1 (diff)
downloadqt-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>
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/file.cpp15
-rw-r--r--src/plugins/vcprojectmanager/vcprojectmodel/file.h2
-rw-r--r--src/plugins/vcprojectmanager/widgets/configurationswidgets.cpp78
-rw-r--r--src/plugins/vcprojectmanager/widgets/configurationswidgets.h9
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 &copyFromConfig, 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 &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();
+
+ foreach (File::Ptr file, files)
+ addConfigurationToFile(file, copyFromConfig, targetConfigName);
+}
+
+void ConfigurationsBaseWidget::addConfigurationToFile(QSharedPointer<File> filePtr, const QString &copyFromConfig, 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 &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);
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