diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index e347f544ed9d6b4b0825de69a1bf063edd78e355..af5e1a37dee47c9ff391605671b20cfe42962f7a 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -32,12 +32,14 @@ #include "editorconfiguration.h" #include "environment.h" #include "projectexplorer.h" +#include "projectexplorerconstants.h" #include "projectnodes.h" #include "target.h" #include "userfileaccessor.h" #include <coreplugin/ifile.h> #include <extensionsystem/pluginmanager.h> +#include <limits> #include <utils/qtcassert.h> using namespace ProjectExplorer; @@ -247,6 +249,9 @@ bool Project::fromMap(const QVariantMap &map) m_editorConfiguration->fromMap(values); } + int previousFileVersion = map.value(QLatin1String(Constants::USERFILE_PREVIOUS_VERSION_KEY), + std::numeric_limits<int>::max()).toInt(); + bool ok; int maxI(map.value(QLatin1String(TARGET_COUNT_KEY), 0).toInt(&ok)); if (!ok || maxI < 0) @@ -263,7 +268,9 @@ bool Project::fromMap(const QVariantMap &map) qWarning() << key << "was not found in data."; return false; } - Target *t(targetFactory()->restore(this, map.value(key).toMap())); + QVariantMap targetMap = map.value(key).toMap(); + targetMap.insert(Constants::USERFILE_PREVIOUS_VERSION_KEY, previousFileVersion); + Target *t(targetFactory()->restore(this, targetMap)); if (!t) { qWarning() << "Restoration of a target failed! (Continuing)"; continue; diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp index 10b0b48aa491b53b9275b4d60e1c77ee7b2bc269..923ccaf28b070441c8e154ddb2f22e90e91fffcd 100644 --- a/src/plugins/projectexplorer/runconfiguration.cpp +++ b/src/plugins/projectexplorer/runconfiguration.cpp @@ -239,6 +239,7 @@ bool RunConfiguration::fromMap(const QVariantMap &map) m_useCppDebugger = map.value(QLatin1String(USE_CPP_DEBUGGER_KEY), true).toBool(); m_useQmlDebugger = map.value(QLatin1String(USE_QML_DEBUGGER_KEY), false).toBool(); m_qmlDebugServerPort = map.value(QLatin1String(QML_DEBUG_SERVER_PORT_KEY), Constants::QML_DEFAULT_DEBUG_SERVER_PORT).toUInt(); + return ProjectConfiguration::fromMap(map); } diff --git a/src/plugins/projectexplorer/target.cpp b/src/plugins/projectexplorer/target.cpp index 3d9e41665af98901effca190940f7a546dacf32f..e37d0d68857a4a652dbd459a2c3ca04d9ebc44dd 100644 --- a/src/plugins/projectexplorer/target.cpp +++ b/src/plugins/projectexplorer/target.cpp @@ -32,8 +32,10 @@ #include "buildconfiguration.h" #include "deployconfiguration.h" #include "project.h" +#include "projectexplorerconstants.h" #include "runconfiguration.h" +#include <limits> #include <utils/qtcassert.h> using namespace ProjectExplorer; @@ -353,6 +355,9 @@ bool Target::fromMap(const QVariantMap &map) if (!ProjectConfiguration::fromMap(map)) return false; + int fileVersion = map.value(Constants::USERFILE_PREVIOUS_VERSION_KEY, + std::numeric_limits<int>::max()).toInt(); + bool ok; int bcCount(map.value(QLatin1String(BC_COUNT_KEY), 0).toInt(&ok)); if (!ok || bcCount < 0) @@ -367,7 +372,9 @@ bool Target::fromMap(const QVariantMap &map) const QString key(QString::fromLatin1(BC_KEY_PREFIX) + QString::number(i)); if (!map.contains(key)) return false; - BuildConfiguration *bc(buildConfigurationFactory()->restore(this, map.value(key).toMap())); + QVariantMap targetMap = map.value(key).toMap(); + targetMap.insert(Constants::USERFILE_PREVIOUS_VERSION_KEY, fileVersion); + BuildConfiguration *bc(buildConfigurationFactory()->restore(this, targetMap)); if (!bc) continue; addBuildConfiguration(bc); diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp index 5696ccef07bc07f31e53219ac784a49d6fe322ea..ffbad6ab2bf5cc97a242aac2454ce72470155ffd 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp @@ -37,6 +37,7 @@ #include "makestep.h" #include <utils/qtcassert.h> +#include <limits> #include <projectexplorer/buildsteplist.h> #include <projectexplorer/projectexplorerconstants.h> @@ -117,6 +118,8 @@ bool Qt4BuildConfiguration::fromMap(const QVariantMap &map) if (!BuildConfiguration::fromMap(map)) return false; + int fileVersion = map.value(ProjectExplorer::Constants::USERFILE_PREVIOUS_VERSION_KEY, + std::numeric_limits<int>::max()).toInt(); m_shadowBuild = map.value(QLatin1String(USE_SHADOW_BUILD_KEY), true).toBool(); m_buildDirectory = map.value(QLatin1String(BUILD_DIRECTORY_KEY), qt4Target()->defaultBuildDirectory()).toString(); m_qtVersionId = map.value(QLatin1String(QT_VERSION_ID_KEY)).toInt(); @@ -124,8 +127,8 @@ bool Qt4BuildConfiguration::fromMap(const QVariantMap &map) m_qmakeBuildConfiguration = QtVersion::QmakeBuildConfigs(map.value(QLatin1String(BUILD_CONFIGURATION_KEY)).toInt()); // Pick a Qt version if the default version is used: - // We assume that the default Qt version as used in earlier versions of Qt creator - // was supporting a desktop flavor of Qt. + // We assume that the default Qt version was used in earlier versions of Qt creator. + // Pick a Qt version that is supporting a desktop. if (m_qtVersionId == 0) { QList<QtVersion *> versions = QtVersionManager::instance()->versions(); foreach (QtVersion *v, versions) { @@ -139,12 +142,20 @@ bool Qt4BuildConfiguration::fromMap(const QVariantMap &map) } QtVersion *version = qtVersion(); - if (!version->isValid() || !version->supportedTargetIds().contains(target()->id())) { - qWarning() << "Buildconfiguration" << displayName() << ": Qt" << version->displayName() << "not supported by target" << target()->id(); - return false; + if (fileVersion >= 1) { // we are not upgrading from pre-targets! + if (version->isValid() && !version->supportedTargetIds().contains(target()->id())) { + qWarning() << "Buildconfiguration" << displayName() << ": Qt" << version->displayName() << "not supported by target" << target()->id(); + return false; + } + } else { + if (!version->isValid() || !version->supportedTargetIds().contains(target()->id())) { + qWarning() << "Buildconfiguration" << displayName() << ": Qt" << version->displayName() << "not supported by target" << target()->id(); + return false; + } } - m_shadowBuild = (m_shadowBuild && version->isValid() && version->supportsShadowBuilds()); + if (version->isValid()) + m_shadowBuild = (m_shadowBuild && version->supportsShadowBuilds()); QList<ToolChain::ToolChainType> possibleTcs(qt4Target()->filterToolChainTypes(qtVersion()->possibleToolChainTypes())); if (!possibleTcs.contains(toolChainType())) @@ -325,6 +336,8 @@ void Qt4BuildConfiguration::setQtVersion(QtVersion *version) m_toolChainType = candidates.first(); } + m_shadowBuild = m_shadowBuild && qtVersion()->supportsShadowBuilds(); + emit proFileEvaluateNeeded(this); emit qtVersionChanged(); emit environmentChanged(); diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp index cd01c460dcd90114a3c45ce16ea53e72a8955171..374806bd01bd1bbf00f3f951a4df92f87956de33 100644 --- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp +++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp @@ -77,7 +77,6 @@ Qt4ProjectConfigWidget::Qt4ProjectConfigWidget(Qt4Project *project) m_ui->shadowBuildDirEdit->setPromptDialogTitle(tr("Shadow Build Directory")); m_ui->shadowBuildDirEdit->setExpectedKind(Utils::PathChooser::Directory); - m_ui->invalidQtWarningLabel->setVisible(false); connect(m_ui->shadowBuildCheckBox, SIGNAL(clicked(bool)), this, SLOT(shadowBuildClicked(bool))); @@ -150,12 +149,6 @@ void Qt4ProjectConfigWidget::manageQtVersions() 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 { return tr("General"); @@ -234,16 +227,17 @@ void Qt4ProjectConfigWidget::qtVersionsChanged() m_ui->qtVersionComboBox->addItem(validVersions.at(i)->displayName(), validVersions.at(i)->uniqueId()); - if (validVersions.at(i) == qtVersion) { + if (validVersions.at(i) == qtVersion) m_ui->qtVersionComboBox->setCurrentIndex(i); - m_ui->invalidQtWarningLabel->setVisible(!validVersions.at(i)->isValid()); - } } m_ui->qtVersionComboBox->setEnabled(validVersions.count() > 1); } + if (!qtVersion->isValid()) { + m_ui->qtVersionComboBox->addItem(tr("Invalid Qt version"), -1); + m_ui->qtVersionComboBox->setCurrentIndex(m_ui->qtVersionComboBox->count() - 1); + } m_ignoreChange = false; - updateInvalidQtVersion(); updateToolChainCombo(); updateShadowBuildUi(); updateDetails(); @@ -440,9 +434,12 @@ void Qt4ProjectConfigWidget::qtVersionSelected(const QString &) { if (m_ignoreChange) return; - //Qt Version + int newQtVersionId = m_ui->qtVersionComboBox->itemData(m_ui->qtVersionComboBox->currentIndex()).toInt(); + if (m_ui->qtVersionComboBox->itemData(m_ui->qtVersionComboBox->count() - 1).toInt() == -1) + m_ui->qtVersionComboBox->removeItem(m_ui->qtVersionComboBox->count() - 1); + QtVersionManager *vm = QtVersionManager::instance(); QtVersion *newQtVersion = vm->version(newQtVersionId); @@ -450,7 +447,6 @@ void Qt4ProjectConfigWidget::qtVersionSelected(const QString &) m_buildConfiguration->setQtVersion(newQtVersion); m_ignoreChange = false; - updateInvalidQtVersion(); updateShadowBuildUi(); updateToolChainCombo(); updateImportLabel(); diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.h b/src/plugins/qt4projectmanager/qt4projectconfigwidget.h index abfb634039210ecc19350103ed5402a47c18f59e..7aabd98b38986e31cdce5a085e7000093293e25b 100644 --- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.h +++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.h @@ -81,7 +81,7 @@ private: void updateDetails(); void updateToolChainCombo(); void updateShadowBuildUi(); - void updateInvalidQtVersion(); + Ui::Qt4ProjectConfigWidget *m_ui; QAbstractButton *m_browseButton; Qt4BuildConfiguration *m_buildConfiguration; diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.ui b/src/plugins/qt4projectmanager/qt4projectconfigwidget.ui index a7a2444119a6b969427d7204c21c15550993a235..dbc83c975b6460503067c27cad994820fedffe75 100644 --- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.ui +++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.ui @@ -39,19 +39,6 @@ </property> </widget> </item> - <item> - <widget class="QLabel" name="invalidQtWarningLabel"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>This Qt version is invalid.</string> - </property> - </widget> - </item> <item> <widget class="QPushButton" name="manageQtVersionPushButtons"> <property name="text">