Make Q4ProjecConfigWidget more robust

Task-Nr: QTCREATORBUG-1108
Task-Nr: TOOLS-339
This commit is contained in:
dt
2010-04-14 13:37:08 +02:00
parent def1b610da
commit 61e5ce374c
4 changed files with 72 additions and 26 deletions

View File

@@ -307,11 +307,12 @@ void Qt4BuildConfiguration::setQtVersion(QtVersion *version)
return; return;
m_qtVersionId = version->uniqueId(); m_qtVersionId = version->uniqueId();
if (!version->possibleToolChainTypes().contains(ProjectExplorer::ToolChain::ToolChainType(m_toolChainType))) { if (!version->possibleToolChainTypes().contains(ProjectExplorer::ToolChain::ToolChainType(m_toolChainType))) {
QList<ToolChain::ToolChainType> candidates = QList<ToolChain::ToolChainType> candidates =
qt4Target()->filterToolChainTypes(qtVersion()->possibleToolChainTypes()); qt4Target()->filterToolChainTypes(qtVersion()->possibleToolChainTypes());
if (candidates.isEmpty()) if (candidates.isEmpty())
m_toolChainType = -1; m_toolChainType = ToolChain::INVALID;
else else
m_toolChainType = candidates.first(); m_toolChainType = candidates.first();
} }
@@ -323,9 +324,10 @@ void Qt4BuildConfiguration::setQtVersion(QtVersion *version)
void Qt4BuildConfiguration::setToolChainType(ProjectExplorer::ToolChain::ToolChainType type) void Qt4BuildConfiguration::setToolChainType(ProjectExplorer::ToolChain::ToolChainType type)
{ {
if (!qt4Target()->filterToolChainTypes(qtVersion()->possibleToolChainTypes()).contains(type) || if (!qt4Target()->filterToolChainTypes(qtVersion()->possibleToolChainTypes()).contains(type)
m_toolChainType == type) || m_toolChainType == type)
return; return;
m_toolChainType = type; m_toolChainType = type;
emit proFileEvaluateNeeded(this); emit proFileEvaluateNeeded(this);

View File

@@ -1359,7 +1359,6 @@ QStringList Qt4ProFileNode::includePaths(ProFileReader *reader) const
// except if those directories don't exist at the time of parsing // except if those directories don't exist at the time of parsing
// thus we add those directories manually (without checking for existance) // thus we add those directories manually (without checking for existance)
paths << mocDirPath(reader) << uiDirPath(reader); paths << mocDirPath(reader) << uiDirPath(reader);
paths.removeDuplicates(); paths.removeDuplicates();
return paths; return paths;
} }

View File

@@ -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() void Qt4ProjectConfigWidget::manageQtVersions()
{ {
Core::ICore *core = Core::ICore::instance(); Core::ICore *core = Core::ICore::instance();
core->showOptionsDialog(Constants::QT_SETTINGS_CATEGORY, Constants::QTVERSION_SETTINGS_PAGE_ID); 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 QString Qt4ProjectConfigWidget::displayName() const
{ {
@@ -162,10 +173,14 @@ void Qt4ProjectConfigWidget::init(ProjectExplorer::BuildConfiguration *bc)
qDebug() << "Qt4ProjectConfigWidget::init() for"<<bc->displayName(); qDebug() << "Qt4ProjectConfigWidget::init() for"<<bc->displayName();
if (m_buildConfiguration) { if (m_buildConfiguration) {
disconnect(m_buildConfiguration, SIGNAL(buildDirectoryChanged()),
this, SLOT(buildDirectoryChanged()));
disconnect(m_buildConfiguration, SIGNAL(qtVersionChanged()), disconnect(m_buildConfiguration, SIGNAL(qtVersionChanged()),
this, SLOT(qtVersionChanged())); this, SLOT(qtVersionChanged()));
disconnect(m_buildConfiguration, SIGNAL(qmakeBuildConfigurationChanged()), disconnect(m_buildConfiguration, SIGNAL(qmakeBuildConfigurationChanged()),
this, SLOT(updateImportLabel())); this, SLOT(updateImportLabel()));
disconnect(m_buildConfiguration, SIGNAL(toolChainTypeChanged()),
this, SLOT(toolChainTypeChanged()));
} }
m_buildConfiguration = static_cast<Qt4BuildConfiguration *>(bc); m_buildConfiguration = static_cast<Qt4BuildConfiguration *>(bc);
@@ -175,6 +190,8 @@ void Qt4ProjectConfigWidget::init(ProjectExplorer::BuildConfiguration *bc)
this, SLOT(qtVersionChanged())); this, SLOT(qtVersionChanged()));
connect(m_buildConfiguration, SIGNAL(qmakeBuildConfigurationChanged()), connect(m_buildConfiguration, SIGNAL(qmakeBuildConfigurationChanged()),
this, SLOT(updateImportLabel())); this, SLOT(updateImportLabel()));
connect(m_buildConfiguration, SIGNAL(toolChainTypeChanged()),
this, SLOT(toolChainTypeChanged()));
m_ui->nameLineEdit->setText(m_buildConfiguration->displayName()); m_ui->nameLineEdit->setText(m_buildConfiguration->displayName());
@@ -196,9 +213,10 @@ void Qt4ProjectConfigWidget::init(ProjectExplorer::BuildConfiguration *bc)
void Qt4ProjectConfigWidget::qtVersionChanged() void Qt4ProjectConfigWidget::qtVersionChanged()
{ {
m_ui->shadowBuildCheckBox->setEnabled(m_buildConfiguration->qtVersion()->supportsShadowBuilds()); if (m_ignoreChange)
m_ui->shadowBuildDirEdit->setEnabled(m_buildConfiguration->qtVersion()->supportsShadowBuilds()); return;
updateShadowBuildUi();
updateImportLabel(); updateImportLabel();
updateToolChainCombo(); updateToolChainCombo();
updateDetails(); updateDetails();
@@ -214,19 +232,14 @@ void Qt4ProjectConfigWidget::qtVersionsChanged()
if (!m_buildConfiguration) // not yet initialized if (!m_buildConfiguration) // not yet initialized
return; return;
disconnect(m_ui->qtVersionComboBox, SIGNAL(currentIndexChanged(QString)), m_ignoreChange = true;
this, SLOT(qtVersionSelected(QString)));
QtVersionManager *vm = QtVersionManager::instance(); QtVersionManager *vm = QtVersionManager::instance();
m_ui->qtVersionComboBox->clear(); m_ui->qtVersionComboBox->clear();
QtVersion * qtVersion = m_buildConfiguration->qtVersion(); QtVersion * qtVersion = m_buildConfiguration->qtVersion();
const QList<QtVersion *> validVersions(vm->versionsForTargetId(m_buildConfiguration->target()->id())); const QList<QtVersion *> validVersions(vm->versionsForTargetId(m_buildConfiguration->target()->id()));
if (validVersions.isEmpty()) { if (!validVersions.isEmpty()) {
m_ui->invalidQtWarningLabel->setVisible(true);
} else {
m_ui->invalidQtWarningLabel->setVisible(false);
for (int i = 0; i < validVersions.size(); ++i) { for (int i = 0; i < validVersions.size(); ++i) {
m_ui->qtVersionComboBox->addItem(validVersions.at(i)->displayName(), m_ui->qtVersionComboBox->addItem(validVersions.at(i)->displayName(),
validVersions.at(i)->uniqueId()); validVersions.at(i)->uniqueId());
@@ -238,10 +251,13 @@ void Qt4ProjectConfigWidget::qtVersionsChanged()
} }
m_ui->qtVersionComboBox->setEnabled(validVersions.count() > 1); m_ui->qtVersionComboBox->setEnabled(validVersions.count() > 1);
} }
m_ignoreChange = false;
// And connect again updateInvalidQtVersion();
connect(m_ui->qtVersionComboBox, SIGNAL(currentIndexChanged(QString)), updateToolChainCombo();
this, SLOT(qtVersionSelected(QString))); updateShadowBuildUi();
updateDetails();
updateImportLabel();
} }
void Qt4ProjectConfigWidget::buildDirectoryChanged() void Qt4ProjectConfigWidget::buildDirectoryChanged()
@@ -412,35 +428,61 @@ void Qt4ProjectConfigWidget::importLabelClicked()
void Qt4ProjectConfigWidget::qtVersionSelected(const QString &) void Qt4ProjectConfigWidget::qtVersionSelected(const QString &)
{ {
if (m_ignoreChange)
return;
//Qt Version //Qt Version
int newQtVersionId = m_ui->qtVersionComboBox->itemData(m_ui->qtVersionComboBox->currentIndex()).toInt(); int newQtVersionId = m_ui->qtVersionComboBox->itemData(m_ui->qtVersionComboBox->currentIndex()).toInt();
QtVersionManager *vm = QtVersionManager::instance(); QtVersionManager *vm = QtVersionManager::instance();
QtVersion *newQtVersion = vm->version(newQtVersionId); QtVersion *newQtVersion = vm->version(newQtVersionId);
bool isValid = newQtVersion->isValid();
m_ui->invalidQtWarningLabel->setVisible(!isValid); m_ignoreChange = true;
if (newQtVersion != m_buildConfiguration->qtVersion()) { m_buildConfiguration->setQtVersion(newQtVersion);
m_ignoreChange = true; m_ignoreChange = false;
m_buildConfiguration->setQtVersion(newQtVersion);
m_ignoreChange = false; updateInvalidQtVersion();
updateToolChainCombo(); updateShadowBuildUi();
} updateToolChainCombo();
updateImportLabel();
updateDetails(); 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() void Qt4ProjectConfigWidget::updateToolChainCombo()
{ {
m_ui->toolChainComboBox->clear(); 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); toolchains = m_buildConfiguration->qt4Target()->filterToolChainTypes(toolchains);
foreach (ToolChain::ToolChainType toolchain, toolchains) foreach (ToolChain::ToolChainType toolchain, toolchains)
m_ui->toolChainComboBox->addItem(ToolChain::toolChainName(toolchain), qVariantFromValue(toolchain)); m_ui->toolChainComboBox->addItem(ToolChain::toolChainName(toolchain), qVariantFromValue(toolchain));
m_ui->toolChainComboBox->setEnabled(toolchains.size() > 1); m_ui->toolChainComboBox->setEnabled(toolchains.size() > 1);
m_ignoreChange = true;
m_ui->toolChainComboBox->setCurrentIndex(toolchains.indexOf(m_buildConfiguration->toolChainType())); m_ui->toolChainComboBox->setCurrentIndex(toolchains.indexOf(m_buildConfiguration->toolChainType()));
updateDetails(); m_ignoreChange = false;
} }
void Qt4ProjectConfigWidget::toolChainSelected(int index) void Qt4ProjectConfigWidget::toolChainSelected(int index)
{ {
if (m_ignoreChange)
return;
ProjectExplorer::ToolChain::ToolChainType selectedToolChainType = ProjectExplorer::ToolChain::ToolChainType selectedToolChainType =
m_ui->toolChainComboBox->itemData(index, m_ui->toolChainComboBox->itemData(index,
Qt::UserRole).value<ProjectExplorer::ToolChain::ToolChainType>(); Qt::UserRole).value<ProjectExplorer::ToolChain::ToolChainType>();

View File

@@ -76,10 +76,13 @@ private slots:
void qtVersionsChanged(); void qtVersionsChanged();
void qtVersionChanged(); void qtVersionChanged();
void buildDirectoryChanged(); void buildDirectoryChanged();
void toolChainTypeChanged();
void updateImportLabel(); void updateImportLabel();
private: private:
void updateDetails(); void updateDetails();
void updateToolChainCombo(); void updateToolChainCombo();
void updateShadowBuildUi();
void updateInvalidQtVersion();
Ui::Qt4ProjectConfigWidget *m_ui; Ui::Qt4ProjectConfigWidget *m_ui;
QAbstractButton *m_browseButton; QAbstractButton *m_browseButton;
Qt4BuildConfiguration *m_buildConfiguration; Qt4BuildConfiguration *m_buildConfiguration;