diff options
Diffstat (limited to 'src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp')
-rw-r--r-- | src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp | 130 |
1 files changed, 76 insertions, 54 deletions
diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp index 13ac7cb6d6c..ac42bec16c7 100644 --- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp +++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp @@ -51,10 +51,12 @@ bool debug = false; using namespace Qt4ProjectManager; using namespace Qt4ProjectManager::Internal; +using ProjectExplorer::ToolChain; Qt4ProjectConfigWidget::Qt4ProjectConfigWidget(Qt4Project *project) : BuildConfigWidget(), - m_buildConfiguration(0) + m_buildConfiguration(0), + m_ignoreChange(false) { Q_UNUSED(project); QVBoxLayout *vbox = new QVBoxLayout(this); @@ -75,22 +77,22 @@ Qt4ProjectConfigWidget::Qt4ProjectConfigWidget(Qt4Project *project) m_ui->invalidQtWarningLabel->setVisible(false); connect(m_ui->nameLineEdit, SIGNAL(textEdited(QString)), - this, SLOT(changeConfigName(QString))); + this, SLOT(configNameEdited(QString))); connect(m_ui->shadowBuildCheckBox, SIGNAL(clicked(bool)), - this, SLOT(shadowBuildCheckBoxClicked(bool))); + this, SLOT(shadowBuildClicked(bool))); connect(m_ui->shadowBuildDirEdit, SIGNAL(beforeBrowsing()), this, SLOT(onBeforeBeforeShadowBuildDirBrowsed())); connect(m_ui->shadowBuildDirEdit, SIGNAL(changed(QString)), - this, SLOT(shadowBuildLineEditTextChanged())); + this, SLOT(shadowBuildEdited())); connect(m_ui->qtVersionComboBox, SIGNAL(currentIndexChanged(QString)), - this, SLOT(qtVersionComboBoxCurrentIndexChanged(QString))); + this, SLOT(qtVersionSelected(QString))); connect(m_ui->toolChainComboBox, SIGNAL(activated(int)), - this, SLOT(selectToolChain(int))); + this, SLOT(toolChainSelected(int))); connect(m_ui->importLabel, SIGNAL(linkActivated(QString)), this, SLOT(importLabelClicked())); @@ -98,12 +100,10 @@ Qt4ProjectConfigWidget::Qt4ProjectConfigWidget(Qt4Project *project) connect(m_ui->manageQtVersionPushButtons, SIGNAL(clicked()), this, SLOT(manageQtVersions())); - QtVersionManager *vm = QtVersionManager::instance(); - connect(vm, SIGNAL(qtVersionsChanged()), - this, SLOT(setupQtVersionsComboBox())); - connect(vm, SIGNAL(qtVersionsChanged()), - this, SLOT(updateDetails())); + QtVersionManager *vm = QtVersionManager::instance(); + connect(vm, SIGNAL(qtVersionsChanged(QList<int>)), + this, SLOT(qtVersionsChanged())); } Qt4ProjectConfigWidget::~Qt4ProjectConfigWidget() @@ -148,10 +148,23 @@ void Qt4ProjectConfigWidget::init(ProjectExplorer::BuildConfiguration *bc) if (debug) 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())); + } + m_buildConfiguration = static_cast<Qt4BuildConfiguration *>(bc); + + connect(m_buildConfiguration, SIGNAL(buildDirectoryChanged()), + this, SLOT(buildDirectoryChanged())); + connect(m_buildConfiguration, SIGNAL(qtVersionChanged()), + this, SLOT(qtVersionChanged())); + m_ui->nameLineEdit->setText(m_buildConfiguration->displayName()); - setupQtVersionsComboBox(); + qtVersionsChanged(); bool shadowBuild = m_buildConfiguration->value("useShadowBuild").toBool(); m_ui->shadowBuildCheckBox->setChecked(shadowBuild); @@ -163,18 +176,25 @@ void Qt4ProjectConfigWidget::init(ProjectExplorer::BuildConfiguration *bc) updateDetails(); } -void Qt4ProjectConfigWidget::changeConfigName(const QString &newName) +void Qt4ProjectConfigWidget::qtVersionChanged() +{ + updateImportLabel(); + updateToolChainCombo(); + updateDetails(); +} + +void Qt4ProjectConfigWidget::configNameEdited(const QString &newName) { m_buildConfiguration->setDisplayName(newName); } -void Qt4ProjectConfigWidget::setupQtVersionsComboBox() +void Qt4ProjectConfigWidget::qtVersionsChanged() { if (!m_buildConfiguration) // not yet initialized return; disconnect(m_ui->qtVersionComboBox, SIGNAL(currentIndexChanged(QString)), - this, SLOT(qtVersionComboBoxCurrentIndexChanged(QString))); + this, SLOT(qtVersionSelected(QString))); QtVersionManager *vm = QtVersionManager::instance(); @@ -200,7 +220,14 @@ void Qt4ProjectConfigWidget::setupQtVersionsComboBox() // And connect again connect(m_ui->qtVersionComboBox, SIGNAL(currentIndexChanged(QString)), - this, SLOT(qtVersionComboBoxCurrentIndexChanged(QString))); + this, SLOT(qtVersionSelected(QString))); +} + +void Qt4ProjectConfigWidget::buildDirectoryChanged() +{ + m_ui->shadowBuildDirEdit->setPath(m_buildConfiguration->value("buildDirectory").toString()); + updateDetails(); + updateImportLabel(); } void Qt4ProjectConfigWidget::onBeforeBeforeShadowBuildDirBrowsed() @@ -210,21 +237,35 @@ void Qt4ProjectConfigWidget::onBeforeBeforeShadowBuildDirBrowsed() m_ui->shadowBuildDirEdit->setInitialBrowsePathBackup(initialDirectory); } -void Qt4ProjectConfigWidget::shadowBuildCheckBoxClicked(bool checked) +void Qt4ProjectConfigWidget::shadowBuildClicked(bool checked) { m_ui->shadowBuildDirEdit->setEnabled(checked); m_browseButton->setEnabled(checked); bool b = m_ui->shadowBuildCheckBox->isChecked(); - m_buildConfiguration->setValue("useShadowBuild", b); - if (b) - m_buildConfiguration->setValue("buildDirectory", m_ui->shadowBuildDirEdit->path()); - else - m_buildConfiguration->setValue("buildDirectory", QVariant(QString::null)); + + m_ignoreChange = true; + m_buildConfiguration->setShadowBuildAndDirectory(b, b ? m_ui->shadowBuildDirEdit->path() : QString::null); + m_ignoreChange = false; + updateDetails(); - m_buildConfiguration->qt4Project()->invalidateCachedTargetInformation(); updateImportLabel(); } +void Qt4ProjectConfigWidget::shadowBuildEdited() +{ + if (m_buildConfiguration->value("buildDirectory").toString() == m_ui->shadowBuildDirEdit->path()) + return; + m_ignoreChange = true; + m_buildConfiguration->setShadowBuildAndDirectory(true, m_ui->shadowBuildDirEdit->path()); + m_ignoreChange = false; + + // if the directory already exists + // check if we have a build in there and + // offer to import it + updateImportLabel(); + updateDetails(); +} + void Qt4ProjectConfigWidget::updateImportLabel() { bool visible = false; @@ -251,20 +292,6 @@ void Qt4ProjectConfigWidget::updateImportLabel() m_ui->importLabel->setVisible(visible); } -void Qt4ProjectConfigWidget::shadowBuildLineEditTextChanged() -{ - if (m_buildConfiguration->value("buildDirectory").toString() == m_ui->shadowBuildDirEdit->path()) - return; - m_buildConfiguration->setValue("buildDirectory", m_ui->shadowBuildDirEdit->path()); - // if the directory already exists - // check if we have a build in there and - // offer to import it - updateImportLabel(); - - m_buildConfiguration->qt4Project()->invalidateCachedTargetInformation(); - updateDetails(); -} - void Qt4ProjectConfigWidget::importLabelClicked() { if (!m_buildConfiguration->qmakeStep() || !m_buildConfiguration->makeStep()) @@ -301,7 +328,7 @@ void Qt4ProjectConfigWidget::importLabelClicked() qmakeStep->setUserArguments(additionalArguments); MakeStep *makeStep = m_buildConfiguration->makeStep(); - m_buildConfiguration->setValue("buildConfiguration", int(qmakeBuildConfig)); + m_buildConfiguration->setQMakeBuildConfiguration(qmakeBuildConfig); // Adjust command line arguments, this is ugly as hell // If we are switching to BuildAll we want "release" in there and no "debug" // or "debug" in there and no "release" @@ -319,12 +346,12 @@ void Qt4ProjectConfigWidget::importLabelClicked() makeStep->setUserArguments(makeCmdArguments); } } - setupQtVersionsComboBox(); - updateDetails(); - updateImportLabel(); + // All our widgets are updated by signals from the buildconfiguration + // if not, there's either a signal missing + // or we don't respond to it correctly } -void Qt4ProjectConfigWidget::qtVersionComboBoxCurrentIndexChanged(const QString &) +void Qt4ProjectConfigWidget::qtVersionSelected(const QString &) { //Qt Version int newQtVersion; @@ -337,9 +364,10 @@ void Qt4ProjectConfigWidget::qtVersionComboBoxCurrentIndexChanged(const QString bool isValid = vm->version(newQtVersion)->isValid(); m_ui->invalidQtWarningLabel->setVisible(!isValid); if (newQtVersion != m_buildConfiguration->qtVersionId()) { + m_ignoreChange = true; m_buildConfiguration->setQtVersion(newQtVersion); + m_ignoreChange = false; updateToolChainCombo(); - m_buildConfiguration->qt4Project()->update(); } updateDetails(); } @@ -348,27 +376,21 @@ void Qt4ProjectConfigWidget::updateToolChainCombo() { m_ui->toolChainComboBox->clear(); QList<ProjectExplorer::ToolChain::ToolChainType> toolchains = m_buildConfiguration->qtVersion()->possibleToolChainTypes(); - using namespace ProjectExplorer; foreach (ToolChain::ToolChainType toolchain, toolchains) { m_ui->toolChainComboBox->addItem(ToolChain::toolChainName(toolchain), qVariantFromValue(toolchain)); } m_ui->toolChainComboBox->setEnabled(toolchains.size() > 1); - setToolChain(toolchains.indexOf(m_buildConfiguration->toolChainType())); -} - -void Qt4ProjectConfigWidget::selectToolChain(int index) -{ - setToolChain(index); - m_buildConfiguration->qt4Project()->update(); + m_ui->toolChainComboBox->setCurrentIndex(toolchains.indexOf(m_buildConfiguration->toolChainType())); + updateDetails(); } -void Qt4ProjectConfigWidget::setToolChain(int index) +void Qt4ProjectConfigWidget::toolChainSelected(int index) { ProjectExplorer::ToolChain::ToolChainType selectedToolChainType = m_ui->toolChainComboBox->itemData(index, Qt::UserRole).value<ProjectExplorer::ToolChain::ToolChainType>(); + m_ignoreChange = true; m_buildConfiguration->setToolChainType(selectedToolChainType); - if (m_ui->toolChainComboBox->currentIndex() != index) - m_ui->toolChainComboBox->setCurrentIndex(index); + m_ignoreChange = false; updateDetails(); } |