forked from qt-creator/qt-creator
Fixed saving for file build configuration.
Change-Id: I5605936a0cc9d4e2f88a6cd962c1c7cfa44ef639 Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
This commit is contained in:
@@ -50,6 +50,7 @@ public:
|
||||
virtual void setAttribute(const QString &attributeName, const QString &attributeValue) = 0;
|
||||
virtual int getAttributeCount() const = 0;
|
||||
virtual void appendToXMLNode(QDomElement &elementNode) const = 0;
|
||||
virtual void copyFrom(const IAttributeContainer &container) = 0;
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
|
@@ -47,6 +47,7 @@ public:
|
||||
virtual IConfigurationBuildTools *configurationBuildTools() const = 0;
|
||||
virtual IDeploymentTools *deploymentTools() const = 0;
|
||||
virtual IDebuggerTools *debuggerTools() const = 0;
|
||||
virtual void copyFrom(const ITools &tools) = 0;
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
|
@@ -107,6 +107,8 @@ void File::processNode(const QDomNode &node)
|
||||
if (node.nodeType() == QDomNode::ElementNode)
|
||||
processNodeAttributes(node.toElement());
|
||||
|
||||
copyProjectConfigs();
|
||||
|
||||
if (node.hasChildNodes()) {
|
||||
QDomNode firstChild = node.firstChild();
|
||||
if (!firstChild.isNull()) {
|
||||
@@ -198,11 +200,12 @@ void File::processFileConfiguration(const QDomNode &fileConfigNode)
|
||||
IConfiguration *fileConfig = new FileBuildConfiguration(m_parentProjectDoc);
|
||||
fileConfig->processNode(fileConfigNode);
|
||||
|
||||
if (m_parentProjectDoc->configurations() && m_parentProjectDoc->configurations()->configurationContainer()) {
|
||||
IConfiguration *projConf = m_parentProjectDoc->configurations()->configurationContainer()->configuration(fileConfig->fullName());
|
||||
copyAllNonDefaultToolAtributes(fileConfig, projConf);
|
||||
}
|
||||
IConfiguration *projConfig = m_configurationContainer->configuration(fileConfig->fullName());
|
||||
|
||||
if (projConfig) {
|
||||
copyAllNonDefaultToolAtributes(fileConfig, projConfig);
|
||||
|
||||
m_configurationContainer->removeConfiguration(projConfig->fullName());
|
||||
m_configurationContainer->addConfiguration(fileConfig);
|
||||
|
||||
// process next sibling
|
||||
@@ -213,6 +216,9 @@ void File::processFileConfiguration(const QDomNode &fileConfigNode)
|
||||
else
|
||||
processFile(nextSibling);
|
||||
}
|
||||
} else {
|
||||
delete fileConfig;
|
||||
}
|
||||
}
|
||||
|
||||
void File::processFile(const QDomNode &fileNode)
|
||||
@@ -303,5 +309,43 @@ void File::copyAllNonDefaultToolAtributes(IToolSection *fileSec, IToolSection *p
|
||||
}
|
||||
}
|
||||
|
||||
void File::leaveOnlyCppTool(IConfiguration *config)
|
||||
{
|
||||
if (!config || !config->tools() || !config->tools()->configurationBuildTools())
|
||||
return;
|
||||
|
||||
int i = 0;
|
||||
while (config->tools()->configurationBuildTools()->toolCount() > 1)
|
||||
{
|
||||
IConfigurationBuildTool *tool = config->tools()->configurationBuildTools()->tool(i);
|
||||
|
||||
if (tool->toolDescription()->toolKey() != QLatin1String(ToolConstants::strVCCLCompilerTool)) {
|
||||
config->tools()->configurationBuildTools()->removeTool(tool);
|
||||
delete tool;
|
||||
}
|
||||
|
||||
else
|
||||
++i;
|
||||
}
|
||||
}
|
||||
|
||||
void File::copyProjectConfigs()
|
||||
{
|
||||
if (!m_parentProjectDoc || !m_parentProjectDoc->configurations() ||
|
||||
!m_parentProjectDoc->configurations()->configurationContainer())
|
||||
return;
|
||||
|
||||
ConfigurationContainer *configContainer = m_parentProjectDoc->configurations()->configurationContainer();
|
||||
for (int i = 0; i < configContainer->configurationCount(); ++i) {
|
||||
IConfiguration *config = configContainer->configuration(i);
|
||||
|
||||
if (config) {
|
||||
FileBuildConfiguration *newConfig = FileBuildConfiguration::createFromProjectConfig(static_cast<Configuration*>(config), m_parentProjectDoc);
|
||||
leaveOnlyCppTool(newConfig);
|
||||
m_configurationContainer->addConfiguration(newConfig);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace Internal
|
||||
} // namespace VcProjectManager
|
||||
|
@@ -72,6 +72,8 @@ private:
|
||||
void processNodeAttributes(const QDomElement &element);
|
||||
void copyAllNonDefaultToolAtributes(IConfiguration *fileConfig, IConfiguration *projConfig);
|
||||
void copyAllNonDefaultToolAtributes(IToolSection *fileSec, IToolSection *projSec);
|
||||
void leaveOnlyCppTool(IConfiguration *config);
|
||||
void copyProjectConfigs();
|
||||
|
||||
QString m_relativePath; // required
|
||||
QList<File *> m_files;
|
||||
|
@@ -79,6 +79,17 @@ FileBuildConfiguration &FileBuildConfiguration::operator =(const FileBuildConfig
|
||||
return *this;
|
||||
}
|
||||
|
||||
FileBuildConfiguration *FileBuildConfiguration::createFromProjectConfig(Configuration *config, IVisualStudioProject *parentProject)
|
||||
{
|
||||
FileBuildConfiguration *newFileConfig = new FileBuildConfiguration(parentProject);
|
||||
newFileConfig->attributeContainer()->copyFrom(*config->attributeContainer());
|
||||
// *(static_cast<GeneralAttributeContainer *>(newFileConfig->attributeContainer())) = *(static_cast<GeneralAttributeContainer *>(config->attributeContainer()));
|
||||
newFileConfig->setFullName(config->fullName());
|
||||
// *(static_cast<Tools *>(newFileConfig->tools())) = *(static_cast<Tools *>(config->tools()));
|
||||
newFileConfig->tools()->copyFrom(*config->tools());
|
||||
return newFileConfig;
|
||||
}
|
||||
|
||||
VcNodeWidget *FileBuildConfiguration::createSettingsWidget()
|
||||
{
|
||||
return new FileConfigurationSettingsWidget(this, m_parentProjectDoc);
|
||||
@@ -90,7 +101,6 @@ QDomNode FileBuildConfiguration::toXMLDomNode(QDomDocument &domXMLDocument) cons
|
||||
IConfigurations *configs = m_parentProjectDoc->configurations();
|
||||
|
||||
QDomElement configurationNode = domXMLDocument.createElement(m_nodeName);
|
||||
m_attributeContainer->appendToXMLNode(configurationNode);
|
||||
|
||||
if (configs) {
|
||||
ConfigurationContainer *configContainer = m_parentProjectDoc->configurations()->configurationContainer();
|
||||
@@ -160,6 +170,9 @@ void FileBuildConfiguration::toXMLNode(IConfiguration *projectConfig, QDomElemen
|
||||
{
|
||||
QTC_ASSERT(projectConfig, return);
|
||||
|
||||
writeAttributes(projectConfig, configurationNode);
|
||||
|
||||
// write tools
|
||||
ITools *projectTools = projectConfig->tools();
|
||||
|
||||
if (projectTools && projectTools->configurationBuildTools()) {
|
||||
@@ -169,13 +182,13 @@ void FileBuildConfiguration::toXMLNode(IConfiguration *projectConfig, QDomElemen
|
||||
IConfigurationBuildTool *projectTool = projectTools->configurationBuildTools()->tool(tool->toolDescription()->toolKey());
|
||||
|
||||
if (projectTool && projectTool->toolDescription()) {
|
||||
toXMLNode(projectTool, tool, configurationNode, domXMLDocument);
|
||||
writeTools(projectTool, tool, configurationNode, domXMLDocument);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void FileBuildConfiguration::toXMLNode(IConfigurationBuildTool *projectConfigTool, IConfigurationBuildTool *tool,
|
||||
void FileBuildConfiguration::writeTools(IConfigurationBuildTool *projectConfigTool, IConfigurationBuildTool *tool,
|
||||
QDomElement &configurationNode, QDomDocument &domXMLDocument) const
|
||||
{
|
||||
QTC_ASSERT(projectConfigTool && tool, return);
|
||||
@@ -186,27 +199,34 @@ void FileBuildConfiguration::toXMLNode(IConfigurationBuildTool *projectConfigToo
|
||||
bool isNodeCreated = false;
|
||||
QDomElement toolNode;
|
||||
|
||||
if (projSecContainer && toolSecContainer) {
|
||||
for (int i = 0; i < projSecContainer->sectionCount(); ++i) {
|
||||
IToolSection *projToolSec = projSecContainer->section(i);
|
||||
if (!toolSecContainer || !projSecContainer)
|
||||
return;
|
||||
|
||||
if (projToolSec) {
|
||||
IToolSection *toolSec = toolSecContainer->section(projToolSec->sectionDescription()->displayName());
|
||||
for (int i = 0; i < toolSecContainer->sectionCount(); ++i) {
|
||||
IToolSection *toolSec = toolSecContainer->section(i);
|
||||
|
||||
if (toolSec) {
|
||||
IToolAttributeContainer *projToolAttrContainer = projToolSec->attributeContainer();
|
||||
if (!toolSec)
|
||||
continue;
|
||||
IToolSection *projSec = projSecContainer->section(toolSec->sectionDescription()->displayName());
|
||||
|
||||
if (!projSec)
|
||||
continue;
|
||||
IToolAttributeContainer *toolAttrContainer = toolSec->attributeContainer();
|
||||
IToolAttributeContainer *projAttrContainer = projSec->attributeContainer();
|
||||
|
||||
for (int j = 0; j < projToolAttrContainer->toolAttributeCount(); ++j) {
|
||||
IToolAttribute *projToolAttr = projToolAttrContainer->toolAttribute(j);
|
||||
for (int j = 0; j < toolAttrContainer->toolAttributeCount(); ++j) {
|
||||
IToolAttribute *toolAttr = toolAttrContainer->toolAttribute(j);
|
||||
|
||||
if (projToolAttr && projToolAttr->descriptionDataItem()) {
|
||||
IToolAttribute *toolAttr = toolAttrContainer->toolAttribute(projToolAttr->descriptionDataItem()->key());
|
||||
if (!toolAttr || !toolAttr->descriptionDataItem())
|
||||
continue;
|
||||
IToolAttribute *projToolAttr = projAttrContainer->toolAttribute(toolAttr->descriptionDataItem()->key());
|
||||
|
||||
if (!projToolAttr || projToolAttr->value() == toolAttr->value())
|
||||
continue;
|
||||
|
||||
if (toolAttr && toolAttr->value() != projToolAttr->value()) {
|
||||
if (!isNodeCreated) {
|
||||
toolNode = domXMLDocument.createElement(QLatin1String("Tool"));
|
||||
toolNode.setAttribute(QLatin1String("Name"), projectConfigTool->toolDescription()->toolKey());
|
||||
toolNode.setAttribute(QLatin1String("Name"), tool->toolDescription()->toolKey());
|
||||
configurationNode.appendChild(toolNode);
|
||||
isNodeCreated = true;
|
||||
}
|
||||
@@ -215,10 +235,19 @@ void FileBuildConfiguration::toXMLNode(IConfigurationBuildTool *projectConfigToo
|
||||
toolAttr->value());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void FileBuildConfiguration::writeAttributes(IConfiguration *projectConfig, QDomElement &configurationNode) const
|
||||
{
|
||||
IAttributeContainer *projConfigAttrContainer = projectConfig->attributeContainer();
|
||||
|
||||
for (int i = 0; i < m_attributeContainer->getAttributeCount(); ++i) {
|
||||
QString attrName = m_attributeContainer->getAttributeName(i);
|
||||
if (projConfigAttrContainer) {
|
||||
if (projConfigAttrContainer->attributeValue(attrName) != m_attributeContainer->attributeValue(attrName))
|
||||
configurationNode.setAttribute(attrName, m_attributeContainer->attributeValue(attrName));
|
||||
} else
|
||||
configurationNode.setAttribute(attrName, m_attributeContainer->attributeValue(attrName));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -46,6 +46,8 @@ public:
|
||||
FileBuildConfiguration(const FileBuildConfiguration &fileBuildConfig);
|
||||
FileBuildConfiguration &operator =(const FileBuildConfiguration &fileBuildConfig);
|
||||
|
||||
static FileBuildConfiguration *createFromProjectConfig(Configuration *config, IVisualStudioProject *parentProject);
|
||||
|
||||
VcNodeWidget *createSettingsWidget();
|
||||
QDomNode toXMLDomNode(QDomDocument &domXMLDocument) const;
|
||||
IConfiguration *clone() const;
|
||||
@@ -55,8 +57,9 @@ protected:
|
||||
|
||||
private:
|
||||
void toXMLNode(IConfiguration *projectConfig, QDomElement &configurationNode, QDomDocument &domXMLDocument) const;
|
||||
void toXMLNode(IConfigurationBuildTool *projectConfigTool, IConfigurationBuildTool *tool,
|
||||
void writeTools(IConfigurationBuildTool *projectConfigTool, IConfigurationBuildTool *tool,
|
||||
QDomElement &configurationNode, QDomDocument &domXMLDocument) const;
|
||||
void writeAttributes(IConfiguration *projectConfig, QDomElement &configurationNode) const;
|
||||
|
||||
IVisualStudioProject *m_parentProjectDoc;
|
||||
};
|
||||
|
@@ -106,5 +106,11 @@ void GeneralAttributeContainer::appendToXMLNode(QDomElement &elementNode) const
|
||||
}
|
||||
}
|
||||
|
||||
void GeneralAttributeContainer::copyFrom(const IAttributeContainer &container)
|
||||
{
|
||||
const GeneralAttributeContainer &cont = static_cast<const GeneralAttributeContainer &>(container);
|
||||
*this = cont;
|
||||
}
|
||||
|
||||
} // namespace Internal
|
||||
} // namespace VcProjectManager
|
||||
|
@@ -51,6 +51,7 @@ public:
|
||||
QString getAttributeName(int index) const;
|
||||
int getAttributeCount() const;
|
||||
void appendToXMLNode(QDomElement &elementNode) const;
|
||||
void copyFrom(const IAttributeContainer &container);
|
||||
|
||||
private:
|
||||
QHash<QString, QString> m_anyAttribute;
|
||||
|
@@ -85,5 +85,11 @@ IDebuggerTools *Tools::debuggerTools() const
|
||||
return m_debuggerTools;
|
||||
}
|
||||
|
||||
void Tools::copyFrom(const ITools &tools)
|
||||
{
|
||||
const Tools &tls = static_cast<const Tools &>(tools);
|
||||
*this = tls;
|
||||
}
|
||||
|
||||
} // namespace Internal
|
||||
} // namespace VcProjectManager
|
||||
|
@@ -51,6 +51,7 @@ public:
|
||||
IConfigurationBuildTools *configurationBuildTools() const;
|
||||
IDeploymentTools *deploymentTools() const;
|
||||
IDebuggerTools *debuggerTools() const;
|
||||
void copyFrom(const ITools &tools);
|
||||
|
||||
private:
|
||||
ConfigurationBuildTools *m_configurationBuildTools;
|
||||
|
@@ -291,7 +291,7 @@ void FileConfigurationsEditWidget::readFileBuildConfigurations(IFile *file)
|
||||
if (file != m_file)
|
||||
configCont = new ConfigurationContainer(*(file->configurationContainer()));
|
||||
else {
|
||||
configCont = cloneFileConfigContainer(file);
|
||||
configCont = new ConfigurationContainer(*(file->configurationContainer()));
|
||||
connect(configCont, SIGNAL(configurationAdded(IConfiguration*)), this, SLOT(addConfigWidget(IConfiguration*)));
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user