From e9f54804e13bbe50e1012ac464f0a1ee9d5cd897 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Fri, 13 Mar 2020 13:54:31 +0100 Subject: [PATCH 01/14] Doc: Remove mentioning of OpenSSL version The version we ship in 4.11 is 1.1.1d Chances are we will forget updating this version number in the future too, so let's just not mention it. Change-Id: Ibb8248a4eaa38f6dab93af8170f1f77a2dff3c28 Reviewed-by: Eike Ziller --- doc/src/overview/creator-acknowledgements.qdoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/overview/creator-acknowledgements.qdoc b/doc/src/overview/creator-acknowledgements.qdoc index 1364f75d395..0ed535bb416 100644 --- a/doc/src/overview/creator-acknowledgements.qdoc +++ b/doc/src/overview/creator-acknowledgements.qdoc @@ -381,7 +381,7 @@ Copyright (C) 2010-2015 three.js authors\br share/qtcreator/templates/wizards/projects/qmake/qtcanvas3dapplication - \li \b{OpenSSL toolkit. Version 1.0.2j} + \li \b{OpenSSL toolkit} The OpenSSL toolkit stays under a double license, i.e. both the conditions of the OpenSSL License and the original SSLeay license apply to the toolkit. @@ -391,7 +391,7 @@ OpenSSL License ==================================================================== - Copyright (c) 1998-2018 The OpenSSL Project. All rights reserved. + Copyright (c) 1998-2019 The OpenSSL Project. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions From 7675296fcf092c9f57f3c2887d397dcad02e1e69 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Wed, 18 Mar 2020 03:17:35 +0100 Subject: [PATCH 02/14] McuSupport: Make hardcoded target list "semi data-driven" This change pushes the hard-coded list a bit towards a "data-driven" approach. That way, the planned switch to the .json files based apporach (see UL-2012) becomes less of a change. Some target entries are added to match the current target list in Qt for MCUs packages. If we don't manage to get the .json-based target listing in place, this could even serve as fall-back. Task-number: UL-2012 Change-Id: If39e5d581ac19468b6f52ed221ec2d39bfab9f80 Reviewed-by: hjk Reviewed-by: Marco Bubke --- src/plugins/mcusupport/mcusupportoptions.cpp | 33 +++++++--- src/plugins/mcusupport/mcusupportoptions.h | 7 +++ .../mcusupport/mcusupportoptionspage.cpp | 30 ++++++---- src/plugins/mcusupport/mcusupportsdk.cpp | 60 ++++++++++++------- src/plugins/mcusupport/mcusupportsdk.h | 2 +- 5 files changed, 92 insertions(+), 40 deletions(-) diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index 2a35abbf84d..98fa88617d6 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -334,16 +334,22 @@ McuSupportOptions::McuSupportOptions(QObject *parent) : QObject(parent) , qtForMCUsSdkPackage(Sdk::createQtForMCUsPackage()) { - Sdk::hardcodedTargetsAndPackages(qtForMCUsSdkPackage, &packages, &mcuTargets); - - packages.append(qtForMCUsSdkPackage); - for (auto package : packages) - connect(package, &McuPackage::changed, [this](){ - emit changed(); - }); + connect(qtForMCUsSdkPackage, &McuPackage::changed, + this, &McuSupportOptions::populatePackagesAndTargets); } McuSupportOptions::~McuSupportOptions() +{ + deletePackagesAndTargets(); + delete qtForMCUsSdkPackage; +} + +void McuSupportOptions::populatePackagesAndTargets() +{ + setQulDir(Utils::FilePath::fromUserInput(qtForMCUsSdkPackage->path())); +} + +void McuSupportOptions::deletePackagesAndTargets() { qDeleteAll(packages); packages.clear(); @@ -351,6 +357,19 @@ McuSupportOptions::~McuSupportOptions() mcuTargets.clear(); } +void McuSupportOptions::setQulDir(const Utils::FilePath &dir) +{ + deletePackagesAndTargets(); + Sdk::hardcodedTargetsAndPackages(dir, &packages, &mcuTargets); + //packages.append(qtForMCUsSdkPackage); + for (auto package : packages) { + connect(package, &McuPackage::changed, [this](){ + emit changed(); + }); + } + emit changed(); +} + static bool mcuTargetIsDesktop(const McuTarget* mcuTarget) { return mcuTarget->qulPlatform() == "Qt"; diff --git a/src/plugins/mcusupport/mcusupportoptions.h b/src/plugins/mcusupport/mcusupportoptions.h index deb7010f9da..7e1edd60159 100644 --- a/src/plugins/mcusupport/mcusupportoptions.h +++ b/src/plugins/mcusupport/mcusupportoptions.h @@ -35,6 +35,7 @@ class Id; } namespace Utils { +class FilePath; class PathChooser; class InfoLabel; } @@ -158,10 +159,16 @@ public: QVector mcuTargets; McuPackage *qtForMCUsSdkPackage = nullptr; + void setQulDir(const Utils::FilePath &dir); + QString kitName(const McuTarget* mcuTarget) const; QList existingKits(const McuTarget *mcuTargt); ProjectExplorer::Kit *newKit(const McuTarget *mcuTarget); + void populatePackagesAndTargets(); + +private: + void deletePackagesAndTargets(); signals: void changed(); diff --git a/src/plugins/mcusupport/mcusupportoptionspage.cpp b/src/plugins/mcusupport/mcusupportoptionspage.cpp index a991af60ece..cfbe4784930 100644 --- a/src/plugins/mcusupport/mcusupportoptionspage.cpp +++ b/src/plugins/mcusupport/mcusupportoptionspage.cpp @@ -62,6 +62,7 @@ public: private: void apply() final; + void populateMcuTargetsComboBox(); void showEvent(QShowEvent *event) final; QString m_armGccPath; @@ -108,14 +109,12 @@ McuSupportOptionsWidget::McuSupportOptionsWidget() m_mcuTargetsGroupBox->setFlat(true); mainLayout->addWidget(m_mcuTargetsGroupBox); m_mcuTargetsComboBox = new QComboBox; - m_mcuTargetsComboBox->addItems( - Utils::transform(m_options.mcuTargets, [this](McuTarget *t){ - return m_options.kitName(t); - })); auto layout = new QVBoxLayout(m_mcuTargetsGroupBox); layout->addWidget(m_mcuTargetsComboBox); connect(m_mcuTargetsComboBox, &QComboBox::currentTextChanged, this, &McuSupportOptionsWidget::showMcuTargetPackages); + connect(m_options.qtForMCUsSdkPackage, &McuPackage::changed, + this, &McuSupportOptionsWidget::populateMcuTargetsComboBox); } { @@ -147,15 +146,13 @@ McuSupportOptionsWidget::McuSupportOptionsWidget() void McuSupportOptionsWidget::updateStatus() { const McuTarget *mcuTarget = currentMcuTarget(); - if (!mcuTarget) - return; const bool cMakeAvailable = !CMakeProjectManager::CMakeToolManager::cmakeTools().isEmpty(); // Page elements { m_qtForMCUsSdkGroupBox->setVisible(cMakeAvailable); - const bool ready = cMakeAvailable && + const bool ready = cMakeAvailable && mcuTarget && m_options.qtForMCUsSdkPackage->status() == McuPackage::ValidPackage; m_mcuTargetsGroupBox->setVisible(ready); m_packagesGroupBox->setVisible(ready && !mcuTarget->packages().isEmpty()); @@ -163,7 +160,7 @@ void McuSupportOptionsWidget::updateStatus() } // Kit creation status - { + if (mcuTarget) { const bool mcuTargetValid = mcuTarget->isValid(); m_kitCreationInfoLabel->setType(mcuTargetValid ? Utils::InfoLabel::Ok : Utils::InfoLabel::NotOk); @@ -213,13 +210,15 @@ void McuSupportOptionsWidget::showMcuTargetPackages() McuTarget *McuSupportOptionsWidget::currentMcuTarget() const { const int mcuTargetIndex = m_mcuTargetsComboBox->currentIndex(); - return m_options.mcuTargets.isEmpty() ? nullptr : m_options.mcuTargets.at(mcuTargetIndex); + return (mcuTargetIndex == -1 || m_options.mcuTargets.isEmpty()) + ? nullptr + : m_options.mcuTargets.at(mcuTargetIndex); } void McuSupportOptionsWidget::showEvent(QShowEvent *event) { Q_UNUSED(event) - updateStatus(); + populateMcuTargetsComboBox(); } void McuSupportOptionsWidget::apply() @@ -241,6 +240,17 @@ void McuSupportOptionsWidget::apply() m_options.newKit(mcuTarget); } +void McuSupportOptionsWidget::populateMcuTargetsComboBox() +{ + m_options.populatePackagesAndTargets(); + m_mcuTargetsComboBox->clear(); + m_mcuTargetsComboBox->addItems( + Utils::transform(m_options.mcuTargets, [this](McuTarget *t){ + return m_options.kitName(t); + })); + updateStatus(); +} + McuSupportOptionsPage::McuSupportOptionsPage() { setId(Core::Id(Constants::SETTINGS_ID)); diff --git a/src/plugins/mcusupport/mcusupportsdk.cpp b/src/plugins/mcusupport/mcusupportsdk.cpp index 87ca70b610a..cf8d7672cd8 100644 --- a/src/plugins/mcusupport/mcusupportsdk.cpp +++ b/src/plugins/mcusupport/mcusupportsdk.cpp @@ -158,8 +158,8 @@ static McuPackage *createSeggerJLinkPackage() return result; } -void hardcodedTargetsAndPackages(const McuPackage* qtForMCUsSdkPackage, - QVector *packages, QVector *mcuTargets) +void hardcodedTargetsAndPackages(const Utils::FilePath &dir, QVector *packages, + QVector *mcuTargets) { McuToolChainPackage* armGccPackage = Sdk::createArmGccPackage(); McuPackage* stm32CubeFwF7SdkPackage = Sdk::createStm32CubeFwF7SdkPackage(); @@ -171,6 +171,8 @@ void hardcodedTargetsAndPackages(const McuPackage* qtForMCUsSdkPackage, armGccPackage, stm32CubeProgrammerPackage}; QVector nxpEvalPackages = { armGccPackage, seggerJLinkPackage}; + QVector renesasEvalPackages = { + armGccPackage, seggerJLinkPackage}; QVector desktopPackages = {}; *packages = { armGccPackage, stm32CubeFwF7SdkPackage, stm32CubeProgrammerPackage, evkbImxrt1050SdkPackage, @@ -179,28 +181,42 @@ void hardcodedTargetsAndPackages(const McuPackage* qtForMCUsSdkPackage, const QString vendorStm = "STM"; const QString vendorNxp = "NXP"; const QString vendorQt = "Qt"; + const QString vendorRenesas = "Renesas"; - // STM - auto mcuTarget = new McuTarget(vendorStm, "STM32F7508-DISCOVERY", stmEvalPackages, - armGccPackage); - mcuTarget->setColorDepth(32); - mcuTargets->append(mcuTarget); + const struct { + const QString &vendor; + const QString qulPlatform; + const QVector &packages; + McuToolChainPackage *toolchainPackage; + const QVector colorDepths; + } targets[] = { + {vendorNxp, "MIMXRT1050-EVK", nxpEvalPackages, armGccPackage, {16}}, + {vendorNxp, "MIMXRT1064-EVK", nxpEvalPackages, armGccPackage, {16}}, + {vendorQt, "Qt", desktopPackages, nullptr, {32}}, + {vendorRenesas, "RH850-D1M1A", renesasEvalPackages, armGccPackage, {32}}, + {vendorStm, "STM32F469I-DISCOVERY", stmEvalPackages, armGccPackage, {24}}, + {vendorStm, "STM32F7508-DISCOVERY", stmEvalPackages, armGccPackage, {32, 16}}, + {vendorStm, "STM32F769I-DISCOVERY", stmEvalPackages, armGccPackage, {32}}, + {vendorStm, "STM32H750B-DISCOVERY", stmEvalPackages, armGccPackage, {32}}, + {vendorStm, "STM32L4R9I-DISCOVERY", stmEvalPackages, armGccPackage, {24}}, + {vendorStm, "STM32L4R9I-EVAL", stmEvalPackages, armGccPackage, {24}} + }; - mcuTarget = new McuTarget(vendorStm, "STM32F7508-DISCOVERY", stmEvalPackages, armGccPackage); - mcuTarget->setColorDepth(16); - mcuTargets->append(mcuTarget); - - mcuTarget = new McuTarget(vendorStm, "STM32F769I-DISCOVERY", stmEvalPackages, armGccPackage); - mcuTargets->append(mcuTarget); - - // NXP - mcuTarget = new McuTarget(vendorNxp, "MIMXRT1050-EVK", nxpEvalPackages, armGccPackage); - mcuTargets->append(mcuTarget); - - // Desktop (Qt) - mcuTarget = new McuTarget(vendorQt, "Qt", desktopPackages, nullptr); - mcuTarget->setColorDepth(32); - mcuTargets->append(mcuTarget); + const QString QulTargetTemplate = + dir.toString() + "/lib/cmake/Qul/QulTargets/QulTargets_%1_%2.cmake"; + for (auto target : targets) { + for (int colorDepth : target.colorDepths) { + const QString QulTarget = + QulTargetTemplate.arg(target.qulPlatform, QString::number(colorDepth)); + if (!Utils::FilePath::fromUserInput(QulTarget).exists()) + continue; + auto mcuTarget = new McuTarget(target.vendor, target.qulPlatform, target.packages, + target.toolchainPackage); + if (target.colorDepths.count() > 1) + mcuTarget->setColorDepth(colorDepth); + mcuTargets->append(mcuTarget); + } + } } } // namespace Sdk diff --git a/src/plugins/mcusupport/mcusupportsdk.h b/src/plugins/mcusupport/mcusupportsdk.h index b3116810f24..444855b881a 100644 --- a/src/plugins/mcusupport/mcusupportsdk.h +++ b/src/plugins/mcusupport/mcusupportsdk.h @@ -37,7 +37,7 @@ namespace Sdk { McuPackage *createQtForMCUsPackage(); // Legacy: List of targets supported by Qt for MCUs 1.0 -void hardcodedTargetsAndPackages(const McuPackage* const qtForMCUsSdkPackage, +void hardcodedTargetsAndPackages(const Utils::FilePath &qulDir, QVector *packages, QVector *mcuTargets); } // namespace Sdk From d72e18da2d1703ad56a0cfa30fedb70e97c73174 Mon Sep 17 00:00:00 2001 From: Knud Dollereder Date: Tue, 17 Mar 2020 16:41:34 +0100 Subject: [PATCH 03/14] Use QEasing instead of Bezier to paint the curve segments This way "failure state" is reflected in the appearance of the curve item Change-Id: I997f86f1a6072eaf65c77f2df0afd53a80dc0d0e Reviewed-by: Thomas Hartmann --- .../components/curveeditor/curvesegment.cpp | 33 +++++++++++-------- .../components/curveeditor/curvesegment.h | 2 ++ .../animationcurveeditormodel.cpp | 7 ++++ 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src/plugins/qmldesigner/components/curveeditor/curvesegment.cpp b/src/plugins/qmldesigner/components/curveeditor/curvesegment.cpp index 9d70c2a8bf5..0bcb64e0357 100644 --- a/src/plugins/qmldesigner/components/curveeditor/curvesegment.cpp +++ b/src/plugins/qmldesigner/components/curveeditor/curvesegment.cpp @@ -224,6 +224,23 @@ QPainterPath CurveSegment::path() const return path; } +void CurveSegment::extendWithEasingCurve(QPainterPath &path, const QEasingCurve &curve) const +{ + auto mapEasing = [](const QPointF &start, const QPointF &end, const QPointF &pos) { + QPointF slope(end.x() - start.x(), end.y() - start.y()); + return QPointF(start.x() + slope.x() * pos.x(), start.y() + slope.y() * pos.y()); + }; + + QVector points = curve.toCubicSpline(); + int numSegments = points.count() / 3; + for (int i = 0; i < numSegments; i++) { + QPointF p1 = mapEasing(m_left.position(), m_right.position(), points.at(i * 3)); + QPointF p2 = mapEasing(m_left.position(), m_right.position(), points.at(i * 3 + 1)); + QPointF p3 = mapEasing(m_left.position(), m_right.position(), points.at(i * 3 + 2)); + path.cubicTo(p1, p2, p3); + } +} + void CurveSegment::extend(QPainterPath &path) const { if (interpolation() == Keyframe::Interpolation::Linear) { @@ -232,23 +249,11 @@ void CurveSegment::extend(QPainterPath &path) const path.lineTo(QPointF(m_right.position().x(), m_left.position().y())); path.lineTo(m_right.position()); } else if (interpolation() == Keyframe::Interpolation::Bezier) { - path.cubicTo(m_left.rightHandle(), m_right.leftHandle(), m_right.position()); + extendWithEasingCurve(path, easingCurve()); } else if (interpolation() == Keyframe::Interpolation::Easing) { - auto mapEasing = [](const QPointF &start, const QPointF &end, const QPointF &pos) { - QPointF slope(end.x() - start.x(), end.y() - start.y()); - return QPointF(start.x() + slope.x() * pos.x(), start.y() + slope.y() * pos.y()); - }; - QVariant data = m_right.data(); if (data.isValid() && data.type() == static_cast(QMetaType::QEasingCurve)) { - QVector points = data.value().toCubicSpline(); - int numSegments = points.count() / 3; - for (int i = 0; i < numSegments; i++) { - QPointF p1 = mapEasing(m_left.position(), m_right.position(), points.at(i * 3)); - QPointF p2 = mapEasing(m_left.position(), m_right.position(), points.at(i * 3 + 1)); - QPointF p3 = mapEasing(m_left.position(), m_right.position(), points.at(i * 3 + 2)); - path.cubicTo(p1, p2, p3); - } + extendWithEasingCurve(path, data.value()); } } } diff --git a/src/plugins/qmldesigner/components/curveeditor/curvesegment.h b/src/plugins/qmldesigner/components/curveeditor/curvesegment.h index dd5f9f8c550..d7b86aada07 100644 --- a/src/plugins/qmldesigner/components/curveeditor/curvesegment.h +++ b/src/plugins/qmldesigner/components/curveeditor/curvesegment.h @@ -61,6 +61,8 @@ public: void extend(QPainterPath &path) const; + void extendWithEasingCurve(QPainterPath &path, const QEasingCurve &curve) const; + QEasingCurve easingCurve() const; std::vector extrema() const; diff --git a/src/plugins/qmldesigner/components/timelineeditor/animationcurveeditormodel.cpp b/src/plugins/qmldesigner/components/timelineeditor/animationcurveeditormodel.cpp index d37be1cd357..35b89f6f170 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/animationcurveeditormodel.cpp +++ b/src/plugins/qmldesigner/components/timelineeditor/animationcurveeditormodel.cpp @@ -206,6 +206,13 @@ std::vector resolveSmallCurves( QEasingCurve curve = frame.data().toEasingCurve(); if (curve.toCubicSpline().count() == 3) { DesignTools::Keyframe &previous = out.back(); +#if 0 + // Do not resolve when two adjacent keyframes have the same value. + if (qFuzzyCompare(previous.position().y(), frame.position().y())) { + out.push_back(frame); + continue; + } +#endif DesignTools::AnimationCurve acurve(curve, previous.position(), frame.position()); previous.setRightHandle(acurve.keyframeAt(0).rightHandle()); out.push_back(acurve.keyframeAt(1)); From bb75966fc3bda936b6ca4baaddc74488583f7602 Mon Sep 17 00:00:00 2001 From: Mahmoud Badri Date: Wed, 18 Mar 2020 22:27:19 +0200 Subject: [PATCH 04/14] QmlDesigner: Fix keyframes not set in record mode in view 3D Task-number: QDS-1448 Change-Id: I8041fd3fe52ab6f9cdcbc1fdc4935d06299866bd Reviewed-by: Miikka Heikkinen Reviewed-by: Thomas Hartmann --- .../designercore/instances/nodeinstanceview.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index 48b7ac1c025..48d3b0e2360 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -1089,7 +1089,7 @@ ChangeValuesCommand NodeInstanceView::createChangeValueCommand(const QList containerList; - const bool reflectionFlag = m_puppetTransaction.isValid(); + const bool reflectionFlag = m_puppetTransaction.isValid() && (!currentTimeline().isValid() || !currentTimeline().isRecording()); foreach (const VariantProperty &property, propertyList) { ModelNode node = property.parentModelNode(); @@ -1245,10 +1245,10 @@ void NodeInstanceView::valuesModified(const ValuesModifiedCommand &command) if (hasInstanceForId(container.instanceId())) { NodeInstance instance = instanceForId(container.instanceId()); if (instance.isValid()) { - ModelNode node = instance.modelNode(); - VariantProperty property = instance.modelNode().variantProperty(container.name()); - if (property.value() != container.value()) - property.setValue(container.value()); + // QmlVisualNode is needed so timeline and state are updated + QmlVisualNode node = instance.modelNode(); + if (node.instanceValue(container.name()) != container.value()) + node.setVariantProperty(container.name(), container.value()); } } } From abca39aeae7ce347e877a6b360af79b8d865091c Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Tue, 10 Mar 2020 13:15:12 +0100 Subject: [PATCH 05/14] Android: Silence soft assert Android toolchains need a fully loaded Qt version manager. Change-Id: Icf3ae7d79923b438047b87cbb400d0b8a341914e Reviewed-by: Assam Boudjelthia Reviewed-by: hjk --- src/plugins/android/androidplugin.cpp | 5 ++++- src/plugins/android/androidtoolchain.cpp | 5 ----- src/plugins/android/androidtoolchain.h | 2 -- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/plugins/android/androidplugin.cpp b/src/plugins/android/androidplugin.cpp index 2e02d516492..bbf890dce77 100644 --- a/src/plugins/android/androidplugin.cpp +++ b/src/plugins/android/androidplugin.cpp @@ -180,7 +180,10 @@ void AndroidPlugin::kitsRestored() AndroidConfigurations::registerNewToolChains(); AndroidConfigurations::updateAutomaticKitList(); connect(QtSupport::QtVersionManager::instance(), &QtSupport::QtVersionManager::qtVersionsChanged, - AndroidConfigurations::instance(), &AndroidConfigurations::updateAutomaticKitList); + AndroidConfigurations::instance(), []() { + AndroidConfigurations::registerNewToolChains(); + AndroidConfigurations::updateAutomaticKitList(); + }); disconnect(KitManager::instance(), &KitManager::kitsLoaded, this, &AndroidPlugin::kitsRestored); } diff --git a/src/plugins/android/androidtoolchain.cpp b/src/plugins/android/androidtoolchain.cpp index 2c45eba1e59..5372fa3b3bd 100644 --- a/src/plugins/android/androidtoolchain.cpp +++ b/src/plugins/android/androidtoolchain.cpp @@ -169,11 +169,6 @@ AndroidToolChainFactory::AndroidToolChainFactory() setToolchainConstructor([] { return new AndroidToolChain; }); } -ToolChainList AndroidToolChainFactory::autoDetect(const ToolChainList &alreadyKnown) -{ - return autodetectToolChains(alreadyKnown); -} - static FilePath clangPlusPlusPath(const FilePath &clangPath) { return clangPath.parentDir().pathAppended( diff --git a/src/plugins/android/androidtoolchain.h b/src/plugins/android/androidtoolchain.h index 4002cef75fa..d530b3c25e5 100644 --- a/src/plugins/android/androidtoolchain.h +++ b/src/plugins/android/androidtoolchain.h @@ -67,8 +67,6 @@ class AndroidToolChainFactory : public ProjectExplorer::ToolChainFactory public: AndroidToolChainFactory(); - ToolChainList autoDetect(const ToolChainList &alreadyKnown) override; - class AndroidToolChainInformation { public: From db23f3e10b2ea294bb5b9f03ae5c6364dfdf5207 Mon Sep 17 00:00:00 2001 From: Assam Boudjelthia Date: Tue, 17 Mar 2020 13:52:42 +0200 Subject: [PATCH 06/14] Android: Handle ANDROID.APK role in QmakeProFileNode Change-Id: Ifac2377248f72c07f087fd4b294dc21e93a0ed7c Reviewed-by: hjk --- src/plugins/qmakeprojectmanager/qmakenodes.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.cpp b/src/plugins/qmakeprojectmanager/qmakenodes.cpp index 25397d92d65..01a49101405 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakenodes.cpp @@ -384,6 +384,8 @@ QVariant QmakeProFileNode::data(Core::Id role) const if (role == Android::Constants::AndroidTargets) return {}; + if (role == Android::Constants::AndroidApk) + return {}; // We can not use AppMan headers even at build time. if (role == "AppmanPackageDir") From 6cc080e055ed5c172367df0ce4c4be6eb812a471 Mon Sep 17 00:00:00 2001 From: Knud Dollereder Date: Mon, 16 Mar 2020 16:43:58 +0100 Subject: [PATCH 07/14] Make sure to neither load nor store invalid qeasing-curves Remove set-value-spinbox. Do not convert single-segment-qeasing-curves to bezier if they would become invalid. Do not store invalid qeasing-curves in the keyframe ModelNode. Make sure that a conversion does not produce nans Change-Id: I0688de55bf6b0ef6fe69d70d9192d852c8d6b895 Reviewed-by: Thomas Hartmann --- .../components/curveeditor/curveeditor.cpp | 7 ------- .../components/curveeditor/curvesegment.cpp | 20 ++++++++++++++++--- .../animationcurveeditormodel.cpp | 3 ++- .../timelineeditor/timelinewidget.cpp | 3 ++- 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/plugins/qmldesigner/components/curveeditor/curveeditor.cpp b/src/plugins/qmldesigner/components/curveeditor/curveeditor.cpp index f5b2ffae1b0..84788fbdead 100644 --- a/src/plugins/qmldesigner/components/curveeditor/curveeditor.cpp +++ b/src/plugins/qmldesigner/components/curveeditor/curveeditor.cpp @@ -106,13 +106,6 @@ QToolBar *CurveEditor::createToolBar(CurveEditorModel *model) Q_UNUSED(tangentStepAction); Q_UNUSED(tangentDefaultAction); - auto *valueBox = new QHBoxLayout; - valueBox->addWidget(new QLabel(tr("Value"))); - valueBox->addWidget(new QDoubleSpinBox); - auto *valueWidget = new QWidget; - valueWidget->setLayout(valueBox); - bar->addWidget(valueWidget); - auto *durationBox = new QHBoxLayout; auto *startSpin = new QSpinBox; auto *endSpin = new QSpinBox; diff --git a/src/plugins/qmldesigner/components/curveeditor/curvesegment.cpp b/src/plugins/qmldesigner/components/curveeditor/curvesegment.cpp index 0bcb64e0357..26a1dffc3ee 100644 --- a/src/plugins/qmldesigner/components/curveeditor/curvesegment.cpp +++ b/src/plugins/qmldesigner/components/curveeditor/curvesegment.cpp @@ -150,7 +150,18 @@ CurveSegment::CurveSegment(const Keyframe &left, const Keyframe &right) bool CurveSegment::isValid() const { - return m_left.position() != m_right.position(); + if (m_left.position() == m_right.position()) + return false; + + if (interpolation() == Keyframe::Interpolation::Undefined) + return false; + + if (interpolation() == Keyframe::Interpolation::Easing + || interpolation() == Keyframe::Interpolation::Bezier) { + if (qFuzzyCompare(m_left.position().y(), m_right.position().y())) + return false; + } + return true; } bool CurveSegment::containsX(double x) const @@ -263,6 +274,10 @@ QEasingCurve CurveSegment::easingCurve() const auto mapPosition = [this](const QPointF &position) { QPointF min = m_left.position(); QPointF max = m_right.position(); + if (qFuzzyCompare(min.y(), max.y())) + return QPointF((position.x() - min.x()) / (max.x() - min.x()), + (position.y() - min.y()) / (max.y())); + return QPointF((position.x() - min.x()) / (max.x() - min.x()), (position.y() - min.y()) / (max.y() - min.y())); }; @@ -270,8 +285,7 @@ QEasingCurve CurveSegment::easingCurve() const QEasingCurve curve; curve.addCubicBezierSegment(mapPosition(m_left.rightHandle()), mapPosition(m_right.leftHandle()), - mapPosition(m_right.position())); - + QPointF(1., 1.)); return curve; } diff --git a/src/plugins/qmldesigner/components/timelineeditor/animationcurveeditormodel.cpp b/src/plugins/qmldesigner/components/timelineeditor/animationcurveeditormodel.cpp index 35b89f6f170..023200f494d 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/animationcurveeditormodel.cpp +++ b/src/plugins/qmldesigner/components/timelineeditor/animationcurveeditormodel.cpp @@ -30,8 +30,8 @@ #include "qmltimeline.h" #include -#include #include +#include namespace QmlDesigner { @@ -204,6 +204,7 @@ std::vector resolveSmallCurves( for (auto &&frame : frames) { if (frame.hasData() && !out.empty()) { QEasingCurve curve = frame.data().toEasingCurve(); + // One-segment-curve: Since (0,0) is implicit => 3 if (curve.toCubicSpline().count() == 3) { DesignTools::Keyframe &previous = out.back(); #if 0 diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp b/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp index d80749ad082..508db1051b6 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp +++ b/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp @@ -355,7 +355,8 @@ void TimelineWidget::updateAnimationCurve(DesignTools::PropertyTreeItem *item) if (previous.isValid()) { if (frame.interpolation() == DesignTools::Keyframe::Interpolation::Bezier) { DesignTools::CurveSegment segment(previous, frame); - attachEasingCurve(pos.x(), segment.easingCurve(), group); + if (segment.isValid()) + attachEasingCurve(pos.x(), segment.easingCurve(), group); } else if (frame.interpolation() == DesignTools::Keyframe::Interpolation::Easing) { QVariant data = frame.data(); From a51a4f791531bff833081c317e9bc46af3dc379f Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Thu, 19 Mar 2020 08:17:55 +0100 Subject: [PATCH 08/14] Squish: Fix expected object properties Change-Id: I7f2e3ef4559fac83d17a06a231036be45f9e63bb Reviewed-by: Robert Loehning --- tests/system/suite_general/tst_session_handling/test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/system/suite_general/tst_session_handling/test.py b/tests/system/suite_general/tst_session_handling/test.py index f33cdab833f..efd3e395353 100644 --- a/tests/system/suite_general/tst_session_handling/test.py +++ b/tests/system/suite_general/tst_session_handling/test.py @@ -88,7 +88,7 @@ def switchSession(toSession): sessionView = ("{name='sessionView' type='ProjectExplorer::Internal::SessionView' visible='1' " "window=':Session Manager_ProjectExplorer::Internal::SessionDialog'}") mouseClick(waitForObjectItem(sessionView, toSession)) - clickButton(waitForObject("{name='btSwitch' text='Switch to' type='QPushButton' visible='1' " + clickButton(waitForObject("{name='btSwitch' type='QPushButton' visible='1' " "window=':Session Manager_ProjectExplorer::Internal::SessionDialog'}")) def createAndSwitchToSession(toSession): From 62ac17e60882d0bf9de4a4159bc779ff3dfb1390 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Thu, 19 Mar 2020 14:09:16 +0100 Subject: [PATCH 09/14] McuSupport: Fix build with gcc 5.3 Change-Id: Id9000f4c4874a7dadee79fafdeec0e4485e175ef Reviewed-by: hjk --- src/plugins/mcusupport/mcusupportsdk.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/plugins/mcusupport/mcusupportsdk.cpp b/src/plugins/mcusupport/mcusupportsdk.cpp index cf8d7672cd8..4b6c6fbd627 100644 --- a/src/plugins/mcusupport/mcusupportsdk.cpp +++ b/src/plugins/mcusupport/mcusupportsdk.cpp @@ -190,16 +190,16 @@ void hardcodedTargetsAndPackages(const Utils::FilePath &dir, QVector colorDepths; } targets[] = { - {vendorNxp, "MIMXRT1050-EVK", nxpEvalPackages, armGccPackage, {16}}, - {vendorNxp, "MIMXRT1064-EVK", nxpEvalPackages, armGccPackage, {16}}, - {vendorQt, "Qt", desktopPackages, nullptr, {32}}, - {vendorRenesas, "RH850-D1M1A", renesasEvalPackages, armGccPackage, {32}}, - {vendorStm, "STM32F469I-DISCOVERY", stmEvalPackages, armGccPackage, {24}}, - {vendorStm, "STM32F7508-DISCOVERY", stmEvalPackages, armGccPackage, {32, 16}}, - {vendorStm, "STM32F769I-DISCOVERY", stmEvalPackages, armGccPackage, {32}}, - {vendorStm, "STM32H750B-DISCOVERY", stmEvalPackages, armGccPackage, {32}}, - {vendorStm, "STM32L4R9I-DISCOVERY", stmEvalPackages, armGccPackage, {24}}, - {vendorStm, "STM32L4R9I-EVAL", stmEvalPackages, armGccPackage, {24}} + {vendorNxp, {"MIMXRT1050-EVK"}, nxpEvalPackages, armGccPackage, {16}}, + {vendorNxp, {"MIMXRT1064-EVK"}, nxpEvalPackages, armGccPackage, {16}}, + {vendorQt, {"Qt"}, desktopPackages, nullptr, {32}}, + {vendorRenesas, {"RH850-D1M1A"}, renesasEvalPackages, armGccPackage, {32}}, + {vendorStm, {"STM32F469I-DISCOVERY"}, stmEvalPackages, armGccPackage, {24}}, + {vendorStm, {"STM32F7508-DISCOVERY"}, stmEvalPackages, armGccPackage, {32, 16}}, + {vendorStm, {"STM32F769I-DISCOVERY"}, stmEvalPackages, armGccPackage, {32}}, + {vendorStm, {"STM32H750B-DISCOVERY"}, stmEvalPackages, armGccPackage, {32}}, + {vendorStm, {"STM32L4R9I-DISCOVERY"}, stmEvalPackages, armGccPackage, {24}}, + {vendorStm, {"STM32L4R9I-EVAL"}, stmEvalPackages, armGccPackage, {24}} }; const QString QulTargetTemplate = From f2f6452977933431bb80461438b0e749af3194a9 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 19 Mar 2020 10:46:41 +0100 Subject: [PATCH 10/14] Debugger: Fix some breakpoint file name display breakage For unclaimed breakpoints the wodking directory was shown as path. Amends commit a7dd0e50a28595eb976d77b1b23b8120b0a9395a. Change-Id: I9614b3672d32fb18e35dc98c12a60e3b27eebf84 Reviewed-by: Christian Stenger --- src/plugins/debugger/breakhandler.cpp | 6 +++--- src/plugins/debugger/breakpoint.cpp | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp index ae840e772c6..75782ae6d5e 100644 --- a/src/plugins/debugger/breakhandler.cpp +++ b/src/plugins/debugger/breakhandler.cpp @@ -1793,8 +1793,8 @@ void BreakpointItem::destroyMarker() FilePath BreakpointItem::markerFileName() const { // Some heuristics to find a "good" file name. - if (!m_parameters.fileName.exists()) - return FilePath::fromString(m_parameters.fileName.toFileInfo().absolutePath()); + if (m_parameters.fileName.exists()) + return FilePath::fromString(m_parameters.fileName.toFileInfo().absoluteFilePath()); const FilePath origFileName = requestedParameters().fileName; if (m_parameters.fileName.endsWith(origFileName.fileName())) @@ -2268,7 +2268,7 @@ void GlobalBreakpointItem::updateFileName(const FilePath &fileName) FilePath GlobalBreakpointItem::markerFileName() const { // Some heuristics to find a "good" file name. - if (!m_params.fileName.exists()) + if (m_params.fileName.exists()) return FilePath::fromString(m_params.fileName.toFileInfo().absoluteFilePath()); return m_params.fileName; } diff --git a/src/plugins/debugger/breakpoint.cpp b/src/plugins/debugger/breakpoint.cpp index 088f948e9ea..f47934af194 100644 --- a/src/plugins/debugger/breakpoint.cpp +++ b/src/plugins/debugger/breakpoint.cpp @@ -378,6 +378,7 @@ void BreakpointParameters::updateFromGdbOutput(const GdbMi &bkpt) QString name; if (!fullName.isEmpty()) { name = cleanupFullName(fullName); + fileName = Utils::FilePath::fromString(name); //if (data->markerFileName().isEmpty()) // data->setMarkerFileName(name); } else { From 4f9d1a045427dc8ed2118497dc4ea9181ce32dc4 Mon Sep 17 00:00:00 2001 From: Knud Dollereder Date: Thu, 19 Mar 2020 16:28:59 +0100 Subject: [PATCH 11/14] Clean pinned curves from the curveeditor when changing projects Fix a warning Task-number: QDS-1036 Change-Id: I9844ba6fac1e2ef8652f111e1ec7a51134015597 Reviewed-by: Thomas Hartmann --- .../qmldesigner/components/curveeditor/curveeditormodel.cpp | 3 +-- .../qmldesigner/components/curveeditor/detail/graphicsview.cpp | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/plugins/qmldesigner/components/curveeditor/curveeditormodel.cpp b/src/plugins/qmldesigner/components/curveeditor/curveeditormodel.cpp index e6f0f3e326a..2d87bd76d9c 100644 --- a/src/plugins/qmldesigner/components/curveeditor/curveeditormodel.cpp +++ b/src/plugins/qmldesigner/components/curveeditor/curveeditormodel.cpp @@ -108,8 +108,7 @@ void CurveEditorModel::reset(const std::vector &items) endResetModel(); - if (!pinned.empty()) - graphicsView()->reset(pinned); + graphicsView()->reset(pinned); if (SelectionModel *sm = selectionModel()) sm->select(sel); diff --git a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp index ee5f1e029c3..f7494b9dc80 100644 --- a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp +++ b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp @@ -564,7 +564,6 @@ void GraphicsView::drawRangeBar(QPainter *painter, const QRectF &rect) QRectF activeRect = QRectF(QPointF(mapTimeToX(m_model->minimumTime()), tTick), QPointF(mapTimeToX(m_model->maximumTime()), bTick)); - QColor rangeColor = m_style.rangeBarColor; painter->fillRect(activeRect, m_style.rangeBarColor); QColor handleColor(m_style.rangeBarCapsColor); From c6e03959d8ca5bc9019cc468e1278860eb7d0eaf Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Thu, 19 Mar 2020 17:26:15 +0100 Subject: [PATCH 12/14] Bump version Change-Id: I1139e1c10311fda9f46367dcb397fa674050f7da Reviewed-by: Eike Ziller --- cmake/QtCreatorIDEBranding.cmake | 6 +++--- qbs/modules/qtc/qtc.qbs | 6 +++--- qtcreator_ide_branding.pri | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/cmake/QtCreatorIDEBranding.cmake b/cmake/QtCreatorIDEBranding.cmake index 8f1bd0fb0e5..402acabfb86 100644 --- a/cmake/QtCreatorIDEBranding.cmake +++ b/cmake/QtCreatorIDEBranding.cmake @@ -1,9 +1,9 @@ #BINARY_ARTIFACTS_BRANCH = master #PROJECT_USER_FILE_EXTENSION = .user -set(IDE_VERSION "4.11.83") # The IDE version. -set(IDE_VERSION_COMPAT "4.11.83") # The IDE Compatibility version. -set(IDE_VERSION_DISPLAY "4.12.0-beta2") # The IDE display version. +set(IDE_VERSION "4.11.84") # The IDE version. +set(IDE_VERSION_COMPAT "4.11.84") # The IDE Compatibility version. +set(IDE_VERSION_DISPLAY "4.12.0-rc1") # The IDE display version. set(IDE_COPYRIGHT_YEAR "2020") # The IDE current copyright year. set(IDE_SETTINGSVARIANT "QtProject") # The IDE settings variation. diff --git a/qbs/modules/qtc/qtc.qbs b/qbs/modules/qtc/qtc.qbs index 0232974e056..2d7502469c3 100644 --- a/qbs/modules/qtc/qtc.qbs +++ b/qbs/modules/qtc/qtc.qbs @@ -4,16 +4,16 @@ import qbs.FileInfo import "qtc.js" as HelperFunctions Module { - property string qtcreator_display_version: '4.12.0-beta2' + property string qtcreator_display_version: '4.12.0-rc1' property string ide_version_major: '4' property string ide_version_minor: '11' - property string ide_version_release: '83' + property string ide_version_release: '84' property string qtcreator_version: ide_version_major + '.' + ide_version_minor + '.' + ide_version_release property string ide_compat_version_major: '4' property string ide_compat_version_minor: '11' - property string ide_compat_version_release: '83' + property string ide_compat_version_release: '84' property string qtcreator_compat_version: ide_compat_version_major + '.' + ide_compat_version_minor + '.' + ide_compat_version_release diff --git a/qtcreator_ide_branding.pri b/qtcreator_ide_branding.pri index 074242599e2..d31ffb4762a 100644 --- a/qtcreator_ide_branding.pri +++ b/qtcreator_ide_branding.pri @@ -1,8 +1,8 @@ -QTCREATOR_VERSION = 4.11.83 -QTCREATOR_COMPAT_VERSION = 4.11.83 -QTCREATOR_DISPLAY_VERSION = 4.12.0-beta2 +QTCREATOR_VERSION = 4.11.84 +QTCREATOR_COMPAT_VERSION = 4.11.84 +QTCREATOR_DISPLAY_VERSION = 4.12.0-rc1 QTCREATOR_COPYRIGHT_YEAR = 2020 -BINARY_ARTIFACTS_BRANCH = master +BINARY_ARTIFACTS_BRANCH = 4.12 IDE_DISPLAY_NAME = Qt Creator IDE_ID = qtcreator From b17de35ef416f43ef28506e8d24aaa636848a6b6 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Thu, 19 Mar 2020 15:15:01 +0100 Subject: [PATCH 13/14] Debugger: Add separator between cdb extension paths According to https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/ general-environment-variables extension paths have to be separated by a semicolon. Skipping the separator results in not being able to debug with cdb since the debugger cannot find the Qt Creator cdbextension in the now invalid extension path. Change-Id: Ic1c478dbb94f4e774e6742a3800dbcf6452898d5 Reviewed-by: Christian Kandeler Reviewed-by: Eike Ziller --- src/plugins/debugger/cdb/cdbengine.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp index 798013ed42f..7685dedaf6a 100644 --- a/src/plugins/debugger/cdb/cdbengine.cpp +++ b/src/plugins/debugger/cdb/cdbengine.cpp @@ -441,11 +441,12 @@ void CdbEngine::setupEngine() inferiorEnvironment.set(qtLoggingToConsoleKey, "0"); static const char cdbExtensionPathVariableC[] = "_NT_DEBUGGER_EXTENSION_PATH"; - inferiorEnvironment.prependOrSet(cdbExtensionPathVariableC, extensionFi.absolutePath()); + inferiorEnvironment.prependOrSet(cdbExtensionPathVariableC, extensionFi.absolutePath(), {";"}); const QByteArray oldCdbExtensionPath = qgetenv(cdbExtensionPathVariableC); if (!oldCdbExtensionPath.isEmpty()) { inferiorEnvironment.appendOrSet(cdbExtensionPathVariableC, - QString::fromLocal8Bit(oldCdbExtensionPath)); + QString::fromLocal8Bit(oldCdbExtensionPath), + {";"}); } m_process.setEnvironment(inferiorEnvironment); From 098ee51a9b9dd6400a8f00112ffcee239ef3e428 Mon Sep 17 00:00:00 2001 From: Andre Hartmann Date: Thu, 19 Mar 2020 20:33:49 +0100 Subject: [PATCH 14/14] VCS: Capture hashes with trailing caret MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Push-to-Gerrit dialog calls git branch -r --contains 3fa72ff^ for example. Change-Id: I6c0bd792dd5bf85dec61fa576fbd8bba3aa9f06d Reviewed-by: Miklós Márton Reviewed-by: Orgad Shaneh --- src/plugins/vcsbase/vcsoutputformatter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/vcsbase/vcsoutputformatter.cpp b/src/plugins/vcsbase/vcsoutputformatter.cpp index 9e454da544c..022b86506a7 100644 --- a/src/plugins/vcsbase/vcsoutputformatter.cpp +++ b/src/plugins/vcsbase/vcsoutputformatter.cpp @@ -38,7 +38,7 @@ VcsOutputFormatter::VcsOutputFormatter() : m_regexp( "(https?://\\S*)" // https://codereview.org/c/1234 "|(v[0-9]+\\.[0-9]+\\.[0-9]+[\\-A-Za-z0-9]*)" // v0.1.2-beta3 - "|([0-9a-f]{6,}(?:\\.\\.[0-9a-f]{6,})?)") // 789acf or 123abc..456cde + "|([0-9a-f]{6,}(?:\\.\\.[0-9a-f]{6,}|\\^)?)") // 789acf^ or 123abc..456cde { }