diff options
Diffstat (limited to 'src/plugins/projectexplorer/project.cpp')
-rw-r--r-- | src/plugins/projectexplorer/project.cpp | 55 |
1 files changed, 36 insertions, 19 deletions
diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index e7e6599ed9..d808ca8d7f 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -31,6 +31,7 @@ #include "deployconfiguration.h" #include "editorconfiguration.h" #include "kit.h" +#include "kitinformation.h" #include "makestep.h" #include "projectexplorer.h" #include "projectmacroexpander.h" @@ -39,6 +40,7 @@ #include "runcontrol.h" #include "session.h" #include "target.h" +#include "taskhub.h" #include "userfileaccessor.h" #include <coreplugin/idocument.h> @@ -57,6 +59,7 @@ #include <utils/macroexpander.h> #include <utils/pointeralgorithm.h> #include <utils/qtcassert.h> +#include <utils/stringutils.h> #include <QFileDialog> @@ -178,7 +181,7 @@ class ProjectPrivate public: ~ProjectPrivate(); - Core::Id m_id; + Utils::Id m_id; bool m_needsInitialExpansion = false; bool m_canBuildProducts = false; bool m_knowsAllBuildExecutables = true; @@ -238,7 +241,7 @@ QString Project::displayName() const return d->m_displayName; } -Core::Id Project::id() const +Utils::Id Project::id() const { QTC_CHECK(d->m_id.isValid()); return d->m_id; @@ -374,7 +377,7 @@ void Project::setExtraProjectFiles(const QSet<Utils::FilePath> &projectDocumentP } } -Target *Project::target(Core::Id id) const +Target *Project::target(Utils::Id id) const { return Utils::findOrDefault(d->m_targets, Utils::equal(&Target::id, id)); } @@ -468,11 +471,11 @@ bool Project::copySteps(Target *sourceTarget, Target *newTarget) if (fatalError) { // That could be a more granular error message - QMessageBox::critical(Core::ICore::mainWindow(), + QMessageBox::critical(Core::ICore::dialogParent(), tr("Incompatible Kit"), tr("Kit %1 is incompatible with kit %2.") - .arg(sourceTarget->kit()->displayName()) - .arg(newTarget->kit()->displayName())); + .arg(sourceTarget->kit()->displayName()) + .arg(newTarget->kit()->displayName())); } else if (!buildconfigurationError.isEmpty() || !deployconfigurationError.isEmpty() || ! runconfigurationError.isEmpty()) { @@ -496,7 +499,7 @@ bool Project::copySteps(Target *sourceTarget, Target *newTarget) + runconfigurationError.join(QLatin1Char('\n')); } - QMessageBox msgBox(Core::ICore::mainWindow()); + QMessageBox msgBox(Core::ICore::dialogParent()); msgBox.setIcon(QMessageBox::Warning); msgBox.setWindowTitle(tr("Partially Incompatible Kit")); msgBox.setText(tr("Some configurations could not be copied.")); @@ -526,7 +529,7 @@ void Project::setDisplayName(const QString &name) emit displayNameChanged(); } -void Project::setId(Core::Id id) +void Project::setId(Utils::Id id) { QTC_ASSERT(!d->m_id.isValid(), return); // Id may not change ever! d->m_id = id; @@ -576,14 +579,14 @@ void Project::saveSettings() if (!d->m_accessor) d->m_accessor = std::make_unique<Internal::UserFileAccessor>(this); if (!targets().isEmpty()) - d->m_accessor->saveSettings(toMap(), Core::ICore::mainWindow()); + d->m_accessor->saveSettings(toMap(), Core::ICore::dialogParent()); } Project::RestoreResult Project::restoreSettings(QString *errorMessage) { if (!d->m_accessor) d->m_accessor = std::make_unique<Internal::UserFileAccessor>(this); - QVariantMap map(d->m_accessor->restoreSettings(Core::ICore::mainWindow())); + QVariantMap map(d->m_accessor->restoreSettings(Core::ICore::dialogParent())); RestoreResult result = fromMap(map, errorMessage); if (result == RestoreResult::Ok) emit settingsLoaded(); @@ -748,7 +751,7 @@ void Project::createTargetFromMap(const QVariantMap &map, int index) const QVariantMap targetMap = map.value(key).toMap(); - Core::Id id = idFromMap(targetMap); + Utils::Id id = idFromMap(targetMap); if (target(id)) { qWarning("Warning: Duplicated target id found, not restoring second target with id '%s'. Continuing.", qPrintable(id.toString())); @@ -757,8 +760,22 @@ void Project::createTargetFromMap(const QVariantMap &map, int index) Kit *k = KitManager::kit(id); if (!k) { - qWarning("Warning: No kit '%s' found. Continuing.", qPrintable(id.toString())); - return; + Utils::Id deviceTypeId = Utils::Id::fromSetting(targetMap.value(Target::deviceTypeKey())); + if (!deviceTypeId.isValid()) + deviceTypeId = Constants::DESKTOP_DEVICE_TYPE; + const QString formerKitName = targetMap.value(Target::displayNameKey()).toString(); + k = KitManager::registerKit([deviceTypeId, &formerKitName](Kit *kit) { + const QString tempKitName = Utils::makeUniquelyNumbered( + tr("Replacement for \"%1\"").arg(formerKitName), + Utils::transform(KitManager::kits(), &Kit::unexpandedDisplayName)); + kit->setUnexpandedDisplayName(tempKitName); + DeviceTypeKitAspect::setDeviceTypeId(kit, deviceTypeId); + kit->setup(); + }, id); + TaskHub::addTask(BuildSystemTask(Task::Warning, tr("Project \"%1\" was configured for " + "kit \"%2\" with id %3, which does not exist anymore. The new kit \"%4\" was " + "created in its place, in an attempt not to lose custom project settings.") + .arg(displayName(), formerKitName, id.toString(), k->displayName()))); } auto t = std::make_unique<Target>(this, k, Target::_constructor_tag{}); @@ -793,7 +810,7 @@ void Project::setProjectLanguages(Core::Context language) emit projectLanguagesUpdated(); } -void Project::addProjectLanguage(Core::Id id) +void Project::addProjectLanguage(Utils::Id id) { Core::Context lang = projectLanguages(); int pos = lang.indexOf(id); @@ -802,7 +819,7 @@ void Project::addProjectLanguage(Core::Id id) setProjectLanguages(lang); } -void Project::removeProjectLanguage(Core::Id id) +void Project::removeProjectLanguage(Utils::Id id) { Core::Context lang = projectLanguages(); int pos = lang.indexOf(id); @@ -811,7 +828,7 @@ void Project::removeProjectLanguage(Core::Id id) setProjectLanguages(lang); } -void Project::setProjectLanguage(Core::Id id, bool enabled) +void Project::setProjectLanguage(Utils::Id id, bool enabled) { if (enabled) addProjectLanguage(id); @@ -841,7 +858,7 @@ void Project::setNeedsDeployConfigurations(bool value) Task Project::createProjectTask(Task::TaskType type, const QString &description) { - return Task(type, description, Utils::FilePath(), -1, Core::Id()); + return Task(type, description, Utils::FilePath(), -1, Utils::Id()); } void Project::setBuildSystemCreator(const std::function<BuildSystem *(Target *)> &creator) @@ -893,7 +910,7 @@ bool Project::needsBuildConfigurations() const return d->m_needsBuildConfigurations; } -void Project::configureAsExampleProject() +void Project::configureAsExampleProject(Kit * /*kit*/) { } @@ -1060,7 +1077,7 @@ void ProjectExplorerPlugin::testProject_setup() QCOMPARE(project.files(Project::AllFiles), {TEST_PROJECT_PATH}); QCOMPARE(project.files(Project::GeneratedFiles), {}); - QCOMPARE(project.id(), Core::Id(TEST_PROJECT_ID)); + QCOMPARE(project.id(), Utils::Id(TEST_PROJECT_ID)); QVERIFY(!project.target->buildSystem()->isParsing()); QVERIFY(!project.target->buildSystem()->hasParsingData()); |