From 61e5ce374c039fd0f2361072d4e456adf0abc97b Mon Sep 17 00:00:00 2001 From: dt <qtc-committer@nokia.com> Date: Wed, 14 Apr 2010 13:37:08 +0200 Subject: [PATCH] Make Q4ProjecConfigWidget more robust Task-Nr: QTCREATORBUG-1108 Task-Nr: TOOLS-339 --- .../qt4buildconfiguration.cpp | 8 +- src/plugins/qt4projectmanager/qt4nodes.cpp | 1 - .../qt4projectconfigwidget.cpp | 86 ++++++++++++++----- .../qt4projectconfigwidget.h | 3 + 4 files changed, 72 insertions(+), 26 deletions(-) diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp index a6c3083501c..c1e91a2cdd2 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp @@ -307,11 +307,12 @@ void Qt4BuildConfiguration::setQtVersion(QtVersion *version) return; m_qtVersionId = version->uniqueId(); + if (!version->possibleToolChainTypes().contains(ProjectExplorer::ToolChain::ToolChainType(m_toolChainType))) { QList<ToolChain::ToolChainType> candidates = qt4Target()->filterToolChainTypes(qtVersion()->possibleToolChainTypes()); if (candidates.isEmpty()) - m_toolChainType = -1; + m_toolChainType = ToolChain::INVALID; else m_toolChainType = candidates.first(); } @@ -323,9 +324,10 @@ void Qt4BuildConfiguration::setQtVersion(QtVersion *version) void Qt4BuildConfiguration::setToolChainType(ProjectExplorer::ToolChain::ToolChainType type) { - if (!qt4Target()->filterToolChainTypes(qtVersion()->possibleToolChainTypes()).contains(type) || - m_toolChainType == type) + if (!qt4Target()->filterToolChainTypes(qtVersion()->possibleToolChainTypes()).contains(type) + || m_toolChainType == type) return; + m_toolChainType = type; emit proFileEvaluateNeeded(this); diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp index d0c4c8ce010..5cc67a80085 100644 --- a/src/plugins/qt4projectmanager/qt4nodes.cpp +++ b/src/plugins/qt4projectmanager/qt4nodes.cpp @@ -1359,7 +1359,6 @@ QStringList Qt4ProFileNode::includePaths(ProFileReader *reader) const // except if those directories don't exist at the time of parsing // thus we add those directories manually (without checking for existance) paths << mocDirPath(reader) << uiDirPath(reader); - paths.removeDuplicates(); return paths; } diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp index 06b35815711..e4eb88e1dc4 100644 --- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp +++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp @@ -142,12 +142,23 @@ void Qt4ProjectConfigWidget::updateDetails() } } +void Qt4ProjectConfigWidget::updateShadowBuildUi() +{ + m_ui->shadowBuildCheckBox->setEnabled(m_buildConfiguration->qtVersion()->supportsShadowBuilds()); + m_ui->shadowBuildDirEdit->setEnabled(m_buildConfiguration->qtVersion()->supportsShadowBuilds()); +} + void Qt4ProjectConfigWidget::manageQtVersions() { Core::ICore *core = Core::ICore::instance(); core->showOptionsDialog(Constants::QT_SETTINGS_CATEGORY, Constants::QTVERSION_SETTINGS_PAGE_ID); } +void Qt4ProjectConfigWidget::updateInvalidQtVersion() +{ + m_ui->invalidQtWarningLabel->setVisible(!m_buildConfiguration->qtVersion()->isValid()); +} + QString Qt4ProjectConfigWidget::displayName() const { @@ -162,10 +173,14 @@ void Qt4ProjectConfigWidget::init(ProjectExplorer::BuildConfiguration *bc) qDebug() << "Qt4ProjectConfigWidget::init() for"<<bc->displayName(); if (m_buildConfiguration) { + disconnect(m_buildConfiguration, SIGNAL(buildDirectoryChanged()), + this, SLOT(buildDirectoryChanged())); disconnect(m_buildConfiguration, SIGNAL(qtVersionChanged()), this, SLOT(qtVersionChanged())); disconnect(m_buildConfiguration, SIGNAL(qmakeBuildConfigurationChanged()), this, SLOT(updateImportLabel())); + disconnect(m_buildConfiguration, SIGNAL(toolChainTypeChanged()), + this, SLOT(toolChainTypeChanged())); } m_buildConfiguration = static_cast<Qt4BuildConfiguration *>(bc); @@ -175,6 +190,8 @@ void Qt4ProjectConfigWidget::init(ProjectExplorer::BuildConfiguration *bc) this, SLOT(qtVersionChanged())); connect(m_buildConfiguration, SIGNAL(qmakeBuildConfigurationChanged()), this, SLOT(updateImportLabel())); + connect(m_buildConfiguration, SIGNAL(toolChainTypeChanged()), + this, SLOT(toolChainTypeChanged())); m_ui->nameLineEdit->setText(m_buildConfiguration->displayName()); @@ -196,9 +213,10 @@ void Qt4ProjectConfigWidget::init(ProjectExplorer::BuildConfiguration *bc) void Qt4ProjectConfigWidget::qtVersionChanged() { - m_ui->shadowBuildCheckBox->setEnabled(m_buildConfiguration->qtVersion()->supportsShadowBuilds()); - m_ui->shadowBuildDirEdit->setEnabled(m_buildConfiguration->qtVersion()->supportsShadowBuilds()); + if (m_ignoreChange) + return; + updateShadowBuildUi(); updateImportLabel(); updateToolChainCombo(); updateDetails(); @@ -214,19 +232,14 @@ void Qt4ProjectConfigWidget::qtVersionsChanged() if (!m_buildConfiguration) // not yet initialized return; - disconnect(m_ui->qtVersionComboBox, SIGNAL(currentIndexChanged(QString)), - this, SLOT(qtVersionSelected(QString))); - + m_ignoreChange = true; QtVersionManager *vm = QtVersionManager::instance(); m_ui->qtVersionComboBox->clear(); QtVersion * qtVersion = m_buildConfiguration->qtVersion(); const QList<QtVersion *> validVersions(vm->versionsForTargetId(m_buildConfiguration->target()->id())); - if (validVersions.isEmpty()) { - m_ui->invalidQtWarningLabel->setVisible(true); - } else { - m_ui->invalidQtWarningLabel->setVisible(false); + if (!validVersions.isEmpty()) { for (int i = 0; i < validVersions.size(); ++i) { m_ui->qtVersionComboBox->addItem(validVersions.at(i)->displayName(), validVersions.at(i)->uniqueId()); @@ -238,10 +251,13 @@ void Qt4ProjectConfigWidget::qtVersionsChanged() } m_ui->qtVersionComboBox->setEnabled(validVersions.count() > 1); } + m_ignoreChange = false; - // And connect again - connect(m_ui->qtVersionComboBox, SIGNAL(currentIndexChanged(QString)), - this, SLOT(qtVersionSelected(QString))); + updateInvalidQtVersion(); + updateToolChainCombo(); + updateShadowBuildUi(); + updateDetails(); + updateImportLabel(); } void Qt4ProjectConfigWidget::buildDirectoryChanged() @@ -412,35 +428,61 @@ void Qt4ProjectConfigWidget::importLabelClicked() void Qt4ProjectConfigWidget::qtVersionSelected(const QString &) { + if (m_ignoreChange) + return; //Qt Version int newQtVersionId = m_ui->qtVersionComboBox->itemData(m_ui->qtVersionComboBox->currentIndex()).toInt(); + QtVersionManager *vm = QtVersionManager::instance(); QtVersion *newQtVersion = vm->version(newQtVersionId); - bool isValid = newQtVersion->isValid(); - m_ui->invalidQtWarningLabel->setVisible(!isValid); - if (newQtVersion != m_buildConfiguration->qtVersion()) { - m_ignoreChange = true; - m_buildConfiguration->setQtVersion(newQtVersion); - m_ignoreChange = false; - updateToolChainCombo(); - } + + m_ignoreChange = true; + m_buildConfiguration->setQtVersion(newQtVersion); + m_ignoreChange = false; + + updateInvalidQtVersion(); + updateShadowBuildUi(); + updateToolChainCombo(); + updateImportLabel(); updateDetails(); } +void Qt4ProjectConfigWidget::toolChainTypeChanged() +{ + if (m_ignoreChange) + return; + for (int i=0; i < m_ui->toolChainComboBox->count(); ++i) { + ProjectExplorer::ToolChain::ToolChainType tt = + m_ui->toolChainComboBox->itemData(i, Qt::UserRole).value<ProjectExplorer::ToolChain::ToolChainType>(); + if (tt == m_buildConfiguration->toolChainType()) { + m_ignoreChange = true; + m_ui->toolChainComboBox->setCurrentIndex(i); + m_ignoreChange = false; + } + } +} + void Qt4ProjectConfigWidget::updateToolChainCombo() { m_ui->toolChainComboBox->clear(); - QList<ProjectExplorer::ToolChain::ToolChainType> toolchains(m_buildConfiguration->qtVersion()->possibleToolChainTypes()); + QList<ProjectExplorer::ToolChain::ToolChainType> toolchains = + m_buildConfiguration->qtVersion()->possibleToolChainTypes(); + toolchains = m_buildConfiguration->qt4Target()->filterToolChainTypes(toolchains); + foreach (ToolChain::ToolChainType toolchain, toolchains) m_ui->toolChainComboBox->addItem(ToolChain::toolChainName(toolchain), qVariantFromValue(toolchain)); m_ui->toolChainComboBox->setEnabled(toolchains.size() > 1); + + m_ignoreChange = true; m_ui->toolChainComboBox->setCurrentIndex(toolchains.indexOf(m_buildConfiguration->toolChainType())); - updateDetails(); + m_ignoreChange = false; } void Qt4ProjectConfigWidget::toolChainSelected(int index) { + if (m_ignoreChange) + return; ProjectExplorer::ToolChain::ToolChainType selectedToolChainType = m_ui->toolChainComboBox->itemData(index, Qt::UserRole).value<ProjectExplorer::ToolChain::ToolChainType>(); diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.h b/src/plugins/qt4projectmanager/qt4projectconfigwidget.h index 37a0560fc92..c524f5f577b 100644 --- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.h +++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.h @@ -76,10 +76,13 @@ private slots: void qtVersionsChanged(); void qtVersionChanged(); void buildDirectoryChanged(); + void toolChainTypeChanged(); void updateImportLabel(); private: void updateDetails(); void updateToolChainCombo(); + void updateShadowBuildUi(); + void updateInvalidQtVersion(); Ui::Qt4ProjectConfigWidget *m_ui; QAbstractButton *m_browseButton; Qt4BuildConfiguration *m_buildConfiguration; -- GitLab