aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmake/QtCreatorIDEBranding.cmake6
-rw-r--r--doc/qtcreator/src/overview/creator-acknowledgements.qdoc4
-rw-r--r--qbs/modules/qtc/qtc.qbs6
-rw-r--r--qtcreator_ide_branding.pri8
-rw-r--r--src/plugins/android/androidplugin.cpp5
-rw-r--r--src/plugins/android/androidtoolchain.cpp5
-rw-r--r--src/plugins/android/androidtoolchain.h2
-rw-r--r--src/plugins/debugger/breakhandler.cpp6
-rw-r--r--src/plugins/debugger/breakpoint.cpp1
-rw-r--r--src/plugins/debugger/cdb/cdbengine.cpp5
-rw-r--r--src/plugins/mcusupport/mcusupportoptions.cpp33
-rw-r--r--src/plugins/mcusupport/mcusupportoptions.h7
-rw-r--r--src/plugins/mcusupport/mcusupportoptionspage.cpp30
-rw-r--r--src/plugins/mcusupport/mcusupportsdk.cpp64
-rw-r--r--src/plugins/mcusupport/mcusupportsdk.h2
-rw-r--r--src/plugins/qmakeprojectmanager/qmakenodes.cpp2
-rw-r--r--src/plugins/qmldesigner/components/curveeditor/curveeditor.cpp7
-rw-r--r--src/plugins/qmldesigner/components/curveeditor/curveeditormodel.cpp3
-rw-r--r--src/plugins/qmldesigner/components/curveeditor/curvesegment.cpp53
-rw-r--r--src/plugins/qmldesigner/components/curveeditor/curvesegment.h2
-rw-r--r--src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp1
-rw-r--r--src/plugins/qmldesigner/components/timelineeditor/animationcurveeditormodel.cpp10
-rw-r--r--src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp3
-rw-r--r--src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp10
-rw-r--r--src/plugins/vcsbase/vcsoutputformatter.cpp2
-rw-r--r--tests/system/suite_general/tst_session_handling/test.py2
26 files changed, 176 insertions, 103 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/doc/qtcreator/src/overview/creator-acknowledgements.qdoc b/doc/qtcreator/src/overview/creator-acknowledgements.qdoc
index 1364f75d395..0ed535bb416 100644
--- a/doc/qtcreator/src/overview/creator-acknowledgements.qdoc
+++ b/doc/qtcreator/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
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
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 84aa82f4c97..d140f08b0c2 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 0624892aab8..b074633c624 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:
diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp
index 930f63bf4fa..7c8920c0952 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 {
diff --git a/src/plugins/debugger/cdb/cdbengine.cpp b/src/plugins/debugger/cdb/cdbengine.cpp
index ea769c7fee0..45e3cb36416 100644
--- a/src/plugins/debugger/cdb/cdbengine.cpp
+++ b/src/plugins/debugger/cdb/cdbengine.cpp
@@ -440,11 +440,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);
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,23 +334,42 @@ 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();
qDeleteAll(mcuTargets);
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<McuTarget*> mcuTargets;
McuPackage *qtForMCUsSdkPackage = nullptr;
+ void setQulDir(const Utils::FilePath &dir);
+
QString kitName(const McuTarget* mcuTarget) const;
QList<ProjectExplorer::Kit *> 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<QStringList>(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<QStringList>(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..4b6c6fbd627 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<McuPackage *> *packages, QVector<McuTarget *> *mcuTargets)
+void hardcodedTargetsAndPackages(const Utils::FilePath &dir, QVector<McuPackage *> *packages,
+ QVector<McuTarget *> *mcuTargets)
{
McuToolChainPackage* armGccPackage = Sdk::createArmGccPackage();
McuPackage* stm32CubeFwF7SdkPackage = Sdk::createStm32CubeFwF7SdkPackage();
@@ -171,6 +171,8 @@ void hardcodedTargetsAndPackages(const McuPackage* qtForMCUsSdkPackage,
armGccPackage, stm32CubeProgrammerPackage};
QVector<McuPackage*> nxpEvalPackages = {
armGccPackage, seggerJLinkPackage};
+ QVector<McuPackage*> renesasEvalPackages = {
+ armGccPackage, seggerJLinkPackage};
QVector<McuPackage*> 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";
-
- // STM
- auto mcuTarget = new McuTarget(vendorStm, "STM32F7508-DISCOVERY", stmEvalPackages,
- armGccPackage);
- mcuTarget->setColorDepth(32);
- mcuTargets->append(mcuTarget);
-
- 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 vendorRenesas = "Renesas";
+
+ const struct {
+ const QString &vendor;
+ const QString qulPlatform;
+ const QVector<McuPackage*> &packages;
+ McuToolChainPackage *toolchainPackage;
+ const QVector<int> 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}}
+ };
+
+ 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<McuPackage*> *packages, QVector<McuTarget*> *mcuTargets);
} // namespace Sdk
diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.cpp b/src/plugins/qmakeprojectmanager/qmakenodes.cpp
index a09fdc6afd1..a944edc8bd7 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")
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/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<TreeItem *> &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/curvesegment.cpp b/src/plugins/qmldesigner/components/curveeditor/curvesegment.cpp
index 9d70c2a8bf5..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
@@ -224,6 +235,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<QPointF> 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 +260,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<int>(QMetaType::QEasingCurve)) {
- QVector<QPointF> points = data.value<QEasingCurve>().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<QEasingCurve>());
}
}
}
@@ -258,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()));
};
@@ -265,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/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<QPointF> extrema() const;
diff --git a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp
index 7028ae7029e..7c06939b7ee 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);
diff --git a/src/plugins/qmldesigner/components/timelineeditor/animationcurveeditormodel.cpp b/src/plugins/qmldesigner/components/timelineeditor/animationcurveeditormodel.cpp
index d37be1cd357..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 <bindingproperty.h>
-#include <variantproperty.h>
#include <theme.h>
+#include <variantproperty.h>
namespace QmlDesigner {
@@ -204,8 +204,16 @@ std::vector<DesignTools::Keyframe> 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
+ // 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));
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();
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<Varia
{
QVector<PropertyValueContainer> 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());
}
}
}
diff --git a/src/plugins/vcsbase/vcsoutputformatter.cpp b/src/plugins/vcsbase/vcsoutputformatter.cpp
index 2b2e2a3796a..4915dda4038 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
{
}
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):