diff --git a/src/plugins/projectexplorer/toolchain.h b/src/plugins/projectexplorer/toolchain.h index b2f31dbbbcbfc7ed3a0d8a23b5272f3be5cef20a..b347a69d0c86cde666b40bacf2c0a2155badd4ff 100644 --- a/src/plugins/projectexplorer/toolchain.h +++ b/src/plugins/projectexplorer/toolchain.h @@ -181,4 +181,6 @@ private: } } +Q_DECLARE_METATYPE(ProjectExplorer::ToolChain::ToolChainType); + #endif // TOOLCHAIN_H diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index e583d3ab6374e8ab1d60deb69c75626178b08761..48d4fec938a4f6982f9e960140f705d3d4419e7c 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -288,10 +288,12 @@ void Qt4Project::restoreSettingsImpl(PersistentSettingsReader &settingsReader) addDefaultBuild(); - // Ensure that the qt version in each build configuration is valid + // Ensure that the qt version and tool chain in each build configuration is valid // or if not, is reset to the default - foreach (const QString &bc, buildConfigurations()) + foreach (const QString &bc, buildConfigurations()) { qtVersionId(bc); + toolChainType(bc); + } m_rootProjectNode = new Qt4ProFileNode(this, m_fileInfo->fileName(), this); m_rootProjectNode->registerWatcher(m_nodesWatcher); @@ -377,7 +379,7 @@ void Qt4Project::scheduleUpdateCodeModel(Qt4ProjectManager::Internal::Qt4ProFile ProjectExplorer::ToolChain *Qt4Project::toolChain(const QString &buildConfiguration) const { - return qtVersion(buildConfiguration)->toolChain(qtVersion(buildConfiguration)->defaultToolchainType()); + return qtVersion(buildConfiguration)->toolChain(toolChainType(buildConfiguration)); } QString Qt4Project::makeCommand(const QString &buildConfiguration) const @@ -817,6 +819,22 @@ void Qt4Project::setQtVersion(const QString &buildConfiguration, int id) setValue(buildConfiguration, "QtVersionId", id); } +void Qt4Project::setToolChainType(const QString &buildConfiguration, ProjectExplorer::ToolChain::ToolChainType type) +{ + setValue(buildConfiguration, "ToolChain", (int)type); +} + +ProjectExplorer::ToolChain::ToolChainType Qt4Project::toolChainType(const QString &buildConfiguration) const +{ + ProjectExplorer::ToolChain::ToolChainType type = + (ProjectExplorer::ToolChain::ToolChainType)value(buildConfiguration, "ToolChain").toInt(); + const QtVersion *version = qtVersion(buildConfiguration); + if (!version->possibleToolChainTypes().contains(type)) // use default tool chain + type = version->defaultToolchainType(); + const_cast<Qt4Project *>(this)->setToolChainType(buildConfiguration, type); + return type; +} + BuildStepConfigWidget *Qt4Project::createConfigWidget() { return new Qt4ProjectConfigWidget(this); diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h index 2b5765412d83854447e819d667ae7979ea6e26fb..1c06a0794dcf5ac75d1374cd88e3dc726d4dfe50 100644 --- a/src/plugins/qt4projectmanager/qt4project.h +++ b/src/plugins/qt4projectmanager/qt4project.h @@ -163,6 +163,8 @@ public: // qtVersion is in general the better method to use QString qtVersionName(const QString &buildConfiguration) const; ProjectExplorer::ToolChain *toolChain(const QString &buildConfiguration) const; + void setToolChainType(const QString &buildConfiguration, ProjectExplorer::ToolChain::ToolChainType type); + ProjectExplorer::ToolChain::ToolChainType toolChainType(const QString &buildConfiguration) const; ProjectExplorer::BuildStepConfigWidget *createConfigWidget(); QList<ProjectExplorer::BuildStepConfigWidget*> subConfigWidgets(); diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp index 24f57dcb4acda352c390a5782430b2a82bbc0094..2fa595dd3db17c7324205c8205f5cc6af89b6495 100644 --- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp +++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp @@ -75,6 +75,9 @@ Qt4ProjectConfigWidget::Qt4ProjectConfigWidget(Qt4Project *project) connect(m_ui->qtVersionComboBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(qtVersionComboBoxCurrentIndexChanged(QString))); + connect(m_ui->toolChainComboBox, SIGNAL(activated(int)), + this, SLOT(selectToolChain(int))); + connect(m_ui->importLabel, SIGNAL(linkActivated(QString)), this, SLOT(importLabelClicked())); @@ -120,6 +123,7 @@ void Qt4ProjectConfigWidget::init(const QString &buildConfiguration) m_ui->shadowBuildDirEdit->setEnabled(shadowBuild); m_ui->shadowBuildDirEdit->setPath(m_pro->buildDirectory(buildConfiguration)); updateImportLabel(); + updateToolChainCombo(); } void Qt4ProjectConfigWidget::changeConfigName(const QString &newName) @@ -282,29 +286,38 @@ void Qt4ProjectConfigWidget::updateToolChainCombo() foreach (ProjectExplorer::ToolChain::ToolChainType toolchain, toolchains) { switch (toolchain) { case ProjectExplorer::ToolChain::GCC: - m_ui->toolChainComboBox->addItem(tr("gcc"), ProjectExplorer::ToolChain::GCC); + m_ui->toolChainComboBox->addItem(tr("gcc"), qVariantFromValue(ProjectExplorer::ToolChain::GCC)); break; case ProjectExplorer::ToolChain::LinuxICC: - m_ui->toolChainComboBox->addItem(tr("icc"), ProjectExplorer::ToolChain::LinuxICC); + m_ui->toolChainComboBox->addItem(tr("icc"), qVariantFromValue(ProjectExplorer::ToolChain::LinuxICC)); break; case ProjectExplorer::ToolChain::MinGW: - m_ui->toolChainComboBox->addItem(tr("mingw"), ProjectExplorer::ToolChain::MinGW); + m_ui->toolChainComboBox->addItem(tr("mingw"), qVariantFromValue(ProjectExplorer::ToolChain::MinGW)); break; case ProjectExplorer::ToolChain::MSVC: - m_ui->toolChainComboBox->addItem(tr("msvc"), ProjectExplorer::ToolChain::MSVC); + m_ui->toolChainComboBox->addItem(tr("msvc"), qVariantFromValue(ProjectExplorer::ToolChain::MSVC)); break; case ProjectExplorer::ToolChain::WINCE: - m_ui->toolChainComboBox->addItem(tr("wince"), ProjectExplorer::ToolChain::WINCE); + m_ui->toolChainComboBox->addItem(tr("wince"), qVariantFromValue(ProjectExplorer::ToolChain::WINCE)); break; #ifdef QTCREATOR_WITH_S60 case ProjectExplorer::ToolChain::WINSCW: - m_ui->toolChainComboBox->addItem(tr("winscw"), ProjectExplorer::ToolChain::WINSCW); + m_ui->toolChainComboBox->addItem(tr("winscw"), qVariantFromValue(ProjectExplorer::ToolChain::WINSCW)); break; case ProjectExplorer::ToolChain::GCCE: - m_ui->toolChainComboBox->addItem(tr("gcce"), ProjectExplorer::ToolChain::GCCE); + m_ui->toolChainComboBox->addItem(tr("gcce"), qVariantFromValue(ProjectExplorer::ToolChain::GCCE)); break; #endif } } m_ui->toolChainComboBox->setEnabled(toolchains.size() > 1); + selectToolChain(toolchains.indexOf(m_pro->toolChainType(m_buildConfiguration))); +} + +void Qt4ProjectConfigWidget::selectToolChain(int index) +{ + m_pro->setToolChainType(m_buildConfiguration, m_ui->toolChainComboBox->itemData(index, + Qt::UserRole).value<ProjectExplorer::ToolChain::ToolChainType>()); + if (m_ui->toolChainComboBox->currentIndex() != index) + m_ui->toolChainComboBox->setCurrentIndex(index); } diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.h b/src/plugins/qt4projectmanager/qt4projectconfigwidget.h index 2201d3f08ec8189422f00f17dc6021f00219b596..c9864049418bc6ebdcd5b79661c92396800c93fa 100644 --- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.h +++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.h @@ -61,6 +61,7 @@ private slots: void importLabelClicked(); void qtVersionComboBoxCurrentIndexChanged(const QString &); void manageQtVersions(); + void selectToolChain(int index); private: void updateToolChainCombo();