Merge remote-tracking branch 'origin/5.0'

Conflicts:
	src/plugins/coreplugin/locator/executefilter.cpp

Change-Id: Iff5b82a9e491b782e4720138904f389d318b005c
This commit is contained in:
Eike Ziller
2021-08-11 10:10:51 +02:00
104 changed files with 1405 additions and 552 deletions

View File

@@ -73,6 +73,23 @@ Q_LOGGING_CATEGORY(infoLogger, "QmlProjectManager.QmlBuildSystem", QtInfoMsg)
namespace QmlProjectManager {
static bool isQtDesignStudio()
{
QSettings *settings = Core::ICore::settings();
const QString qdsStandaloneEntry = "QML/Designer/StandAloneMode"; //entry from qml settings
return settings->value(qdsStandaloneEntry, false).toBool();
}
static int preferedQtTarget(Target *target)
{
if (target) {
const QmlBuildSystem *buildSystem = qobject_cast<QmlBuildSystem *>(target->buildSystem());
if (buildSystem && buildSystem->qt6Project())
return 6;
}
return 5;
}
const char openInQDSAppSetting[] = "OpenInQDSApp";
static void openQDS(const QString &qdsPath, const Utils::FilePath &fileName)
@@ -102,12 +119,9 @@ QmlProject::QmlProject(const Utils::FilePath &fileName)
setBuildSystemCreator([](Target *t) { return new QmlBuildSystem(t); });
QSettings *settings = Core::ICore::settings();
const QString qdsStandaloneEntry = "QML/Designer/StandAloneMode"; //entry from qml settings
const QString qdsInstallationEntry = "QML/Designer/DesignStudioInstallation"; //set in installer
const bool isDesigner = settings->value(qdsStandaloneEntry, false).toBool();
if (!isDesigner) {
if (!isQtDesignStudio()) {
const QString qdsPath = settings->value(qdsInstallationEntry).toString();
const bool foundQDS = Utils::FilePath::fromString(qdsPath).exists();
@@ -406,8 +420,10 @@ Project::RestoreResult QmlProject::fromMap(const QVariantMap &map, QString *erro
if (!activeTarget()) {
// find a kit that matches prerequisites (prefer default one)
const QList<Kit*> kits = Utils::filtered(KitManager::kits(), [this](const Kit *k) {
return !containsType(projectIssues(k), Task::TaskType::Error);
const QList<Kit *> kits = Utils::filtered(KitManager::kits(), [this](const Kit *k) {
return !containsType(projectIssues(k), Task::TaskType::Error)
&& DeviceTypeKitAspect::deviceTypeId(k)
== ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE;
});
if (!kits.isEmpty()) {
@@ -416,6 +432,29 @@ Project::RestoreResult QmlProject::fromMap(const QVariantMap &map, QString *erro
else
addTargetForKit(kits.first());
}
if (isQtDesignStudio()) {
auto setKitWithVersion = [&](int qtMajorVersion) {
const QList<Kit *> qtVersionkits
= Utils::filtered(kits, [qtMajorVersion](const Kit *k) {
QtSupport::BaseQtVersion *version = QtSupport::QtKitAspect::qtVersion(k);
return (version && version->qtVersion().majorVersion == qtMajorVersion);
});
if (!qtVersionkits.isEmpty()) {
if (qtVersionkits.contains(KitManager::defaultKit()))
addTargetForDefaultKit();
else
addTargetForKit(qtVersionkits.first());
}
};
int preferedVersion = preferedQtTarget(activeTarget());
if (activeTarget())
removeTarget(activeTarget());
setKitWithVersion(preferedVersion);
}
}
return RestoreResult::Ok;

View File

@@ -34,12 +34,14 @@
#include <coreplugin/icore.h>
#include <coreplugin/idocument.h>
#include <projectexplorer/kitinformation.h>
#include <projectexplorer/projectexplorer.h>
#include <projectexplorer/runcontrol.h>
#include <projectexplorer/runconfigurationaspects.h>
#include <projectexplorer/target.h>
#include <projectexplorer/environmentaspect.h>
#include <projectexplorer/kitinformation.h>
#include <projectexplorer/kitmanager.h>
#include <projectexplorer/projectexplorer.h>
#include <projectexplorer/runconfigurationaspects.h>
#include <projectexplorer/runcontrol.h>
#include <projectexplorer/session.h>
#include <projectexplorer/target.h>
#include <qtsupport/qtkitinformation.h>
#include <qtsupport/qtsupportconstants.h>
@@ -64,6 +66,14 @@ namespace Internal {
// QmlProjectRunConfiguration
static bool isQtDesignStudio()
{
QSettings *settings = Core::ICore::settings();
const QString qdsStandaloneEntry = "QML/Designer/StandAloneMode"; //entry from qml settings
return settings->value(qdsStandaloneEntry, false).toBool();
}
class QmlProjectRunConfiguration final : public RunConfiguration
{
Q_DECLARE_TR_FUNCTIONS(QmlProjectManager::QmlProjectRunConfiguration)
@@ -78,10 +88,12 @@ private:
QString mainScript() const;
FilePath qmlRuntimeFilePath() const;
QString commandLineArguments() const;
void createQtVersionAspect();
StringAspect *m_qmlViewerAspect = nullptr;
QmlMainFileAspect *m_qmlMainFileAspect = nullptr;
QmlMultiLanguageAspect *m_multiLanguageAspect = nullptr;
SelectionAspect *m_qtversionAspect = nullptr;
};
QmlProjectRunConfiguration::QmlProjectRunConfiguration(Target *target, Id id)
@@ -103,6 +115,8 @@ QmlProjectRunConfiguration::QmlProjectRunConfiguration(Target *target, Id id)
m_qmlMainFileAspect = addAspect<QmlMainFileAspect>(target);
connect(m_qmlMainFileAspect, &QmlMainFileAspect::changed, this, &RunConfiguration::update);
createQtVersionAspect();
connect(target, &Target::kitChanged, this, &RunConfiguration::update);
m_multiLanguageAspect = addAspect<QmlMultiLanguageAspect>(target);
@@ -223,6 +237,70 @@ QString QmlProjectRunConfiguration::commandLineArguments() const
return args;
}
void QmlProjectRunConfiguration::createQtVersionAspect()
{
if (!isQtDesignStudio())
return;
m_qtversionAspect = addAspect<SelectionAspect>();
m_qtversionAspect->setDisplayStyle(SelectionAspect::DisplayStyle::ComboBox);
m_qtversionAspect->setLabelText(tr("Qt Version:"));
m_qtversionAspect->setSettingsKey("QmlProjectManager.kit");
Kit *kit = target()->kit();
BaseQtVersion *version = QtKitAspect::qtVersion(kit);
if (version) {
const QmlBuildSystem *buildSystem = qobject_cast<QmlBuildSystem *>(target()->buildSystem());
const bool isQt6Project = buildSystem && buildSystem->qt6Project();
if (isQt6Project) {
m_qtversionAspect->addOption(tr("Qt 6"));
m_qtversionAspect->setReadOnly(true);
} else { /* Only if this is not a Qt 6 project changing kits makes sense */
m_qtversionAspect->addOption(tr("Qt 5"));
m_qtversionAspect->addOption(tr("Qt 6"));
const int valueForVersion = version->qtVersion().majorVersion == 6 ? 1 : 0;
m_qtversionAspect->setValue(valueForVersion);
connect(m_qtversionAspect, &SelectionAspect::changed, this, [&]() {
QTC_ASSERT(target(), return );
auto project = target()->project();
QTC_ASSERT(project, return );
int oldValue = !m_qtversionAspect->value();
const int preferedQtVersion = m_qtversionAspect->value() > 0 ? 6 : 5;
Kit *currentKit = target()->kit();
const QList<Kit *> kits = Utils::filtered(KitManager::kits(), [&](const Kit *k) {
QtSupport::BaseQtVersion *version = QtSupport::QtKitAspect::qtVersion(k);
return (version && version->qtVersion().majorVersion == preferedQtVersion)
&& DeviceTypeKitAspect::deviceTypeId(k)
== ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE;
});
if (kits.contains(currentKit))
return;
if (!kits.isEmpty()) {
auto newTarget = target()->project()->target(kits.first());
if (!newTarget)
newTarget = project->addTargetForKit(kits.first());
SessionManager::setActiveTarget(project, newTarget, SetActive::Cascade);
/* Reset the aspect. We changed the target and this aspect should not change. */
m_qtversionAspect->blockSignals(true);
m_qtversionAspect->setValue(oldValue);
m_qtversionAspect->blockSignals(false);
}
});
}
}
}
bool QmlProjectRunConfiguration::isEnabled() const
{
return m_qmlMainFileAspect->isQmlFilePresent() && !commandLine().executable().isEmpty()