From cebd7c03461b4b639863ed31936c60a725862a9f Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Fri, 20 Mar 2020 13:57:24 +0100 Subject: [PATCH 01/41] QmlDesigner: Silent asserts These conditions can happen. Change-Id: I52e0740ecd0c134d559a0100448622126cabbf0e Reviewed-by: Knud Dollereder Reviewed-by: Thomas Hartmann --- .../qmldesigner/designercore/model/rewriterview.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp index 541ed1ceaf3..8459891505b 100644 --- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp +++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp @@ -780,8 +780,8 @@ void RewriterView::setupCanonicalHashes() const for (const ModelNode &node : allModelNodes()) { int offset = nodeOffset(node); - QTC_ASSERT(offset > 0, qDebug() << Q_FUNC_INFO << "no offset" << node; return); - data.emplace_back(std::make_pair(node, offset)); + if (offset > 0) + data.emplace_back(std::make_pair(node, offset)); } std::sort(data.begin(), data.end(), [](myPair a, myPair b) { @@ -1121,7 +1121,8 @@ void RewriterView::restoreAuxiliaryData() setupCanonicalHashes(); - QTC_ASSERT(!m_canonicalIntModelNode.isEmpty(), return); + if (m_canonicalIntModelNode.isEmpty()) + return; const QString text = m_textModifier->text(); From 4da76ae0057c3c6e3682620dab1762e121ca208e Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Fri, 20 Mar 2020 13:48:41 +0100 Subject: [PATCH 02/41] QmlDesigner: Remove qDebug We allow such items in the item library now. Examples are materials, 3dObjects and animations. Change-Id: I5e5b614c9797e489db8f62e8f287e1dbfe91fc99 Reviewed-by: Aleksei German Reviewed-by: Knud Dollereder Reviewed-by: Thomas Hartmann --- .../qmldesigner/components/itemlibrary/itemlibrarymodel.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp index 37baf1118c6..3714f2bf076 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp @@ -186,12 +186,6 @@ void ItemLibraryModel::update(ItemLibraryInfo *itemLibraryInfo, Model *model) qCInfo(itemlibraryPopulate) << "required import: " << entry.requiredImport() << entryToImport(entry).toImportString(); - if (!isItem && valid) { - qDebug() << Q_FUNC_INFO; - qDebug() << metaInfo.typeName() << "is not a QtQuick.Item"; - qDebug() << Utils::transform(metaInfo.superClasses(), &NodeMetaInfo::typeName); - } - bool forceVisiblity = valid && NodeHints::fromItemLibraryEntry(entry).visibleInLibrary(); if (m_flowMode) { From 55250545da043846617ac54c46f09948be4f09b1 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Fri, 20 Mar 2020 19:58:24 +0100 Subject: [PATCH 03/41] QmlDesigner: Early reject identical AuxiliaryData No reason to do this check all over the application code. Change-Id: I99f00a115f919bc4c83beb98463d95b2f322644d Reviewed-by: Aleksei German Reviewed-by: Thomas Hartmann --- src/plugins/qmldesigner/designercore/model/model.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/qmldesigner/designercore/model/model.cpp b/src/plugins/qmldesigner/designercore/model/model.cpp index 871c04aeb17..4c35d6a315e 100644 --- a/src/plugins/qmldesigner/designercore/model/model.cpp +++ b/src/plugins/qmldesigner/designercore/model/model.cpp @@ -886,6 +886,9 @@ void ModelPrivate::notifyPropertiesAboutToBeRemoved(const QListauxiliaryData(name) == data) + return; + if (data.isValid()) node->setAuxiliaryData(name, data); else From 9639e07e3e79830a11e68abda39904e8d39d154d Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Mon, 23 Mar 2020 11:27:24 +0100 Subject: [PATCH 04/41] Doc: Fix docs for Core::VariableChooser Fixes: QTCREATORBUG-23620 Change-Id: I6adf1f035968a0a00ec4acfbda90ac52130a7e24 Reviewed-by: Eike Ziller --- src/plugins/coreplugin/variablechooser.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/plugins/coreplugin/variablechooser.cpp b/src/plugins/coreplugin/variablechooser.cpp index 46466623c45..57668180295 100644 --- a/src/plugins/coreplugin/variablechooser.cpp +++ b/src/plugins/coreplugin/variablechooser.cpp @@ -339,6 +339,7 @@ using namespace Internal; /*! * \class Core::VariableChooser + * \inmodule QtCreator * \brief The VariableChooser class is used to add a tool window for selecting \QC variables * to line edits, text edits or plain text edits. * @@ -351,8 +352,8 @@ using namespace Internal; * \image variablechooser.png "External Tools Preferences with Variable Chooser" * * The variable chooser monitors focus changes of all children of its parent widget. - * When a text control gets focus, the variable chooser checks if it has variable support set, - * either through the addVariableSupport() function. If the control supports variables, + * When a text control gets focus, the variable chooser checks if it has variable support set. + * If the control supports variables, * a tool button which opens the variable chooser is shown in it while it has focus. * * Supported text controls are QLineEdit, QTextEdit and QPlainTextEdit. @@ -375,7 +376,6 @@ using namespace Internal; * Property name that is checked for deciding if a widget supports \QC variables. * Can be manually set with * \c{textcontrol->setProperty(VariableChooser::kVariableSupportProperty, true)} - * \sa addVariableSupport() */ const char kVariableSupportProperty[] = "QtCreator.VariableSupport"; const char kVariableNameProperty[] = "QtCreator.VariableName"; @@ -383,7 +383,6 @@ const char kVariableNameProperty[] = "QtCreator.VariableName"; /*! * Creates a variable chooser that tracks all children of \a parent for variable support. * Ownership is also transferred to \a parent. - * \sa addVariableSupport() */ VariableChooser::VariableChooser(QWidget *parent) : QWidget(parent), @@ -406,6 +405,9 @@ VariableChooser::~VariableChooser() delete d; } +/*! + Adds the macro expander provider \a provider. +*/ void VariableChooser::addMacroExpanderProvider(const MacroExpanderProvider &provider) { auto item = new VariableGroupItem; @@ -415,8 +417,11 @@ void VariableChooser::addMacroExpanderProvider(const MacroExpanderProvider &prov } /*! - * Marks the control as supporting variables. - * \sa kVariableSupportProperty + * Marks the control \a textcontrol as supporting variables. + * + * If the control provides a variable to the macro expander itself, set + * \a ownName to the variable name to prevent the user from choosing the + * variable, which would lead to endless recursion. */ void VariableChooser::addSupportedWidget(QWidget *textcontrol, const QByteArray &ownName) { From 4a5377c635548dfb7aebb12034bcca8637fb686f Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Mon, 23 Mar 2020 10:04:29 +0100 Subject: [PATCH 05/41] QmlDesigner: Make zoom and background color persistent Task-number: QDS-1030 Change-Id: Ie3d1a244a137822848d75b14527a54d451eb0279 Reviewed-by: Aleksei German Reviewed-by: Thomas Hartmann --- .../components/componentcore/zoomaction.cpp | 51 ++++++++++--------- .../components/componentcore/zoomaction.h | 2 +- .../formeditor/backgroundaction.cpp | 9 ++++ .../components/formeditor/backgroundaction.h | 5 ++ .../formeditor/formeditorwidget.cpp | 26 +++++++++- 5 files changed, 67 insertions(+), 26 deletions(-) diff --git a/src/plugins/qmldesigner/components/componentcore/zoomaction.cpp b/src/plugins/qmldesigner/components/componentcore/zoomaction.cpp index 2f809712107..95ed102f82b 100644 --- a/src/plugins/qmldesigner/components/componentcore/zoomaction.cpp +++ b/src/plugins/qmldesigner/components/componentcore/zoomaction.cpp @@ -66,10 +66,27 @@ void ZoomAction::resetZoomLevel() void ZoomAction::setZoomLevel(float zoomLevel) { - m_zoomLevel = qBound(0.1f, zoomLevel, 16.0f); + if (qFuzzyCompare(m_zoomLevel, zoomLevel)) + return; + + m_zoomLevel = qBound(0.01f, zoomLevel, 16.0f); emit zoomLevelChanged(m_zoomLevel); } +//initial m_zoomLevel and m_currentComboBoxIndex +const QVector s_zoomFactors = {0.01f, 0.02f, 0.05f, 0.0625f, 0.125f, 0.25f, + 0.33f, 0.5f, 0.66f, 0.75f, 0.9f, 1.0f, 1.25f, + 1.5f, 1.75f, 2.0f, 3.0f, 4.0f, 6.0f, 8.0f, 10.0f, 16.0f }; + +int getZoomIndex(float zoom) +{ + for (int i = 0; i < s_zoomFactors.length(); i++) { + if (qFuzzyCompare(s_zoomFactors.at(i), zoom)) + return i; + } + return -1; +} + QWidget *ZoomAction::createWidget(QWidget *parent) { auto comboBox = new QComboBox(parent); @@ -79,28 +96,10 @@ QWidget *ZoomAction::createWidget(QWidget *parent) */ if (m_comboBoxModel.isNull()) { m_comboBoxModel = comboBox->model(); - comboBox->addItem(QLatin1String("1 %"), 0.01); - comboBox->addItem(QLatin1String("2 %"), 0.02); - comboBox->addItem(QLatin1String("5 %"), 0.05); - comboBox->addItem(QLatin1String("6.25 %"), 0.0625); - comboBox->addItem(QLatin1String("12.5 %"), 0.125); - comboBox->addItem(QLatin1String("25 %"), 0.25); - comboBox->addItem(QLatin1String("33 %"), 0.33); - comboBox->addItem(QLatin1String("50 %"), 0.5); - comboBox->addItem(QLatin1String("66 %"), 0.66); - comboBox->addItem(QLatin1String("75 %"), 0.75); - comboBox->addItem(QLatin1String("90 %"), 0.90); - comboBox->addItem(QLatin1String("100 %"), 1.0); // initial m_zoomLevel and m_currentComboBoxIndex - comboBox->addItem(QLatin1String("125 %"), 1.25); - comboBox->addItem(QLatin1String("150 %"), 1.5); - comboBox->addItem(QLatin1String("175 %"), 1.75); - comboBox->addItem(QLatin1String("200 %"), 2.0); - comboBox->addItem(QLatin1String("300 %"), 3.0); - comboBox->addItem(QLatin1String("400 %"), 4.0); - comboBox->addItem(QLatin1String("600 %"), 6.0); - comboBox->addItem(QLatin1String("800 %"), 8.0); - comboBox->addItem(QLatin1String("1000 %"), 10.0); - comboBox->addItem(QLatin1String("1600 %"), 16.0); + for (float z : s_zoomFactors) { + const QString name = QString::number(z * 100, 'g', 4) + " %"; + comboBox->addItem(name, z); + } } else { comboBox->setModel(m_comboBoxModel.data()); } @@ -126,6 +125,12 @@ QWidget *ZoomAction::createWidget(QWidget *parent) connect(this, &ZoomAction::indexChanged, comboBox, &QComboBox::setCurrentIndex); + connect(this, &ZoomAction::zoomLevelChanged, comboBox, [comboBox](double zoom){ + const int index = getZoomIndex(zoom); + if (comboBox->currentIndex() != index) + comboBox->setCurrentIndex(index); + }); + comboBox->setProperty("hideborder", true); comboBox->setMaximumWidth(qMax(comboBox->view()->sizeHintForColumn(0) / 2, 16)); return comboBox; diff --git a/src/plugins/qmldesigner/components/componentcore/zoomaction.h b/src/plugins/qmldesigner/components/componentcore/zoomaction.h index e93298d137a..1b178343e8d 100644 --- a/src/plugins/qmldesigner/components/componentcore/zoomaction.h +++ b/src/plugins/qmldesigner/components/componentcore/zoomaction.h @@ -47,10 +47,10 @@ public: void zoomIn(); void zoomOut(); void resetZoomLevel(); + void setZoomLevel(float zoomLevel); protected: QWidget *createWidget(QWidget *parent) override; - void setZoomLevel(float zoomLevel); signals: void zoomLevelChanged(float zoom); void indexChanged(int); diff --git a/src/plugins/qmldesigner/components/formeditor/backgroundaction.cpp b/src/plugins/qmldesigner/components/formeditor/backgroundaction.cpp index 6d3cef0fbda..a6c69ed365a 100644 --- a/src/plugins/qmldesigner/components/formeditor/backgroundaction.cpp +++ b/src/plugins/qmldesigner/components/formeditor/backgroundaction.cpp @@ -35,6 +35,13 @@ BackgroundAction::BackgroundAction(QObject *parent) : { } +void BackgroundAction::setColor(const QColor &color) +{ + if (m_comboBox) + m_comboBox->setCurrentIndex(colors().indexOf(color)); + +} + QIcon iconForColor(const QColor &color) { const int size = 16; QImage image(size, size, QImage::Format_ARGB32); @@ -69,6 +76,7 @@ QWidget *BackgroundAction::createWidget(QWidget *parent) comboBox->setProperty("hideborder", true); comboBox->setToolTip(tr("Set the color of the canvas.")); + m_comboBox = comboBox; return comboBox; } @@ -83,6 +91,7 @@ QList BackgroundAction::colors() static QColor alphaZero(Qt::transparent); static QList colorList = {alphaZero, QColor(Qt::black), + QColor("#4c4e50"), QColor(Qt::darkGray), QColor(Qt::lightGray), QColor(Qt::white)}; diff --git a/src/plugins/qmldesigner/components/formeditor/backgroundaction.h b/src/plugins/qmldesigner/components/formeditor/backgroundaction.h index 5e4dc9161b6..3059f84f452 100644 --- a/src/plugins/qmldesigner/components/formeditor/backgroundaction.h +++ b/src/plugins/qmldesigner/components/formeditor/backgroundaction.h @@ -25,6 +25,9 @@ #pragma once #include +#include + +QT_FORWARD_DECLARE_CLASS(QComboBox) namespace QmlDesigner { @@ -39,6 +42,7 @@ class BackgroundAction : public QWidgetAction Q_OBJECT public: explicit BackgroundAction(QObject *parent); + void setColor(const QColor &color); signals: void backgroundChanged(const QColor &color); @@ -51,6 +55,7 @@ private: private: static QList colors(); + QPointer m_comboBox; }; } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp index 76cd389960a..0380db2b081 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp @@ -195,10 +195,14 @@ void FormEditorWidget::changeRootItemHeight(const QString &heighText) void FormEditorWidget::changeBackgound(const QColor &color) { - if (color.alpha() == 0) + if (color.alpha() == 0) { m_graphicsView->activateCheckboardBackground(); - else + if (m_formEditorView->rootModelNode().hasAuxiliaryData("formeditorColor")) + m_formEditorView->rootModelNode().setAuxiliaryData("formeditorColor", {}); + } else { m_graphicsView->activateColoredBackground(color); + m_formEditorView->rootModelNode().setAuxiliaryData("formeditorColor", color); + } } void FormEditorWidget::registerActionAsCommand(QAction *action, Core::Id id, const QKeySequence &keysequence) @@ -236,6 +240,17 @@ void FormEditorWidget::updateActions() m_rootHeightAction->setLineEditText(m_formEditorView->rootModelNode().auxiliaryData("height").toString()); else m_rootHeightAction->clearLineEditText(); + + if (m_formEditorView->rootModelNode().hasAuxiliaryData("formeditorColor")) + m_backgroundAction->setColor(m_formEditorView->rootModelNode().auxiliaryData("formeditorColor").value()); + else + m_backgroundAction->setColor(Qt::transparent); + + if (m_formEditorView->rootModelNode().hasAuxiliaryData("formeditorZoom")) + m_zoomAction->setZoomLevel(m_formEditorView->rootModelNode().auxiliaryData("formeditorZoom").toDouble()); + else + m_zoomAction->setZoomLevel(1.0); + } else { m_rootWidthAction->clearLineEditText(); m_rootHeightAction->clearLineEditText(); @@ -314,6 +329,13 @@ void FormEditorWidget::setZoomLevel(double zoomLevel) m_graphicsView->resetTransform(); m_graphicsView->scale(zoomLevel, zoomLevel); + + if (zoomLevel == 1.0) { + if (m_formEditorView->rootModelNode().hasAuxiliaryData("formeditorZoom")) + m_formEditorView->rootModelNode().setAuxiliaryData("formeditorZoom", {}); + } else { + m_formEditorView->rootModelNode().setAuxiliaryData("formeditorZoom", zoomLevel); + } } void FormEditorWidget::setScene(FormEditorScene *scene) From e7dc34079856896a703e7bd128f94345139bdf64 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Fri, 20 Mar 2020 20:00:04 +0100 Subject: [PATCH 06/41] QmlDesigner: Only read AuxiliaryData from text if not set If the AuxiliaryData is already set then we should not override it. When the document is not changed AuxiliaryData is not written to QML. Therefore the AuxiliaryData might be outdated. Change-Id: Ife01e119ceb31c5f5ba88f8dae590e95ee6d1508 Reviewed-by: Aleksei German Reviewed-by: Thomas Hartmann --- .../qmldesigner/designercore/model/rewriterview.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp index 8459891505b..4d8ebd43152 100644 --- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp +++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp @@ -1106,8 +1106,11 @@ void checkNode(const QmlJS::SimpleReaderNode::Ptr &node, RewriterView *view) auto properties = node->properties(); for (auto i = properties.begin(); i != properties.end(); ++i) { - if (i.key() != "i") - modelNode.setAuxiliaryData(fixUpIllegalChars(i.key()).toUtf8(), i.value()); + if (i.key() != "i") { + const PropertyName name = fixUpIllegalChars(i.key()).toUtf8(); + if (!modelNode.hasAuxiliaryData(name)) + modelNode.setAuxiliaryData(name, i.value()); + } } checkChildNodes(node, view); From dde6aa0a51f84a0c039f94f0f7fc46281f6cf091 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 23 Mar 2020 14:05:36 +0100 Subject: [PATCH 07/41] WASM: Experimental -> DisabledByDefault Task-number: QTCREATORBUG-23733 Change-Id: I9f565e94967421e90b62c07bfdbde038de4b4b18 Reviewed-by: David Schulz --- src/plugins/webassembly/WebAssembly.json.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/webassembly/WebAssembly.json.in b/src/plugins/webassembly/WebAssembly.json.in index 1601a707b74..6c247c29fa9 100644 --- a/src/plugins/webassembly/WebAssembly.json.in +++ b/src/plugins/webassembly/WebAssembly.json.in @@ -2,7 +2,7 @@ \"Name\" : \"WebAssembly\", \"Version\" : \"$$QTCREATOR_VERSION\", \"CompatVersion\" : \"$$QTCREATOR_COMPAT_VERSION\", - \"Experimental\" : true, + \"DisabledByDefault\" : true, \"Vendor\" : \"The Qt Company Ltd\", \"Copyright\" : \"(C) $$QTCREATOR_COPYRIGHT_YEAR The Qt Company Ltd\", \"License\" : [ \"Commercial Usage\", From 0876926db427ad4ff82b0c093ce8b667a7c61134 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 23 Mar 2020 12:22:49 +0100 Subject: [PATCH 08/41] Shortcut settings: Fix wrong warning for shortcuts working in editor Only shortcut sequences that start with a key without modifier do not work in the editors. If the sequence starts with a shortcut with a modifier, the following onces can be anything. Examples are the default split related shortcuts, for example Ctrl+E,2 for split top/bottom. Change-Id: I05d30926a0fee8815f85558ce1b9a6e2f79dc545 Reviewed-by: David Schulz --- .../coreplugin/dialogs/shortcutsettings.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/plugins/coreplugin/dialogs/shortcutsettings.cpp b/src/plugins/coreplugin/dialogs/shortcutsettings.cpp index f75c215bf1d..8f2cd60b50e 100644 --- a/src/plugins/coreplugin/dialogs/shortcutsettings.cpp +++ b/src/plugins/coreplugin/dialogs/shortcutsettings.cpp @@ -105,16 +105,14 @@ static bool keySequenceIsValid(const QKeySequence &sequence) return true; } -static bool textKeySequence(const QKeySequence &sequence) +static bool isTextKeySequence(const QKeySequence &sequence) { if (sequence.isEmpty()) return false; - for (int i = 0; i < sequence.count(); ++i) { - int key = sequence[i]; - key &= ~(Qt::ShiftModifier | Qt::KeypadModifier); - if (key < Qt::Key_Escape) - return true; - } + int key = sequence[0]; + key &= ~(Qt::ShiftModifier | Qt::KeypadModifier); + if (key < Qt::Key_Escape) + return true; return false; } @@ -402,7 +400,7 @@ bool ShortcutSettingsWidget::validateShortcutEdit() const if (!valid) { m_warningLabel->setText( tr("Key sequence has potential conflicts. Show.")); - } else if (textKeySequence(currentKey)) { + } else if (isTextKeySequence(currentKey)) { m_warningLabel->setText(tr("Key sequence will not work in editor.")); } } else { From 9bf8610935bdce667708299911a20b84154cf412 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Mon, 23 Mar 2020 17:21:04 +0100 Subject: [PATCH 09/41] Doc: Update info on automatically registering CMake help Change-Id: Icdc010102055def6b87902c0c924f647f1f408da Reviewed-by: Cristian Adam --- .../images/qtcreator-cmakeexecutable.png | Bin 13050 -> 13755 bytes .../src/cmake/creator-projects-cmake.qdoc | 9 ++++++++- 2 files changed, 8 insertions(+), 1 deletion(-) mode change 100644 => 100755 doc/qtcreator/images/qtcreator-cmakeexecutable.png diff --git a/doc/qtcreator/images/qtcreator-cmakeexecutable.png b/doc/qtcreator/images/qtcreator-cmakeexecutable.png old mode 100644 new mode 100755 index b98085b4e0d701ff2cfc623d020b223e6c66187d..5c575887623ad14d18b015f8003fc57afc78b4d5 GIT binary patch literal 13755 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%0DTQW%D}q9!)~=bh=TPatHx2&^XYbr| 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 Rrva3gJYD@<);T3K0RVItM_K>? diff --git a/doc/qtcreator/src/cmake/creator-projects-cmake.qdoc b/doc/qtcreator/src/cmake/creator-projects-cmake.qdoc index a6d0ad66710..af8c1301050 100644 --- a/doc/qtcreator/src/cmake/creator-projects-cmake.qdoc +++ b/doc/qtcreator/src/cmake/creator-projects-cmake.qdoc @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2019 The Qt Company Ltd. +** Copyright (C) 2020 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Creator documentation. @@ -50,6 +50,10 @@ You can add paths to other CMake executables and use them in different build and run \l{glossary-buildandrun-kit}{kits}. + CMake documentation is installed in Qt help file format (.qch) when you + install CMake. It is automatically registered by \QC, and you can view it + in the Help mode. + \QC automatically runs CMake to refresh project information when you edit a \c CMakeLists.txt configuration file in a project. Project information is also automatically refreshed when you build the project. @@ -79,6 +83,9 @@ \li In the \uicontrol Path field, specify the path to the CMake executable. + \li In the \uicontrol {Help file} field, specify the path to the + CMake help file (.qch) provided by and installed with CMake. + \li Select the \uicontrol {Auto-create build directories} check box to automatically create build directories for CMake projects. From 00c030604067d81be15dc236202edfe4d0bdc838 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Tue, 24 Mar 2020 07:23:20 +0100 Subject: [PATCH 10/41] Editor: Add Qt Script mime type Fixes: QTCREATORBUG-23715 Change-Id: I4c7da375a11fb35c66e19769746267b2b661ee55 Reviewed-by: Eike Ziller --- src/plugins/qmljstools/QmlJSTools.json.in | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/plugins/qmljstools/QmlJSTools.json.in b/src/plugins/qmljstools/QmlJSTools.json.in index 0902c0ec9ef..2864d2593b0 100644 --- a/src/plugins/qmljstools/QmlJSTools.json.in +++ b/src/plugins/qmljstools/QmlJSTools.json.in @@ -62,6 +62,13 @@ \" Javascript module\", \" \", \" \", + \" \", + \" \", + \" \", + \" Qt Script file\", + \" \", + \" \", \"\" ] + } From da1e153f3d302e5c585ac531db3cf7aa1dd1be11 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Tue, 24 Mar 2020 10:06:30 +0100 Subject: [PATCH 11/41] Doc: Update info about Bare Metal devices Fixes: QTCREATORBUG-23723 Change-Id: Ic7289849bab5901cf9860067f1d127e69617a328 Reviewed-by: Denis Shienkov Reviewed-by: hjk --- .../images/creator-baremetal-device.png | Bin 11278 -> 0 bytes .../creator-baremetal-kit-for-project.png | Bin 23745 -> 0 bytes .../images/creator-baremetal-kits.png | Bin 22696 -> 0 bytes .../images/qtcreator-baremetal-devices.png | Bin 0 -> 8243 bytes .../images/qtcreator-baremetal-eblink.png | Bin 0 -> 15875 bytes .../images/qtcreator-baremetal-jlink.png | Bin 0 -> 17107 bytes .../images/qtcreator-baremetal-kit.png | Bin 0 -> 20849 bytes .../images/qtcreator-baremetal-openocd.png | Bin 0 -> 15820 bytes .../images/qtcreator-baremetal-stlink.png | Bin 0 -> 14299 bytes .../qtcreator-baremetal-uvision-simulator.png | Bin 0 -> 12286 bytes .../qtcreator-baremetal-uvision-st-link.png | Bin 0 -> 13579 bytes .../src/baremetal/creator-baremetal-dev.qdoc | 263 ++++++++++++++---- .../creator-baremetal-settings.qdocinc | 62 +++++ 13 files changed, 265 insertions(+), 60 deletions(-) delete mode 100644 doc/qtcreator/images/creator-baremetal-device.png delete mode 100644 doc/qtcreator/images/creator-baremetal-kit-for-project.png delete mode 100644 doc/qtcreator/images/creator-baremetal-kits.png create mode 100644 doc/qtcreator/images/qtcreator-baremetal-devices.png create mode 100644 doc/qtcreator/images/qtcreator-baremetal-eblink.png create mode 100644 doc/qtcreator/images/qtcreator-baremetal-jlink.png create mode 100644 doc/qtcreator/images/qtcreator-baremetal-kit.png create mode 100644 doc/qtcreator/images/qtcreator-baremetal-openocd.png create mode 100644 doc/qtcreator/images/qtcreator-baremetal-stlink.png create mode 100644 doc/qtcreator/images/qtcreator-baremetal-uvision-simulator.png create mode 100644 doc/qtcreator/images/qtcreator-baremetal-uvision-st-link.png create mode 100644 doc/qtcreator/src/baremetal/creator-baremetal-settings.qdocinc diff --git a/doc/qtcreator/images/creator-baremetal-device.png b/doc/qtcreator/images/creator-baremetal-device.png deleted file mode 100644 index ade88cc32db275b052c67ae9118e9aa98462e6a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11278 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 diff --git a/doc/qtcreator/images/creator-baremetal-kit-for-project.png b/doc/qtcreator/images/creator-baremetal-kit-for-project.png deleted file mode 100644 index 2651a755e35a206727209b699afeb2fb31f95c57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23745 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 DKJw&b diff --git a/doc/qtcreator/images/creator-baremetal-kits.png b/doc/qtcreator/images/creator-baremetal-kits.png deleted file mode 100644 index 161b97096c71a0f32d675521a9fa4b800800ad69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22696 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 diff --git a/doc/qtcreator/images/qtcreator-baremetal-devices.png b/doc/qtcreator/images/qtcreator-baremetal-devices.png new file mode 100644 index 0000000000000000000000000000000000000000..b928e7beb477b281b0828917fa1be872dd1ff39e GIT binary patch literal 8243 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 JtaD0e0s#NvYLNf{ literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-baremetal-eblink.png b/doc/qtcreator/images/qtcreator-baremetal-eblink.png new file mode 100644 index 0000000000000000000000000000000000000000..c372292b524f41a021420d41dd88f55d2dfa4c38 GIT binary patch literal 15875 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 literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-baremetal-jlink.png b/doc/qtcreator/images/qtcreator-baremetal-jlink.png new file mode 100644 index 0000000000000000000000000000000000000000..1e221766dde93c65fb994e122b4c8496c05eddd8 GIT binary patch literal 17107 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 FngF-?&42&^ literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-baremetal-kit.png b/doc/qtcreator/images/qtcreator-baremetal-kit.png new file mode 100644 index 0000000000000000000000000000000000000000..7f83bf6691fd8a00c081f775b71a6947f0dd30d5 GIT binary patch literal 20849 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 literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-baremetal-openocd.png b/doc/qtcreator/images/qtcreator-baremetal-openocd.png new file mode 100644 index 0000000000000000000000000000000000000000..d84b91ceec952573861b0e63e7391d8e68f85f25 GIT binary patch literal 15820 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 literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-baremetal-stlink.png b/doc/qtcreator/images/qtcreator-baremetal-stlink.png new file mode 100644 index 0000000000000000000000000000000000000000..f759eb355be28cb4744a428bf7f94c891e53d9cf GIT binary patch literal 14299 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 K&t;ucLK6V;&DIY9 literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-baremetal-uvision-simulator.png b/doc/qtcreator/images/qtcreator-baremetal-uvision-simulator.png new file mode 100644 index 0000000000000000000000000000000000000000..7b1609d0ee8f4895355bc303384ffaa5532deb9f GIT binary patch literal 12286 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 literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-baremetal-uvision-st-link.png b/doc/qtcreator/images/qtcreator-baremetal-uvision-st-link.png new file mode 100644 index 0000000000000000000000000000000000000000..5649904834feb8eaa94a852f986c196f10b5c4ce GIT binary patch literal 13579 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 \uicontrol {About Plugins} > - \uicontrol {Device Support} > \uicontrol {Bare Metal} to enable the - Bare Metal Device plugin. + \uicontrol {Device Support} > \uicontrol {Bare Metal}. \li Select \uicontrol {Restart Now} to restart \QC and load the plugin. - \li Select \uicontrol Tools > \uicontrol Options > \uicontrol Devices > - \uicontrol {Bare Metal} > \uicontrol Add > \uicontrol Default, - \uicontrol OpenOCD, or \uicontrol {ST-LINK Utility} to specify - connections to GDB servers or hardware debuggers: + \endlist - \image creator-baremetal-device.png "Bare Metal options" + \section1 Specifying Settings for Debug Server Providers - \list 1 + To create connections to bare metal devices using a debug server provider, + select \uicontrol Tools > \uicontrol Options > \uicontrol Devices + > \uicontrol {Bare Metal} > \uicontrol Add > \uicontrol Default. + The available settings depend on the debug server provider. - \li In the \uicontrol {Startup mode} field, select the mode to - start the GDB server or debugger in. The available modes - depend on the server or debugger. + \section2 EBlink - \li In the \uicontrol Host field, select the host name and port - number to connect to the GDB server or hardware debugger. + \l{https://github.com/EmBitz/EBlink}{EBlink} is an ARM Cortex-M debug tool + that supports squirrel scripting, live variables, and hot-plugging. - \li In the \uicontrol {Init commands} field, enter the commands - to execute when initializing the connection. + \image qtcreator-baremetal-eblink.png "Bare metal device options for EBlink" - \li In the \uicontrol {Reset commands} field, enter the commands - to execute when resetting the connection. + To specify settings for \EBlink: - \li Select \uicontrol Apply to add the GDB server or debugger. + \list 1 - \endlist + \include creator-baremetal-settings.qdocinc baremetal-common - \li Select \uicontrol Tools > \uicontrol Options > \uicontrol Devices > - \uicontrol Add > \uicontrol {Bare Metal Device} > - \uicontrol {Start Wizard}: + \li In the \uicontrol {Script file} field, enter the path + to a device script file. - \list 1 + \li In the \uicontrol {Verbosity level} field, enter the level of + verbose logging. - \li In the \uicontrol {GDB server provider} field, select a - GDB server or hardware debugger. + \li Select the \uicontrol {Connect under reset} check box to use + the ST-Link interface. Deselect the check box for hot-plugging. - \li Select \uicontrol Apply to add the device. + \li In the \uicontrol Type field, select the interface type. - \endlist + \li In the \uicontrol Speed field, enter the interface speed between + 120 and 8000 kiloherz (kHz). - \li Select \uicontrol Tools > \uicontrol Options > \uicontrol Kits > - \uicontrol Add to add a kit for building applications and running - them on bare metal devices: + \li Select the \uicontrol {Disable cache} check box to disable the + \EBlink flash cache. - \image creator-baremetal-kits.png "Bare Metal Device kits" + \li Select the \uicontrol {Auto shutdown} check box to automatically + shut down the \EBlink server after disconnecting. - \list 1 - - \li In the \uicontrol Name field, specify a name for the kit. - - \li In the \uicontrol {Device type} field, select - \uicontrol {Bare Metal Device}. - - \li In the \uicontrol Device field, select the bare metal device - for the kit. - - \li Select \uicontrol Apply to add the kit. - - \endlist - - \li Open a project for an application you want to develop for the - device. - - \li Select \uicontrol Projects > \uicontrol {Build & Run}, and then - select the kit for building the application and running it on the bare - metal device specified in the kit. - - \image creator-baremetal-kit-for-project.png "Adding a bare metal kit for a project" - - \li Select \uicontrol Run to specify run settings. - - Usually, you can use the default settings. + \include creator-baremetal-settings.qdocinc baremetal-init-reset \endlist + \section2 J-Link + + \l{https://www.segger.com/products/debug-probes/j-link/}{J-Link} is a line + of debug probes by Segger. + + \image qtcreator-baremetal-jlink.png "Bare metal device options for J-Link" + + To specify settings for J-Link debug probes: + + \list 1 + + \include creator-baremetal-settings.qdocinc baremetal-common + + \li In the \uicontrol {Host interface} field, select the connection + type, IP or USB, or use the default connection. + + \li In the \uicontrol {Target interface} field, select the target + interface type. + + \li In the \uicontrol Speed field, enter the interface speed in kHz. + + \li In the \uicontrol Device field, select the device to connect to. + + \li In the \uicontrol {Additional arguments} field, enter + arguments for the commands. + + \include creator-baremetal-settings.qdocinc baremetal-init-reset + + \endlist + + \section2 OpenOCD + + \l{http://openocd.org}{OpenOCD} (Open On-Chip Debugger) is an on-chip debug + solution for targets based on the ARM7 and ARM9 family with Embedded-ICE + (JTAG) facility. It enables source level debugging with the GDB compiled + for the ARM architecture. + + \image qtcreator-baremetal-openocd.png "Bare metal device options for OpenOCD" + + To specify settings for \OpenOCD: + + \list 1 + + \include creator-baremetal-settings.qdocinc baremetal-common + + \li In the \uicontrol {Root scripts directory} field, enter the + path to the directory that contains configuration scripts. + + \li In the \uicontrol {Configuration file} field, enter the path + to the device configuration file. + + \li In the \uicontrol {Additional arguments} field, enter + arguments for the commands. + + \include creator-baremetal-settings.qdocinc baremetal-init-reset + + \endlist + + \section2 St-Link + + \l{https://www.st.com/en/development-tools/stm32-programmers.html#products} + {ST-LINK Utility} is used for programming STM32 microcontrollers. + + \image qtcreator-baremetal-stlink.png "Bare metal device options for St-Link" + + To specify settings for St-Link: + + \list 1 + + \include creator-baremetal-settings.qdocinc baremetal-common + + \li In the \uicontrol {Verbosity level} field, enter the level of + verbose logging. + + \li Select the \uicontrol {Extended mode} check box to continue + listening for connection requests after after the connection + is closed. + + \li Select the \uicontrol {Reset on connection} check box to + reset the board when the connection is created. + + \li In the \uicontrol Version field, select the transport + layer type supported by the device. + + \include creator-baremetal-settings.qdocinc baremetal-init-reset + + \endlist + + \section2 uVision IDE + + \l{http://www.keil.com/support/man/docs/uv4/uv4_overview.htm}{uVision} is + an IDE for developing applications for embedded devices. Applications can + be debugged by using uVision Simulator or directly on hardware by using + St-Link. + + \section3 uVision Simulator + + \image qtcreator-baremetal-uvision-simulator.png "Bare metal device options for uVision Simulator" + + To specify settings for uVision Simulator or uVision St-Link Debugger: + + \list 1 + + \include creator-baremetal-settings.qdocinc uvision-common + + \li Select the \uicontrol {Limit speed to real-time} check box to limit + the connection speed. + + \li Select \uicontrol Apply to add the debug server provider. + + \endlist + + \section3 uVision St-Link Debugger + + \image qtcreator-baremetal-uvision-st-link.png "Bare metal device options for uVision St-Link" + + To specify settings for uVision St-Link Debugger: + + \list 1 + + \include creator-baremetal-settings.qdocinc uvision-common + + \li In the \uicontrol {Adapter options} field specify the adapter + interface type and speed in MHz. + + \li Select \uicontrol Apply to add the debug server provider. + + \endlist + + \section1 Adding Bare Metal Devices + + \image qtcreator-baremetal-devices.png "Bare Metal device options" + + To add a bare metal device: + + \list 1 + + \li Select \uicontrol Tools > \uicontrol Options > \uicontrol Devices + > \uicontrol Add > \uicontrol {Bare Metal Device} > + \uicontrol {Start Wizard}. + + \li In the \uicontrol {Debug server provider} field, select a debug + server provider. + + \li Select \uicontrol Apply to add the device. + + \endlist + + \section1 Building for and Running on Bare Metal Devices + + To add a kit for building applications and running them on bare metal + devices, select \uicontrol Tools > \uicontrol Options > \uicontrol Kits + > \uicontrol Add. For more information, see \l{Adding Kits}. + + \image qtcreator-baremetal-kit.png "Kit options for Bare Metal" + + You can build applications for and run them on bare metal devices + in the same way as for and on the desktop. For more information, see + \l{Building for Multiple Platforms} and \l{Running on Multiple Platforms}. */ diff --git a/doc/qtcreator/src/baremetal/creator-baremetal-settings.qdocinc b/doc/qtcreator/src/baremetal/creator-baremetal-settings.qdocinc new file mode 100644 index 00000000000..c893de2ecd3 --- /dev/null +++ b/doc/qtcreator/src/baremetal/creator-baremetal-settings.qdocinc @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Creator documentation. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** +****************************************************************************/ + +//! [baremetal-common] + + \li In the \uicontrol Name field, enter a name for the connection. + \li In the \uicontrol {Startup mode} field, select the mode to start + the debug server provider in. + \li In the \uicontrol Host field, select the host name and port number + to connect to the debug server provider. + \li In the \uicontrol {Executable file} field, enter the path to the + debug server provider executable. + +//! [baremetal-common] + + +//! [baremetal-init-reset] + + \li In the \uicontrol {Init commands} field, enter the commands + to execute when initializing the connection. + \li In the \uicontrol {Reset commands} field, enter the commands + to execute when resetting the connection. + \li Select \uicontrol Apply to add the debug server provider. + +//! [baremetal-init-reset] + + +//! [uvision-common] + + \li In the \uicontrol Name field, enter a name for the connection. + \li In the \uicontrol Host field, select the host name and port + number to connect to the debug server provider. + \li In the \uicontrol {Tools file path} field, enter the path to + the Keil toolset configuration file. + \li In the \uicontrol {Target device} field, select the device to + debug. + \li In the \uicontrol {Target driver} field, select the driver for + connecting to the target device. + +//! [uvision-common] From 56ce070ec94fa4d1f2ccab6a66b754ccc71edec8 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Tue, 24 Mar 2020 16:44:54 +0100 Subject: [PATCH 12/41] QmlDesigner: Fix crash Change-Id: I10733858d6fd9024419ce00356bd689d5bf99597 Reviewed-by: Knud Dollereder Reviewed-by: Aleksei German Reviewed-by: Tim Jenssen --- .../qmldesigner/components/propertyeditor/gradientmodel.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/qmldesigner/components/propertyeditor/gradientmodel.cpp b/src/plugins/qmldesigner/components/propertyeditor/gradientmodel.cpp index d4b1f471848..4cb3473158c 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/gradientmodel.cpp +++ b/src/plugins/qmldesigner/components/propertyeditor/gradientmodel.cpp @@ -185,6 +185,9 @@ void GradientModel::setColor(int index, const QColor &color) if (locked()) return; + if (!m_itemNode.isValid()) + return; + if (!m_itemNode.modelNode().isSelected()) return; From 6f858d93561dd10968f0d088a631c8f07e5387ce Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Mon, 23 Mar 2020 14:50:51 +0100 Subject: [PATCH 13/41] QmlDesigner: Add rootModelNode() to QmlItemNode Change-Id: I2e1987484ece809ae0629174243fe521ad68aaec Reviewed-by: Tim Jenssen --- src/plugins/qmldesigner/designercore/include/qmlitemnode.h | 1 + src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/src/plugins/qmldesigner/designercore/include/qmlitemnode.h b/src/plugins/qmldesigner/designercore/include/qmlitemnode.h index eeca75314ca..0905e93ed21 100644 --- a/src/plugins/qmldesigner/designercore/include/qmlitemnode.h +++ b/src/plugins/qmldesigner/designercore/include/qmlitemnode.h @@ -126,6 +126,7 @@ public: bool isFlowView() const; bool isFlowItem() const; bool isFlowActionArea() const; + ModelNode rootModelNode() const; }; class QmlFlowItemNode; diff --git a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp index c09a20a3f08..36358cf3b39 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp @@ -498,6 +498,13 @@ bool QmlItemNode::isFlowActionArea() const return modelNode().metaInfo().isSubclassOf("FlowView.FlowActionArea"); } +ModelNode QmlItemNode::rootModelNode() const +{ + if (view()) + return view()->rootModelNode(); + return {}; +} + void QmlItemNode::setSize(const QSizeF &size) { if (!hasBindingProperty("width") && !(anchors().instanceHasAnchor(AnchorLineRight) From a21e35f07972ebce999c8b9021d51c8c9b9340cb Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Mon, 23 Mar 2020 14:53:58 +0100 Subject: [PATCH 14/41] QmlDesigner: Add support for Flow items to QmlItemNode Add support for * FlowView.FlowWildcard * FlowView.FlowDecision Change-Id: Ib928c37202cb150a8c64c04b0118660ae3296865 Reviewed-by: Tim Jenssen --- .../designercore/include/qmlitemnode.h | 4 +- .../designercore/model/qmlitemnode.cpp | 40 ++++++++++++++++++- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/plugins/qmldesigner/designercore/include/qmlitemnode.h b/src/plugins/qmldesigner/designercore/include/qmlitemnode.h index 0905e93ed21..890d7deb3b5 100644 --- a/src/plugins/qmldesigner/designercore/include/qmlitemnode.h +++ b/src/plugins/qmldesigner/designercore/include/qmlitemnode.h @@ -142,6 +142,7 @@ public: void assignTargetFlowItem(const QmlFlowItemNode &flowItem); QmlFlowItemNode flowItemParent() const; void destroyTarget(); + ModelNode decisionNodeForTransition(const ModelNode &transition) const; }; class QMLDESIGNERCORE_EXPORT QmlFlowItemNode : public QmlItemNode @@ -162,7 +163,8 @@ public: static bool isValidQmlFlowViewNode(const ModelNode &modelNode); QList flowItems() const; ModelNode addTransition(const QmlFlowItemNode &from, const QmlFlowItemNode &to); - QList transitions() const; + const QList transitions() const; + const QList wildcards() const; }; diff --git a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp index 36358cf3b39..8eaa777dde2 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlitemnode.cpp @@ -53,6 +53,12 @@ bool QmlItemNode::isItemOrWindow(const ModelNode &modelNode) if (modelNode.metaInfo().isSubclassOf("QtQuick.Item")) return true; + if (modelNode.metaInfo().isSubclassOf("FlowView.FlowDecision")) + return true; + + if (modelNode.metaInfo().isSubclassOf("FlowView.FlowWildcard")) + return true; + if (modelNode.metaInfo().isGraphicalItem() && modelNode.isRootNode()) return true; @@ -214,6 +220,12 @@ bool QmlItemNode::instanceIsAnchoredByChildren() const bool QmlItemNode::instanceIsMovable() const { + if (modelNode().metaInfo().isValid() + && (modelNode().metaInfo().isSubclassOf("FlowView.FlowDecision") + || modelNode().metaInfo().isSubclassOf("FlowView.FlowWildcard") + )) + return true; + return nodeInstance().isMovable(); } @@ -597,6 +609,24 @@ void QmlFlowActionAreaNode::destroyTarget() } } +ModelNode QmlFlowActionAreaNode::decisionNodeForTransition(const ModelNode &transition) const +{ + ModelNode target = targetTransition(); + + if (target.isValid() && target.hasMetaInfo() && QmlVisualNode::isFlowTransition(target)) { + + ModelNode finalTarget = target.bindingProperty("to").resolveToModelNode(); + + if (finalTarget.isValid() && finalTarget.hasMetaInfo() && QmlVisualNode::isFlowDecision(finalTarget)) { + if (finalTarget.hasBindingProperty("targets") + && finalTarget.bindingProperty("targets").resolveToModelNodeList().contains(transition)) + return finalTarget; + } + } + + return {}; +} + bool QmlFlowViewNode::isValid() const { return isValidQmlFlowViewNode(modelNode()); @@ -633,7 +663,7 @@ ModelNode QmlFlowViewNode::addTransition(const QmlFlowItemNode &from, const QmlF return transition; } -QList QmlFlowViewNode::transitions() const +const QList QmlFlowViewNode::transitions() const { if (modelNode().nodeListProperty("flowTransitions").isValid()) return modelNode().nodeListProperty("flowTransitions").toModelNodeList(); @@ -643,4 +673,12 @@ QList QmlFlowViewNode::transitions() const } +const QList QmlFlowViewNode::wildcards() const +{ + if (modelNode().nodeListProperty("flowWildcards").isValid()) + return modelNode().nodeListProperty("flowWildcards").toModelNodeList(); + + return {}; +} + } //QmlDesigner From 94f7a927c3796612adb1adb7876b60cefd6e3b7a Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Mon, 23 Mar 2020 14:54:35 +0100 Subject: [PATCH 15/41] QmlDesigner: Implement isFlowDecision() and isFlowWildcard() Change-Id: I6ce2e0fe00049d40ee75781bd4b4eeb038fba640 Reviewed-by: Tim Jenssen --- .../designercore/include/qmlvisualnode.h | 4 ++++ .../designercore/model/qmlvisualnode.cpp | 24 ++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/plugins/qmldesigner/designercore/include/qmlvisualnode.h b/src/plugins/qmldesigner/designercore/include/qmlvisualnode.h index d2169b52ff7..65f3e96aa08 100644 --- a/src/plugins/qmldesigner/designercore/include/qmlvisualnode.h +++ b/src/plugins/qmldesigner/designercore/include/qmlvisualnode.h @@ -109,8 +109,12 @@ public: static NodeListProperty findSceneNodeProperty(AbstractView *view, qint32 sceneRootId); static bool isFlowTransition(const ModelNode &node); + static bool isFlowDecision(const ModelNode &node); + static bool isFlowWildcard(const ModelNode &node); bool isFlowTransition() const; + bool isFlowDecision() const; + bool isFlowWildcard() const; private: void setDoubleProperty(const PropertyName &name, double value); diff --git a/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp index 16caa385e67..fe2e2fd49e8 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp @@ -71,7 +71,9 @@ bool QmlVisualNode::isValidQmlVisualNode(const ModelNode &modelNode) { return isValidQmlObjectNode(modelNode) && modelNode.metaInfo().isValid() - && (isItemOr3DNode(modelNode) || modelNode.metaInfo().isSubclassOf("FlowView.FlowTransition")); + && (isItemOr3DNode(modelNode) || modelNode.metaInfo().isSubclassOf("FlowView.FlowTransition") + || modelNode.metaInfo().isSubclassOf("FlowView.FlowDecision") + || modelNode.metaInfo().isSubclassOf("FlowView.FlowWildcard")); } bool QmlVisualNode::isRootNode() const @@ -322,11 +324,31 @@ bool QmlVisualNode::isFlowTransition(const ModelNode &node) return node.metaInfo().isValid() && node.metaInfo().isSubclassOf("FlowView.FlowTransition"); } +bool QmlVisualNode::isFlowDecision(const ModelNode &node) +{ + return node.metaInfo().isValid() && node.metaInfo().isSubclassOf("FlowView.FlowDecision"); +} + +bool QmlVisualNode::isFlowWildcard(const ModelNode &node) +{ + return node.metaInfo().isValid() && node.metaInfo().isSubclassOf("FlowView.FlowWildcard"); +} + bool QmlVisualNode::isFlowTransition() const { return isFlowTransition(modelNode()); } +bool QmlVisualNode::isFlowDecision() const +{ + return isFlowDecision(modelNode()); +} + +bool QmlVisualNode::isFlowWildcard() const +{ + return isFlowWildcard(modelNode()); +} + QList toModelNodeList(const QList &qmlVisualNodeList) { QList modelNodeList; From 0bbed564bccc56408ba31a3bc6de8a0188579060 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Mon, 23 Mar 2020 14:55:25 +0100 Subject: [PATCH 16/41] QmlDesigner.PropertyEditor: Add joinConnection support This adds support for new auxillary property "joinConnection". Change-Id: Ibe54bb27e2a2aef219552f60bbdc929ea244b11f Reviewed-by: Tim Jenssen --- .../components/propertyeditor/propertyeditorqmlbackend.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp index 34f0ecbce0f..55ad0fb3535 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp +++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorqmlbackend.cpp @@ -161,6 +161,8 @@ QVariant properDefaultAuxiliaryProperties(const QmlObjectNode &qmlObjectNode, return 50; else if (propertyName == "customId") return QString(); + else if (propertyName == "joinConnection") + return false; return {}; } @@ -228,7 +230,7 @@ void PropertyEditorQmlBackend::setupAuxiliaryProperties(const QmlObjectNode &qml if (itemNode.isFlowTransition()) { propertyNames.append({"color", "width", "inOffset", "outOffset", "dash", "breakPoint"}); } else if (itemNode.isFlowItem()) { - propertyNames.append({"color", "width", "inOffset", "outOffset"}); + propertyNames.append({"color", "width", "inOffset", "outOffset", "joinConnection"}); } else if (itemNode.isFlowActionArea()) { propertyNames.append({"color", "width", "fillColor", "outOffset", "dash"}); } From b8891fafe31062ea2754851d6889fee05524225f Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Tue, 24 Mar 2020 16:50:57 +0100 Subject: [PATCH 17/41] QmlDesigner: Fix check Change-Id: I9838aa4f29223253eee0a0b8a70532e7081c2b0e Reviewed-by: Tim Jenssen --- .../qmldesigner/components/formeditor/formeditoritem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp index c07ee5233b9..3875aa8acb0 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp @@ -913,7 +913,7 @@ void FormEditorTransitionItem::paint(QPainter *painter, const QStyleOptionGraphi return; if (!(qmlItemNode().modelNode().hasBindingProperty("from") - && qmlItemNode().modelNode().hasBindingProperty("from"))) + && qmlItemNode().modelNode().hasBindingProperty("to"))) return; painter->save(); From 6181eb8ec0c2b40ea42a118364a05813befc12c7 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Tue, 24 Mar 2020 16:51:40 +0100 Subject: [PATCH 18/41] QmlDesigner: Add missing const Change-Id: I0330cb1342a791e60ce67ff41b0a63b73a329030 Reviewed-by: Tim Jenssen --- .../qmldesigner/components/formeditor/formeditoritem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp index 3875aa8acb0..2f164344b00 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp @@ -918,7 +918,7 @@ void FormEditorTransitionItem::paint(QPainter *painter, const QStyleOptionGraphi painter->save(); - const QmlFlowItemNode from = qmlItemNode().modelNode().bindingProperty("from").resolveToModelNode(); + QmlFlowItemNode from = qmlItemNode().modelNode().bindingProperty("from").resolveToModelNode(); const QmlFlowItemNode to = qmlItemNode().modelNode().bindingProperty("to").resolveToModelNode(); QmlFlowActionAreaNode areaNode = ModelNode(); From da6f5c8b7b8435269ac2775a5353b558254c8947 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Mon, 23 Mar 2020 14:59:19 +0100 Subject: [PATCH 19/41] QmlDesigner: Add FormEditorFlowDecisionItem and FormEditorFlowWildcardItem Those items are used to represent wildcards and decisions in flows. Change-Id: I14e55591c01aeb4105f4d0757a0ea2d00392358a Reviewed-by: Tim Jenssen --- .../components/formeditor/formeditoritem.cpp | 69 +++++++++++++++++++ .../components/formeditor/formeditoritem.h | 28 ++++++++ 2 files changed, 97 insertions(+) diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp index 2f164344b00..b45835dfd15 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp @@ -1011,4 +1011,73 @@ QTransform FormEditorItem::viewportTransform() const return scene()->views().first()->viewportTransform(); } +void FormEditorFlowDecisionItem::updateGeometry() +{ + prepareGeometryChange(); + m_selectionBoundingRect = QRectF(0,0, 200, 200); + m_paintedBoundingRect = m_selectionBoundingRect; + m_boundingRect = m_paintedBoundingRect; + setTransform(qmlItemNode().instanceTransformWithContentTransform()); + const QPointF pos = qmlItemNode().flowPosition(); + setTransform(QTransform::fromTranslate(pos.x(), pos.y())); +} + +void FormEditorFlowDecisionItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + if (!painter->isActive()) + return; + + painter->save(); + + QPen pen; + pen.setJoinStyle(Qt::MiterJoin); + pen.setCosmetic(true); + + QColor flowColor = "#e71919"; + + if (qmlItemNode().modelNode().hasAuxiliaryData("color")) + flowColor = qmlItemNode().modelNode().auxiliaryData("color").value(); + + const qreal scaleFactor = viewportTransform().m11(); + qreal width = 2; + + if (qmlItemNode().modelNode().hasAuxiliaryData("width")) + width = qmlItemNode().modelNode().auxiliaryData("width").toInt(); + + bool dash = false; + + if (qmlItemNode().modelNode().hasAuxiliaryData("dash")) + dash = qmlItemNode().modelNode().auxiliaryData("dash").toBool(); + + pen.setColor(flowColor); + if (dash) + pen.setStyle(Qt::DashLine); + else + pen.setStyle(Qt::SolidLine); + + pen.setWidthF(width); + pen.setCosmetic(true); + painter->setPen(pen); + + if (qmlItemNode().modelNode().hasAuxiliaryData("fillColor")) { + + const QColor fillColor = qmlItemNode().modelNode().auxiliaryData("fillColor").value(); + painter->fillRect(boundingRect(), fillColor); + } + + painter->drawRect(boundingRect()); + + painter->restore(); +} + +bool FormEditorFlowDecisionItem::flowHitTest(const QPointF &point) const +{ + return true; +} + +void FormEditorFlowWildcardItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + FormEditorFlowDecisionItem::paint(painter, option, widget); +} + } //QmlDesigner diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.h b/src/plugins/qmldesigner/components/formeditor/formeditoritem.h index 3e38ff3c000..d725afd0b05 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.h @@ -1,3 +1,4 @@ + /**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. @@ -196,6 +197,33 @@ private: mutable bool m_hitTest = false; }; +class FormEditorFlowDecisionItem : FormEditorFlowItem +{ + friend class QmlDesigner::FormEditorScene; + +public: + void updateGeometry() override; + void paint(QPainter *painter, const QStyleOptionGraphicsItem * option, QWidget * widget = nullptr ) override; + bool flowHitTest(const QPointF &point) const override; + +protected: + FormEditorFlowDecisionItem(const QmlItemNode &qmlItemNode, FormEditorScene* scene) + : FormEditorFlowItem(qmlItemNode, scene) + {} +}; + +class FormEditorFlowWildcardItem : FormEditorFlowDecisionItem +{ + friend class QmlDesigner::FormEditorScene; + +public: + void paint(QPainter *painter, const QStyleOptionGraphicsItem * option, QWidget * widget = nullptr ) override; + +protected: + FormEditorFlowWildcardItem(const QmlItemNode &qmlItemNode, FormEditorScene* scene) + : FormEditorFlowDecisionItem(qmlItemNode, scene) + {} +}; inline int FormEditorItem::type() const { From 0e2144135c08e9c003b3b4c3e81ee842d30e7b94 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Mon, 23 Mar 2020 15:53:42 +0100 Subject: [PATCH 20/41] QmlDesigner: Create decision and wildcard items in form editor Change-Id: Ib33c6fc9bc22885281b7172fe52e5326b6744cf3 Reviewed-by: Tim Jenssen --- .../components/formeditor/formeditorscene.cpp | 4 ++++ .../components/formeditor/formeditorscene.h | 4 +++- .../components/formeditor/formeditorview.cpp | 14 ++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp index 3f2e83bf1ac..1812ee0dc24 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp @@ -178,6 +178,10 @@ FormEditorItem *FormEditorScene::addFormEditorItem(const QmlItemNode &qmlItemNod formEditorItem = new FormEditorFlowActionItem(qmlItemNode, this); else if (type == FlowTransition) formEditorItem = new FormEditorTransitionItem(qmlItemNode, this); + else if (type == FlowDecision) + formEditorItem = new FormEditorFlowDecisionItem(qmlItemNode, this); + else if (type == FlowWildcard) + formEditorItem = new FormEditorFlowWildcardItem(qmlItemNode, this); else formEditorItem = new FormEditorItem(qmlItemNode, this); diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorscene.h b/src/plugins/qmldesigner/components/formeditor/formeditorscene.h index 5c4f0875755..2ab2dc273e3 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorscene.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditorscene.h @@ -55,7 +55,9 @@ public: Default, Flow, FlowAction, - FlowTransition + FlowTransition, + FlowDecision, + FlowWildcard }; FormEditorScene(FormEditorWidget *widget, FormEditorView *editorView); diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp index c37ff56cc04..6149b248ce9 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp @@ -105,6 +105,16 @@ void FormEditorView::setupFormEditorItemTree(const QmlItemNode &qmlItemNode) if (qmlItemNode.hasNodeParent()) m_scene->reparentItem(qmlItemNode, qmlItemNode.modelParentItem()); m_scene->synchronizeTransformation(m_scene->itemForQmlItemNode(qmlItemNode)); + } else if (qmlItemNode.isFlowDecision()) { + m_scene->addFormEditorItem(qmlItemNode, FormEditorScene::FlowDecision); + if (qmlItemNode.hasNodeParent()) + m_scene->reparentItem(qmlItemNode, qmlItemNode.modelParentItem()); + m_scene->synchronizeTransformation(m_scene->itemForQmlItemNode(qmlItemNode)); + } else if (qmlItemNode.isFlowWildcard()) { + m_scene->addFormEditorItem(qmlItemNode, FormEditorScene::FlowWildcard); + if (qmlItemNode.hasNodeParent()) + m_scene->reparentItem(qmlItemNode, qmlItemNode.modelParentItem()); + m_scene->synchronizeTransformation(m_scene->itemForQmlItemNode(qmlItemNode)); } else if (qmlItemNode.isFlowActionArea()) { m_scene->addFormEditorItem(qmlItemNode.toQmlItemNode(), FormEditorScene::FlowAction); m_scene->synchronizeParent(qmlItemNode.toQmlItemNode()); @@ -134,6 +144,10 @@ void FormEditorView::setupFormEditorItemTree(const QmlItemNode &qmlItemNode) for (const QmlObjectNode &nextNode : qmlItemNode.allDirectSubNodes()) { if (QmlVisualNode::isValidQmlVisualNode(nextNode) && nextNode.toQmlVisualNode().isFlowTransition()) { setupFormEditorItemTree(nextNode.toQmlItemNode()); + } else if (QmlVisualNode::isValidQmlVisualNode(nextNode) && nextNode.toQmlVisualNode().isFlowDecision()) { + setupFormEditorItemTree(nextNode.toQmlItemNode()); + } else if (QmlVisualNode::isValidQmlVisualNode(nextNode) && nextNode.toQmlVisualNode().isFlowWildcard()) { + setupFormEditorItemTree(nextNode.toQmlItemNode()); } } } else { From 03aed15fe92a48597526523cf93a565633faa684 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Tue, 24 Mar 2020 16:55:50 +0100 Subject: [PATCH 21/41] QmlDesigner: Paint indicator for start in flow Change-Id: I1db165489e89bed1db22433b961caff080b87305 Reviewed-by: Tim Jenssen --- .../components/formeditor/formeditoritem.cpp | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp index b45835dfd15..3d852a2fb00 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp @@ -924,14 +924,29 @@ void FormEditorTransitionItem::paint(QPainter *painter, const QStyleOptionGraphi QmlFlowActionAreaNode areaNode = ModelNode(); if (from.isValid() && to.isValid()) + + bool isStartLine = false; + for (const QmlFlowActionAreaNode &area : from.flowActionAreas()) { if (area.targetTransition() == qmlItemNode().modelNode()) areaNode = area; } + } else { + if (from == qmlItemNode().rootModelNode()) { + isStartLine = true; + } else { + + } + } + QRectF fromRect = QmlItemNode(from).instanceBoundingRect(); fromRect.translate(QmlItemNode(from).flowPosition()); + if (isStartLine) { + fromRect = QRectF(0,0,100,100); + fromRect.translate(QmlItemNode(to).flowPosition()- QPoint(200, 0)); + } if (areaNode.isValid()) { fromRect = QmlItemNode(areaNode).instanceBoundingRect(); @@ -942,6 +957,11 @@ void FormEditorTransitionItem::paint(QPainter *painter, const QStyleOptionGraphi QRectF toRect = QmlItemNode(to).instanceBoundingRect(); toRect.translate(QmlItemNode(to).flowPosition()); + if (isStartLine) { + fromRect = QRectF(0,0,50,50); + fromRect.translate(QmlItemNode(to).flowPosition() + QPoint(-120, toRect.height() / 2 - 25)); + } + toRect.translate(-pos()); fromRect.translate(-pos()); @@ -961,6 +981,9 @@ void FormEditorTransitionItem::paint(QPainter *painter, const QStyleOptionGraphi QColor color = "#e71919"; + if (isStartLine) + color = "blue"; + bool dash = false; if (qmlItemNode().modelNode().hasAuxiliaryData("color")) @@ -985,6 +1008,23 @@ void FormEditorTransitionItem::paint(QPainter *painter, const QStyleOptionGraphi paintConnection(painter, fromRect, toRect, width, adjustedWidth ,color, dash, outOffset, inOffset, breakOffset); + if (isStartLine) { + QPen pen; + pen.setCosmetic(true); + + pen.setColor(color); + painter->setPen(pen); + painter->drawRect(fromRect); + + if (scaleFactor > 0.4) { + painter->drawLine(fromRect.topRight() + QPoint(20,10), fromRect.bottomRight() + QPoint(20,-10)); + painter->drawLine(fromRect.topRight() + QPoint(25,12), fromRect.bottomRight() + QPoint(25,-12)); + painter->drawLine(fromRect.topRight() + QPoint(30,15), fromRect.bottomRight() + QPoint(30,-15)); + painter->drawLine(fromRect.topRight() + QPoint(35,17), fromRect.bottomRight() + QPoint(35,-17)); + painter->drawLine(fromRect.topRight() + QPoint(40,20), fromRect.bottomRight() + QPoint(40,-20)); + } + } + painter->restore(); } From df9081f38e22c90886ffc55104488d537820a1b6 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Tue, 24 Mar 2020 16:58:32 +0100 Subject: [PATCH 22/41] QmlDesigner: Fix crash Change-Id: I31c6f8ce2b506af6d16887719a39319e6946a161 Reviewed-by: Tim Jenssen --- .../qmldesigner/components/formeditor/formeditoritem.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp index 3d852a2fb00..41a593e9cd8 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp @@ -939,6 +939,8 @@ void FormEditorTransitionItem::paint(QPainter *painter, const QStyleOptionGraphi } } + if (!from.modelNode().isValid()) + return; QRectF fromRect = QmlItemNode(from).instanceBoundingRect(); fromRect.translate(QmlItemNode(from).flowPosition()); From df1a21f92f957695f86276bc984f63b90cbbd76f Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Tue, 24 Mar 2020 16:57:36 +0100 Subject: [PATCH 23/41] QmlDesigner: Implement joinConnection This flag indicates that the connections are ignoring the FlowActions and connect the FlowItems directly. Change-Id: I84587700e406d03ed9e30c224d93f46d2367034f Reviewed-by: Tim Jenssen --- .../qmldesigner/components/formeditor/formeditoritem.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp index 41a593e9cd8..b83606bd8a1 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp @@ -923,6 +923,7 @@ void FormEditorTransitionItem::paint(QPainter *painter, const QStyleOptionGraphi QmlFlowActionAreaNode areaNode = ModelNode(); + bool joinConnection = false; if (from.isValid() && to.isValid()) bool isStartLine = false; @@ -931,6 +932,8 @@ void FormEditorTransitionItem::paint(QPainter *painter, const QStyleOptionGraphi if (area.targetTransition() == qmlItemNode().modelNode()) areaNode = area; } + if (from.modelNode().hasAuxiliaryData("joinConnection")) + joinConnection = from.modelNode().auxiliaryData("joinConnection").toBool(); } else { if (from == qmlItemNode().rootModelNode()) { isStartLine = true; @@ -950,7 +953,7 @@ void FormEditorTransitionItem::paint(QPainter *painter, const QStyleOptionGraphi fromRect.translate(QmlItemNode(to).flowPosition()- QPoint(200, 0)); } - if (areaNode.isValid()) { + if (!joinConnection && areaNode.isValid()) { fromRect = QmlItemNode(areaNode).instanceBoundingRect(); fromRect.translate(QmlItemNode(from).flowPosition()); fromRect.translate(areaNode.instancePosition()); From fbc177282e47b80141d6ea259f4b19f86447cd79 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Tue, 24 Mar 2020 16:58:11 +0100 Subject: [PATCH 24/41] QmlDesigner: Relax condition The to item can be invalid in some cases. Change-Id: I0bd7a3f6ee2dc3aa7981ad266945cdceaaff647a Reviewed-by: Tim Jenssen --- .../qmldesigner/components/formeditor/formeditoritem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp index b83606bd8a1..0515d79863d 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp @@ -924,10 +924,10 @@ void FormEditorTransitionItem::paint(QPainter *painter, const QStyleOptionGraphi QmlFlowActionAreaNode areaNode = ModelNode(); bool joinConnection = false; - if (from.isValid() && to.isValid()) bool isStartLine = false; + if (from.isValid()) { for (const QmlFlowActionAreaNode &area : from.flowActionAreas()) { if (area.targetTransition() == qmlItemNode().modelNode()) areaNode = area; From 208fbe18c1c329f63d1ddd96e82c604ce8cb2d75 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Tue, 24 Mar 2020 16:59:43 +0100 Subject: [PATCH 25/41] QmlDesigner: Implement proper connection of FlowDecision and FlowWildcard This adds the code to draw connections from and to FlowDecision and FlowWildcard. Change-Id: I8f465ac70b92b26ca32eaeb45590e18e7db13693 Reviewed-by: Tim Jenssen --- .../components/formeditor/formeditoritem.cpp | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp index 0515d79863d..31a5e6cab64 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp @@ -927,10 +927,20 @@ void FormEditorTransitionItem::paint(QPainter *painter, const QStyleOptionGraphi bool isStartLine = false; + bool isWildcardLine = false; + if (from.isValid()) { for (const QmlFlowActionAreaNode &area : from.flowActionAreas()) { - if (area.targetTransition() == qmlItemNode().modelNode()) + ModelNode target = area.targetTransition(); + if (target == qmlItemNode().modelNode()) { areaNode = area; + } else { + const ModelNode decisionNode = area.decisionNodeForTransition(qmlItemNode().modelNode()); + if (decisionNode.isValid()) { + from = decisionNode; + areaNode = ModelNode(); + } + } } if (from.modelNode().hasAuxiliaryData("joinConnection")) joinConnection = from.modelNode().auxiliaryData("joinConnection").toBool(); @@ -938,6 +948,12 @@ void FormEditorTransitionItem::paint(QPainter *painter, const QStyleOptionGraphi if (from == qmlItemNode().rootModelNode()) { isStartLine = true; } else { + for (const ModelNode wildcard : QmlFlowViewNode(qmlItemNode().rootModelNode()).wildcards()) { + if (wildcard.bindingProperty("target").resolveToModelNode() == qmlItemNode().modelNode()) { + from = wildcard; + isWildcardLine = true; + } + } } } @@ -946,6 +962,11 @@ void FormEditorTransitionItem::paint(QPainter *painter, const QStyleOptionGraphi return; QRectF fromRect = QmlItemNode(from).instanceBoundingRect(); + if (QmlItemNode(from).isFlowDecision()) + fromRect = QRectF(0,0,200,200); + + if (QmlItemNode(from).isFlowWildcard()) + fromRect = QRectF(0,0,200,200); fromRect.translate(QmlItemNode(from).flowPosition()); if (isStartLine) { @@ -960,6 +981,9 @@ void FormEditorTransitionItem::paint(QPainter *painter, const QStyleOptionGraphi } QRectF toRect = QmlItemNode(to).instanceBoundingRect(); + if (QmlItemNode(to).isFlowDecision()) + toRect = QRectF(0,0,200,200); + toRect.translate(QmlItemNode(to).flowPosition()); if (isStartLine) { From cb77d33cc59e84679f38d854c967d28d158af94c Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Tue, 24 Mar 2020 16:50:40 +0100 Subject: [PATCH 26/41] QmlDesigner: Improve painting code for connection * Prefer horizontal connections * Fix horizontal corner cases Change-Id: I6867d104a1c97ef8dd8292bebe3e2a782a4ff000 Reviewed-by: Tim Jenssen --- .../components/formeditor/formeditoritem.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp index 31a5e6cab64..249abdc3d3d 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp @@ -754,7 +754,12 @@ static void paintConnection(QPainter *painter, const bool boolExitRight = from.right() < to.center().x(); const bool boolExitBottom = from.bottom() < to.center().y(); - bool horizontalFirst = horizontalOverlap(from, to) && !verticalOverlap(from, to); + bool horizontalFirst = true; + + /* + if (verticalOverlap(from, to) && !horizontalOverlap(from, to)) + horizontalFirst = false; + */ const qreal middleFactor = breakOffset / 100.0; @@ -764,14 +769,20 @@ static void paintConnection(QPainter *painter, if (horizontalFirst) { if (to.center().x() > from.left() && to.center().x() < from.right()) { - horizontalFirst = false; - extraLine = true; - } + horizontalFirst = false; + extraLine = true; + } else if (verticalOverlap(from, to)) { + horizontalFirst = true; + extraLine = true; + } } else { if (to.center().y() > from.top() && to.center().y() < from.bottom()) { horizontalFirst = true; extraLine = true; + } else if (horizontalOverlap(from, to)) { + horizontalFirst = false; + extraLine = true; } } From a7b7c31c9c797674f413e5d318f6882fa26e8f63 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Tue, 24 Mar 2020 17:01:45 +0100 Subject: [PATCH 27/41] Doc: Update info on Python run settings Change-Id: Ia1da720286205bae18c7a01538430740510b9780 Reviewed-by: David Schulz --- .../images/qtcreator-python-run-settings.png | Bin 3995 -> 8467 bytes .../src/python/creator-python-run.qdocinc | 3 +++ 2 files changed, 3 insertions(+) diff --git a/doc/qtcreator/images/qtcreator-python-run-settings.png b/doc/qtcreator/images/qtcreator-python-run-settings.png index f5abe1986101ee3bcad07791a6f02330ed9a6c4e..d00e8157a2f2c8bf161e052e783247acfce3caf8 100644 GIT binary patch literal 8467 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 literal 3995 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 My85}Sb4q9e0FFAd#sB~S diff --git a/doc/qtcreator/src/python/creator-python-run.qdocinc b/doc/qtcreator/src/python/creator-python-run.qdocinc index a1efcac8386..3062f904eb5 100644 --- a/doc/qtcreator/src/python/creator-python-run.qdocinc +++ b/doc/qtcreator/src/python/creator-python-run.qdocinc @@ -50,6 +50,9 @@ \list \li In the \uicontrol Interpreter field, specify the path to the Python executable. + \li Select the \uicontrol {Buffered output} check box to buffer the + output. This improves output performance, but causes delays in + output. \li In the \uicontrol Script field, you can see the path to the main file of the project that will be run. \li In the \uicontrol {Command line arguments} field, specify From c44681a7d26641d4fcd979b99d6dc599c4517284 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Wed, 25 Mar 2020 09:49:23 +0100 Subject: [PATCH 28/41] Editor: Fix crash after resetting clangbackendreceiver We must report back to the codeassist under all circumstances Change-Id: Ic9519c80fb7c6b7e54419cb6fef610e3d73d23bd Fixes: QTCREATORBUG-23708 Reviewed-by: Christian Stenger --- src/plugins/clangcodemodel/clangbackendreceiver.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/plugins/clangcodemodel/clangbackendreceiver.cpp b/src/plugins/clangcodemodel/clangbackendreceiver.cpp index bfba1329a99..39edf46c447 100644 --- a/src/plugins/clangcodemodel/clangbackendreceiver.cpp +++ b/src/plugins/clangcodemodel/clangbackendreceiver.cpp @@ -147,7 +147,10 @@ bool BackendReceiver::isExpectingCompletionsMessage() const void BackendReceiver::reset() { // Clean up waiting assist processors - qDeleteAll(m_assistProcessorsTable.begin(), m_assistProcessorsTable.end()); + for (ClangCompletionAssistProcessor *processor : m_assistProcessorsTable) { + processor->setAsyncProposalAvailable(nullptr); + delete processor; + } m_assistProcessorsTable.clear(); // Clean up futures for references; TODO: Remove duplication From b06ad16160c644c6f2d137c7e0c7e40603f929d2 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 23 Mar 2020 10:57:24 +0100 Subject: [PATCH 29/41] TextEditor: Make accidentally activating a link more difficult again Only follow links under cursor if control was already activated when pressing the mouse button. This amends 11eea3aae0e936ecbb1081ab4f2201cc6e69fea0 which just checks if control is pressed after releasing the mouse button. Change-Id: I90d23dd3e5ff63aac7812fad889ad9fb7c052b56 Fixes: QTCREATORBUG-23745 Reviewed-by: Alexis Murzeau Reviewed-by: Eike Ziller --- src/plugins/texteditor/texteditor.cpp | 55 +++++++++++++-------------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index b2f2bacb5f8..61e82f0beaf 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -549,6 +549,7 @@ public: QTextBlock foldedBlockAt(const QPoint &pos, QRect *box = nullptr) const; + bool isMouseNavigationEvent(QMouseEvent *e) const; void requestUpdateLink(QMouseEvent *e); void updateLink(); void showLink(const Utils::Link &); @@ -5553,7 +5554,7 @@ void TextEditorWidget::mousePressEvent(QMouseEvent *e) if (refactorMarker.callback) refactorMarker.callback(this); } else { - d->m_linkPressed = true; + d->m_linkPressed = d->isMouseNavigationEvent(e); } } } else if (e->button() == Qt::RightButton) { @@ -5572,13 +5573,7 @@ void TextEditorWidget::mousePressEvent(QMouseEvent *e) void TextEditorWidget::mouseReleaseEvent(QMouseEvent *e) { - if (mouseNavigationEnabled() - && d->m_linkPressed - && e->modifiers() & Qt::ControlModifier - && !(e->modifiers() & Qt::ShiftModifier) - && e->button() == Qt::LeftButton - ) { - + if (d->m_linkPressed && d->isMouseNavigationEvent(e) && e->button() == Qt::LeftButton) { EditorManager::addCurrentPositionToNavigationHistory(); bool inNextSplit = ((e->modifiers() & Qt::AltModifier) && !alwaysOpenLinksInNextSplit()) || (alwaysOpenLinksInNextSplit() && !(e->modifiers() & Qt::AltModifier)); @@ -6167,32 +6162,36 @@ bool TextEditorWidget::openLink(const Utils::Link &link, bool inNextSplit) Id(), flags); } +bool TextEditorWidgetPrivate::isMouseNavigationEvent(QMouseEvent *e) const +{ + return q->mouseNavigationEnabled() && e->modifiers() & Qt::ControlModifier + && !(e->modifiers() & Qt::ShiftModifier); +} + void TextEditorWidgetPrivate::requestUpdateLink(QMouseEvent *e) { - if (!q->mouseNavigationEnabled()) + if (!isMouseNavigationEvent(e)) return; - if (e->modifiers() & Qt::ControlModifier) { - // Link emulation behaviour for 'go to definition' - const QTextCursor cursor = q->cursorForPosition(e->pos()); + // Link emulation behaviour for 'go to definition' + const QTextCursor cursor = q->cursorForPosition(e->pos()); - // Avoid updating the link we already found - if (cursor.position() >= m_currentLink.linkTextStart - && cursor.position() <= m_currentLink.linkTextEnd) - return; + // Avoid updating the link we already found + if (cursor.position() >= m_currentLink.linkTextStart + && cursor.position() <= m_currentLink.linkTextEnd) + return; - // Check that the mouse was actually on the text somewhere - bool onText = q->cursorRect(cursor).right() >= e->x(); - if (!onText) { - QTextCursor nextPos = cursor; - nextPos.movePosition(QTextCursor::Right); - onText = q->cursorRect(nextPos).right() >= e->x(); - } + // Check that the mouse was actually on the text somewhere + bool onText = q->cursorRect(cursor).right() >= e->x(); + if (!onText) { + QTextCursor nextPos = cursor; + nextPos.movePosition(QTextCursor::Right); + onText = q->cursorRect(nextPos).right() >= e->x(); + } - if (onText) { - m_pendingLinkUpdate = cursor; - QTimer::singleShot(0, this, &TextEditorWidgetPrivate::updateLink); - return; - } + if (onText) { + m_pendingLinkUpdate = cursor; + QTimer::singleShot(0, this, &TextEditorWidgetPrivate::updateLink); + return; } clearLink(); From 595085cb71f9c6f40b952112d5d15fb235c0c6da Mon Sep 17 00:00:00 2001 From: Topi Reinio Date: Wed, 25 Mar 2020 11:29:32 +0100 Subject: [PATCH 30/41] Doc: Fix more documentation warnings for Extending Qt Creator Manual Change-Id: I3ba4e6d2f6cfa2c05c0ee7af6db70dcbb80ae725 Reviewed-by: Eike Ziller Reviewed-by: Leena Miettinen --- .../coreplugin/inavigationwidgetfactory.cpp | 28 ++++++++----------- src/plugins/coreplugin/ioutputpane.cpp | 4 +++ src/plugins/coreplugin/iversioncontrol.cpp | 1 + src/plugins/coreplugin/textdocument.cpp | 4 +-- 4 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/plugins/coreplugin/inavigationwidgetfactory.cpp b/src/plugins/coreplugin/inavigationwidgetfactory.cpp index f1aaa5e1c44..8e68c57ee60 100644 --- a/src/plugins/coreplugin/inavigationwidgetfactory.cpp +++ b/src/plugins/coreplugin/inavigationwidgetfactory.cpp @@ -50,20 +50,14 @@ */ /*! - \fn INavigationWidgetFactory::INavigationWidgetFactory() - - Constructs a navigation widget factory. -*/ - -/*! - \fn QString INavigationWidgetFactory::displayName() const + \fn QString Core::INavigationWidgetFactory::displayName() const Returns the display name of the navigation widget, which is shown in the dropdown menu above the navigation widget. */ /*! - \fn int INavigationWidgetFactory::priority() const + \fn int Core::INavigationWidgetFactory::priority() const Determines the position of the navigation widget in the dropdown menu. @@ -71,13 +65,13 @@ */ /*! - \fn Id INavigationWidgetFactory::id() const + \fn Id Core::INavigationWidgetFactory::id() const Returns a unique identifier for referencing the navigation widget factory. */ /*! - \fn NavigationView INavigationWidgetFactory::createWidget() + \fn Core::NavigationView Core::INavigationWidgetFactory::createWidget() Returns a \l{Core::NavigationView} containing the widget and the buttons. The ownership is given to the caller. @@ -88,7 +82,7 @@ using namespace Core; static QList g_navigationWidgetFactories; /*! - Creates a \l{Core::NavigationViewFactory}. + Constructs a navigation widget factory. */ INavigationWidgetFactory::INavigationWidgetFactory() { @@ -106,7 +100,7 @@ const QList INavigationWidgetFactory::allNavigationF } /*! - Sets the display name for the factory. + Sets the display name for the factory to \a displayName. \sa displayName() */ @@ -116,7 +110,7 @@ void INavigationWidgetFactory::setDisplayName(const QString &displayName) } /*! - Sets the priority for the factory. + Sets the \a priority for the factory. \sa priority() */ @@ -126,7 +120,7 @@ void INavigationWidgetFactory::setPriority(int priority) } /*! - Sets the id for the factory. + Sets the \a id for the factory. \sa id() */ @@ -136,7 +130,7 @@ void INavigationWidgetFactory::setId(Id id) } /*! - Sets the keyboard activation sequence for the factory. + Sets the keyboard activation sequence for the factory to \a keys. \sa activationSequence() */ @@ -154,7 +148,7 @@ QKeySequence INavigationWidgetFactory::activationSequence() const } /*! - Stores the settings for the \a widget at \a position that was created by this factory + Stores the \a settings for the \a widget at \a position that was created by this factory (the \a position identifies a specific navigation widget). \sa INavigationWidgetFactory::restoreSettings() @@ -164,7 +158,7 @@ void INavigationWidgetFactory::saveSettings(QSettings * /* settings */, int /* p } /*! - Reads and restores the settings for the \a widget at \a position that was created by this + Reads and restores the \a settings for the \a widget at \a position that was created by this factory (the \a position identifies a specific navigation widget). \sa INavigationWidgetFactory::saveSettings() diff --git a/src/plugins/coreplugin/ioutputpane.cpp b/src/plugins/coreplugin/ioutputpane.cpp index c43eff0c853..dc8aec9159a 100644 --- a/src/plugins/coreplugin/ioutputpane.cpp +++ b/src/plugins/coreplugin/ioutputpane.cpp @@ -27,6 +27,8 @@ #include "ioutputpane.h" +namespace Core { + /*! \class Core::IOutputPane \brief The IOutputPane class is an interface for providing \uicontrol Output panes. @@ -258,3 +260,5 @@ Displays \a number in the status bar button belonging to the output pane (for example, number of issues on building). */ + +} // namespace Core diff --git a/src/plugins/coreplugin/iversioncontrol.cpp b/src/plugins/coreplugin/iversioncontrol.cpp index fcc861b5ee4..dd3744e223f 100644 --- a/src/plugins/coreplugin/iversioncontrol.cpp +++ b/src/plugins/coreplugin/iversioncontrol.cpp @@ -37,6 +37,7 @@ /*! \class Core::IVersionControl::TopicCache + \inmodule QtCreator \brief The TopicCache class stores a cache which maps a directory to a topic. A VCS topic is typically the current active branch name, but it can also have other diff --git a/src/plugins/coreplugin/textdocument.cpp b/src/plugins/coreplugin/textdocument.cpp index b82605e41d1..13f2323f694 100644 --- a/src/plugins/coreplugin/textdocument.cpp +++ b/src/plugins/coreplugin/textdocument.cpp @@ -125,7 +125,7 @@ void BaseTextDocument::setLineTerminationMode(Utils::TextFileFormat::LineTermina Autodetects file format and reads the text file specified by \a fileName into a list of strings specified by \a plainTextList. - If an error occurs while writing the file, \a errorMessage is set to the + If an error occurs while writing the file, \a errorString is set to the error details. Returns whether the operation was successful. @@ -143,7 +143,7 @@ BaseTextDocument::ReadResult BaseTextDocument::read(const QString &fileName, QSt Autodetects file format and reads the text file specified by \a fileName into \a plainText. - If an error occurs while writing the file, \a errorMessage is set to the + If an error occurs while writing the file, \a errorString is set to the error details. Returns whether the operation was successful. From 23dc06532704a6f6129f390b27c8b28993059af6 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Tue, 24 Mar 2020 18:58:29 +0100 Subject: [PATCH 31/41] McuSupport: Register Qt for MCUs .qch files At plugin initialization and along with the creation of a Qt for MCUs Kit (which currently happens when the user presses "Apply"), these .qch files get registered: /docs/quickultralite.qch /docs/quickultralitecmake.qch In order not to duplicate the code for retrieving package paths (e.g. the one for "QtForMCUsSdk") from the settings, some refactoring was done. As a result McuSupportOptions::qulDirFromSettings() has been introduced. It will be also used in further changes. Task-number: UL-1685 Change-Id: I82e638e129120cdadcf2f4812f467fce34b32ec9 Reviewed-by: Eike Ziller --- src/plugins/mcusupport/mcusupportconstants.h | 1 + src/plugins/mcusupport/mcusupportoptions.cpp | 39 ++++++++++++++++--- src/plugins/mcusupport/mcusupportoptions.h | 2 + .../mcusupport/mcusupportoptionspage.cpp | 5 ++- src/plugins/mcusupport/mcusupportplugin.cpp | 2 + src/plugins/mcusupport/mcusupportsdk.cpp | 2 +- 6 files changed, 43 insertions(+), 8 deletions(-) diff --git a/src/plugins/mcusupport/mcusupportconstants.h b/src/plugins/mcusupport/mcusupportconstants.h index cc9233eee4f..bc0b7b21d33 100644 --- a/src/plugins/mcusupport/mcusupportconstants.h +++ b/src/plugins/mcusupport/mcusupportconstants.h @@ -37,6 +37,7 @@ const char KIT_MCUTARGET_MODEL_KEY[] = "McuSupport.McuTargetModel"; const char SETTINGS_GROUP[] = "McuSupport"; const char SETTINGS_KEY_PACKAGE_PREFIX[] = "Package_"; +const char SETTINGS_KEY_PACKAGE_QT_FOR_MCUS_SDK[] = "QtForMCUsSdk"; // Key known by SDK installer } // namespace McuSupport } // namespace Constants diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index 98fa88617d6..159c88e7a0a 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -28,6 +28,7 @@ #include "mcusupportsdk.h" #include +#include #include #include #include @@ -56,6 +57,16 @@ namespace McuSupport { namespace Internal { +static QString packagePathFromSettings(const QString &settingsKey, const QString &defaultPath = {}) +{ + QSettings *s = Core::ICore::settings(); + s->beginGroup(Constants::SETTINGS_GROUP); + const QString path = s->value(QLatin1String(Constants::SETTINGS_KEY_PACKAGE_PREFIX) + + settingsKey, defaultPath).toString(); + s->endGroup(); + return path; +} + McuPackage::McuPackage(const QString &label, const QString &defaultPath, const QString &detectionPath, const QString &settingsKey) : m_label(label) @@ -63,11 +74,7 @@ McuPackage::McuPackage(const QString &label, const QString &defaultPath, , m_detectionPath(detectionPath) , m_settingsKey(settingsKey) { - QSettings *s = Core::ICore::settings(); - s->beginGroup(Constants::SETTINGS_GROUP); - m_path = s->value(QLatin1String(Constants::SETTINGS_KEY_PACKAGE_PREFIX) + m_settingsKey, - m_defaultPath).toString(); - s->endGroup(); + m_path = packagePathFromSettings(settingsKey, defaultPath); } QString McuPackage::path() const @@ -349,6 +356,22 @@ void McuSupportOptions::populatePackagesAndTargets() setQulDir(Utils::FilePath::fromUserInput(qtForMCUsSdkPackage->path())); } +void McuSupportOptions::registerQchFiles() +{ + const QString qulDir = qulDirFromSettings().toString(); + if (qulDir.isEmpty() || !QFileInfo::exists(qulDir)) + return; + + const QString docsPath = qulDir + "/docs/"; + const QStringList qchFiles = { + docsPath + "quickultralite.qch", + docsPath + "quickultralitecmake.qch" + }; + Core::HelpManager::registerDocumentation( + Utils::filtered(qchFiles, + [](const QString &file) { return QFileInfo::exists(file); })); +} + void McuSupportOptions::deletePackagesAndTargets() { qDeleteAll(packages); @@ -370,6 +393,12 @@ void McuSupportOptions::setQulDir(const Utils::FilePath &dir) emit changed(); } +Utils::FilePath McuSupportOptions::qulDirFromSettings() +{ + return Utils::FilePath::fromUserInput( + packagePathFromSettings(Constants::SETTINGS_KEY_PACKAGE_QT_FOR_MCUS_SDK)); +} + 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 7e1edd60159..b22f32375e3 100644 --- a/src/plugins/mcusupport/mcusupportoptions.h +++ b/src/plugins/mcusupport/mcusupportoptions.h @@ -160,12 +160,14 @@ public: McuPackage *qtForMCUsSdkPackage = nullptr; void setQulDir(const Utils::FilePath &dir); + static Utils::FilePath qulDirFromSettings(); QString kitName(const McuTarget* mcuTarget) const; QList existingKits(const McuTarget *mcuTargt); ProjectExplorer::Kit *newKit(const McuTarget *mcuTarget); void populatePackagesAndTargets(); + static void registerQchFiles(); private: void deletePackagesAndTargets(); diff --git a/src/plugins/mcusupport/mcusupportoptionspage.cpp b/src/plugins/mcusupport/mcusupportoptionspage.cpp index cfbe4784930..e07899028d5 100644 --- a/src/plugins/mcusupport/mcusupportoptionspage.cpp +++ b/src/plugins/mcusupport/mcusupportoptionspage.cpp @@ -223,14 +223,15 @@ void McuSupportOptionsWidget::showEvent(QShowEvent *event) void McuSupportOptionsWidget::apply() { + m_options.qtForMCUsSdkPackage->writeToSettings(); for (auto package : m_options.packages) package->writeToSettings(); - QTC_ASSERT(m_options.qtForMCUsSdkPackage, return); - if (!isVisible()) return; + McuSupportOptions::registerQchFiles(); + const McuTarget *mcuTarget = currentMcuTarget(); if (!mcuTarget) return; diff --git a/src/plugins/mcusupport/mcusupportplugin.cpp b/src/plugins/mcusupport/mcusupportplugin.cpp index d6b2dd427a6..4182713e866 100644 --- a/src/plugins/mcusupport/mcusupportplugin.cpp +++ b/src/plugins/mcusupport/mcusupportplugin.cpp @@ -26,6 +26,7 @@ #include "mcusupportplugin.h" #include "mcusupportconstants.h" #include "mcusupportdevice.h" +#include "mcusupportoptions.h" #include "mcusupportoptionspage.h" #include "mcusupportrunconfiguration.h" @@ -74,6 +75,7 @@ bool McuSupportPlugin::initialize(const QStringList& arguments, QString* errorSt dd = new McuSupportPluginPrivate; + McuSupportOptions::registerQchFiles(); ProjectExplorer::JsonWizardFactory::addWizardPath( Utils::FilePath::fromString(":/mcusupport/wizards/")); diff --git a/src/plugins/mcusupport/mcusupportsdk.cpp b/src/plugins/mcusupport/mcusupportsdk.cpp index 4b6c6fbd627..b4b72ad5e7a 100644 --- a/src/plugins/mcusupport/mcusupportsdk.cpp +++ b/src/plugins/mcusupport/mcusupportsdk.cpp @@ -55,7 +55,7 @@ McuPackage *createQtForMCUsPackage() McuPackage::tr("Qt for MCUs SDK"), QDir::homePath(), Utils::HostOsInfo::withExecutableSuffix("bin/qmltocpp"), - "QtForMCUsSdk"); + Constants::SETTINGS_KEY_PACKAGE_QT_FOR_MCUS_SDK); result->setEnvironmentVariableName("Qul_DIR"); return result; } From 02093f5ab28e9f2745fa53ee783bd15729397248 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Wed, 25 Mar 2020 13:27:42 +0100 Subject: [PATCH 32/41] QmlDesigner: Draw FlowDecision and FlowWildcard as diamond Change-Id: Iade9c17d58354ac67ef990bd231325fad3a35fe3 Reviewed-by: Thomas Hartmann --- .../components/formeditor/formeditoritem.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp index 249abdc3d3d..94844430844 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditoritem.cpp @@ -1145,7 +1145,17 @@ void FormEditorFlowDecisionItem::paint(QPainter *painter, const QStyleOptionGrap painter->fillRect(boundingRect(), fillColor); } - painter->drawRect(boundingRect()); + painter->drawLine(boundingRect().left(), boundingRect().center().y(), + boundingRect().center().x(), boundingRect().top()); + + painter->drawLine(boundingRect().center().x(), boundingRect().top(), + boundingRect().right(), boundingRect().center().y()); + + painter->drawLine(boundingRect().right(), boundingRect().center().y(), + boundingRect().center().x(), boundingRect().bottom()); + + painter->drawLine(boundingRect().center().x(), boundingRect().bottom(), + boundingRect().left(), boundingRect().center().y()); painter->restore(); } From 6c1894b8930084e309cb3c8c785d9adb5c711447 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 24 Mar 2020 14:54:43 +0100 Subject: [PATCH 33/41] Qmake: Work around crash The condition that's checked now triggered when playing around with changing the JS expression that creating the default build directory name. Change-Id: I221be8cefb6918c10c383c23ee7cde73d3683e40 Reviewed-by: Christian Kandeler --- src/plugins/qmakeprojectmanager/qmakenodes.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/qmakeprojectmanager/qmakenodes.cpp b/src/plugins/qmakeprojectmanager/qmakenodes.cpp index 01a49101405..d17ccfd5a1b 100644 --- a/src/plugins/qmakeprojectmanager/qmakenodes.cpp +++ b/src/plugins/qmakeprojectmanager/qmakenodes.cpp @@ -112,6 +112,7 @@ bool QmakeBuildSystem::supportsAction(Node *context, ProjectAction action, const } QTC_ASSERT(proFileNode, return false); pro = proFileNode->proFile(); + QTC_ASSERT(pro, return false); t = pro->projectType(); } From 540ea616ecabede679fca9e10dd27dec33f29936 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Fri, 20 Mar 2020 11:48:37 +0100 Subject: [PATCH 34/41] AutoTest: Fix handling of GTEST_SKIP Fixes: QTCREATORBUG-23736 Change-Id: I3d52f3caf6b28e07d7d8d072fb33c782d33575c6 Reviewed-by: David Schulz --- .../autotest/gtest/gtestoutputreader.cpp | 79 ++++++++++++------- .../autotest/gtest/gtestoutputreader.h | 2 + 2 files changed, 53 insertions(+), 28 deletions(-) diff --git a/src/plugins/autotest/gtest/gtestoutputreader.cpp b/src/plugins/autotest/gtest/gtestoutputreader.cpp index e5eaf40873f..c2c1b2f3ac1 100644 --- a/src/plugins/autotest/gtest/gtestoutputreader.cpp +++ b/src/plugins/autotest/gtest/gtestoutputreader.cpp @@ -68,9 +68,8 @@ void GTestOutputReader::processOutputLine(const QByteArray &outputLine) static const QRegularExpression newTestSetStarts("^\\[ RUN \\] (.*)$"); static const QRegularExpression testSetSuccess("^\\[ OK \\] (.*) \\((.*)\\)$"); static const QRegularExpression testSetFail("^\\[ FAILED \\] (.*) \\((\\d+ ms)\\)$"); + static const QRegularExpression testSetSkipped("^\\[ SKIPPED \\] (.*) \\((\\d+ ms)\\)$"); static const QRegularExpression disabledTests("^ YOU HAVE (\\d+) DISABLED TESTS?$"); - static const QRegularExpression failureLocation("^(.*):(\\d+): Failure$"); - static const QRegularExpression errorLocation("^(.*)\\((\\d+)\\): error:.*$"); static const QRegularExpression iterations("^Repeating all tests " "\\(iteration (\\d+)\\) \\. \\. \\.$"); static const QRegularExpression logging("^\\[( FATAL | ERROR |WARNING| INFO )\\] " @@ -126,6 +125,7 @@ void GTestOutputReader::processOutputLine(const QByteArray &outputLine) } reportResult(testResult); } else if (ExactMatch match = newTestSetStarts.match(line)) { + m_testSetStarted = true; setCurrentTestCase(match.captured(1)); TestResultPtr testResult = TestResultPtr(new GTestResult(QString(), m_projectFile, QString())); @@ -134,6 +134,7 @@ void GTestOutputReader::processOutputLine(const QByteArray &outputLine) reportResult(testResult); m_description.clear(); } else if (ExactMatch match = testSetSuccess.match(line)) { + m_testSetStarted = false; TestResultPtr testResult = createDefaultResult(); testResult->setResult(ResultType::Pass); testResult->setDescription(m_description); @@ -145,40 +146,29 @@ void GTestOutputReader::processOutputLine(const QByteArray &outputLine) reportResult(testResult); m_futureInterface.setProgressValue(m_futureInterface.progressValue() + 1); } else if (ExactMatch match = testSetFail.match(line)) { + m_testSetStarted = false; TestResultPtr testResult = createDefaultResult(); testResult->setResult(ResultType::Fail); m_description.chop(1); - QStringList resultDescription; - - for (const QString &output : m_description.split('\n')) { - QRegularExpressionMatch innerMatch = failureLocation.match(output); - if (!innerMatch.hasMatch()) { - innerMatch = errorLocation.match(output); - if (!innerMatch.hasMatch()) { - resultDescription << output; - continue; - } - } - testResult->setDescription(resultDescription.join('\n')); - reportResult(testResult); - resultDescription.clear(); - - testResult = createDefaultResult(); - testResult->setResult(ResultType::MessageLocation); - testResult->setLine(innerMatch.captured(2).toInt()); - QString file = constructSourceFilePath(m_buildDir, innerMatch.captured(1)); - if (!file.isEmpty()) - testResult->setFileName(file); - resultDescription << output; - } - testResult->setDescription(resultDescription.join('\n')); - reportResult(testResult); - m_description.clear(); + handleDescriptionAndReportResult(testResult); testResult = createDefaultResult(); testResult->setResult(ResultType::MessageInternal); testResult->setDescription(tr("Execution took %1.").arg(match.captured(2))); reportResult(testResult); m_futureInterface.setProgressValue(m_futureInterface.progressValue() + 1); + } else if (ExactMatch match = testSetSkipped.match(line)) { + if (!m_testSetStarted) // ignore SKIPPED at summary + return; + m_testSetStarted = false; + TestResultPtr testResult = createDefaultResult(); + testResult->setResult(ResultType::Skip); + m_description.chop(1); + m_description.prepend(match.captured(1) + '\n'); + handleDescriptionAndReportResult(testResult); + testResult = createDefaultResult(); + testResult->setResult(ResultType::MessageInternal); + testResult->setDescription(tr("Execution took %1.").arg(match.captured(2))); + reportResult(testResult); } else if (ExactMatch match = logging.match(line)) { const QString severity = match.captured(1).trimmed(); ResultType type = ResultType::Invalid; @@ -232,5 +222,38 @@ void GTestOutputReader::setCurrentTestSuite(const QString &testSuite) m_currentTestSuite = testSuite; } +void GTestOutputReader::handleDescriptionAndReportResult(TestResultPtr testResult) +{ + static const QRegularExpression failureLocation("^(.*):(\\d+): Failure$"); + static const QRegularExpression skipOrErrorLocation("^(.*)\\((\\d+)\\): (Skipped|error:.*)$"); + + QStringList resultDescription; + + for (const QString &output : m_description.split('\n')) { + QRegularExpressionMatch innerMatch = failureLocation.match(output); + if (!innerMatch.hasMatch()) { + innerMatch = skipOrErrorLocation.match(output); + if (!innerMatch.hasMatch()) { + resultDescription << output; + continue; + } + } + testResult->setDescription(resultDescription.join('\n')); + reportResult(testResult); + resultDescription.clear(); + + testResult = createDefaultResult(); + testResult->setResult(ResultType::MessageLocation); + testResult->setLine(innerMatch.captured(2).toInt()); + QString file = constructSourceFilePath(m_buildDir, innerMatch.captured(1)); + if (!file.isEmpty()) + testResult->setFileName(file); + resultDescription << output; + } + testResult->setDescription(resultDescription.join('\n')); + reportResult(testResult); + m_description.clear(); +} + } // namespace Internal } // namespace Autotest diff --git a/src/plugins/autotest/gtest/gtestoutputreader.h b/src/plugins/autotest/gtest/gtestoutputreader.h index 7bbc4b178d5..2cf13a2b95f 100644 --- a/src/plugins/autotest/gtest/gtestoutputreader.h +++ b/src/plugins/autotest/gtest/gtestoutputreader.h @@ -50,12 +50,14 @@ protected: private: void setCurrentTestCase(const QString &testCase); void setCurrentTestSuite(const QString &testSuite); + void handleDescriptionAndReportResult(TestResultPtr testResult); QString m_projectFile; QString m_currentTestSuite; QString m_currentTestCase; QString m_description; int m_iteration = 1; + bool m_testSetStarted = false; }; } // namespace Internal From 20e95f2f197d4941675e34e6999d804396e1b7ec Mon Sep 17 00:00:00 2001 From: Knud Dollereder Date: Tue, 24 Mar 2020 15:05:28 +0100 Subject: [PATCH 35/41] Add the ability to unify keyframe handles Task-number: QDS-568 Change-Id: I5b102423e8e166d41edf199c42305cee102e8b54 Reviewed-by: Thomas Hartmann --- .../components/curveeditor/animationcurve.cpp | 21 ++++++++ .../components/curveeditor/animationcurve.h | 4 ++ .../components/curveeditor/curveeditor.cpp | 4 ++ .../components/curveeditor/curveeditorstyle.h | 3 ++ .../components/curveeditor/curvesegment.cpp | 2 + .../curveeditor/detail/curveitem.cpp | 20 ++++++-- .../components/curveeditor/detail/curveitem.h | 7 +++ .../curveeditor/detail/graphicsscene.cpp | 36 +++++++++++--- .../curveeditor/detail/graphicsscene.h | 4 ++ .../curveeditor/detail/graphicsview.cpp | 16 ++++++ .../curveeditor/detail/graphicsview.h | 2 + .../curveeditor/detail/handleitem.cpp | 2 +- .../curveeditor/detail/keyframeitem.cpp | 49 ++++++++++++++++--- .../curveeditor/detail/keyframeitem.h | 8 ++- .../components/curveeditor/keyframe.cpp | 14 ++++++ .../components/curveeditor/keyframe.h | 6 +++ .../components/curveeditor/treeitem.cpp | 10 ++++ .../components/curveeditor/treeitem.h | 4 ++ .../animationcurveeditormodel.cpp | 13 +++++ .../timelineeditor/timelinetoolbar.cpp | 5 -- .../timelineeditor/timelinetoolbar.h | 2 - .../timelineeditor/timelinewidget.cpp | 5 ++ 22 files changed, 207 insertions(+), 30 deletions(-) diff --git a/src/plugins/qmldesigner/components/curveeditor/animationcurve.cpp b/src/plugins/qmldesigner/components/curveeditor/animationcurve.cpp index 5a849316b0b..237d89dcb20 100644 --- a/src/plugins/qmldesigner/components/curveeditor/animationcurve.cpp +++ b/src/plugins/qmldesigner/components/curveeditor/animationcurve.cpp @@ -103,6 +103,15 @@ bool AnimationCurve::isFromData() const return m_fromData; } +bool AnimationCurve::hasUnified() const +{ + for (auto &&frame : m_frames) { + if (frame.isUnified()) + return true; + } + return false; +} + double AnimationCurve::minimumTime() const { if (!m_frames.empty()) @@ -144,6 +153,18 @@ std::string AnimationCurve::string() const return sstream.str(); } +QString AnimationCurve::unifyString() const +{ + QString out; + for (auto &&frame : m_frames) { + if (frame.isUnified()) + out.append("1"); + else + out.append("0"); + } + return out; +} + CurveSegment AnimationCurve::segment(double time) const { CurveSegment seg; diff --git a/src/plugins/qmldesigner/components/curveeditor/animationcurve.h b/src/plugins/qmldesigner/components/curveeditor/animationcurve.h index 3122074bfe9..d8ea0d628f4 100644 --- a/src/plugins/qmldesigner/components/curveeditor/animationcurve.h +++ b/src/plugins/qmldesigner/components/curveeditor/animationcurve.h @@ -50,6 +50,8 @@ public: bool isFromData() const; + bool hasUnified() const; + double minimumTime() const; double maximumTime() const; @@ -60,6 +62,8 @@ public: std::string string() const; + QString unifyString() const; + CurveSegment segment(double time) const; std::vector segments() const; diff --git a/src/plugins/qmldesigner/components/curveeditor/curveeditor.cpp b/src/plugins/qmldesigner/components/curveeditor/curveeditor.cpp index 84788fbdead..33618dcc8d1 100644 --- a/src/plugins/qmldesigner/components/curveeditor/curveeditor.cpp +++ b/src/plugins/qmldesigner/components/curveeditor/curveeditor.cpp @@ -86,6 +86,7 @@ QToolBar *CurveEditor::createToolBar(CurveEditorModel *model) QAction *tangentStepAction = bar->addAction(QIcon(":/curveeditor/images/tangetToolsStepIcon.png"), "Step"); QAction *tangentSplineAction = bar->addAction(QIcon(":/curveeditor/images/tangetToolsSplineIcon.png"), "Spline"); QAction *tangentDefaultAction = bar->addAction("Set Default"); + QAction *tangentUnifyAction = bar->addAction("Unify"); auto setLinearInterpolation = [this]() { m_view->setInterpolation(Keyframe::Interpolation::Linear); @@ -97,9 +98,12 @@ QToolBar *CurveEditor::createToolBar(CurveEditorModel *model) m_view->setInterpolation(Keyframe::Interpolation::Bezier); }; + auto toggleUnifyKeyframe = [this]() { m_view->toggleUnified(); }; + connect(tangentLinearAction, &QAction::triggered, setLinearInterpolation); connect(tangentStepAction, &QAction::triggered, setStepInterpolation); connect(tangentSplineAction, &QAction::triggered, setSplineInterpolation); + connect(tangentUnifyAction, &QAction::triggered, toggleUnifyKeyframe); Q_UNUSED(tangentLinearAction); Q_UNUSED(tangentSplineAction); diff --git a/src/plugins/qmldesigner/components/curveeditor/curveeditorstyle.h b/src/plugins/qmldesigner/components/curveeditor/curveeditorstyle.h index 6dc4394647b..132a95a790e 100644 --- a/src/plugins/qmldesigner/components/curveeditor/curveeditorstyle.h +++ b/src/plugins/qmldesigner/components/curveeditor/curveeditorstyle.h @@ -62,6 +62,9 @@ struct KeyframeItemStyleOption double size = 10.0; QColor color = QColor(200, 200, 0); QColor selectionColor = QColor(200, 200, 200); + QColor lockedColor = QColor(50, 50, 50); + QColor unifiedColor = QColor(250, 50, 250); + QColor splitColor = QColor(0, 250, 0); }; struct CurveItemStyleOption diff --git a/src/plugins/qmldesigner/components/curveeditor/curvesegment.cpp b/src/plugins/qmldesigner/components/curveeditor/curvesegment.cpp index 26a1dffc3ee..a4d1ea83d07 100644 --- a/src/plugins/qmldesigner/components/curveeditor/curvesegment.cpp +++ b/src/plugins/qmldesigner/components/curveeditor/curvesegment.cpp @@ -447,9 +447,11 @@ std::array CurveSegment::splitAt(double time) out[0].setInterpolation(left().interpolation()); out[0].setData(left().data()); + out[0].setUnified(left().isUnified()); out[2].setInterpolation(right().interpolation()); out[2].setData(right().data()); + out[2].setUnified(right().isUnified()); return out; } } diff --git a/src/plugins/qmldesigner/components/curveeditor/detail/curveitem.cpp b/src/plugins/qmldesigner/components/curveeditor/detail/curveitem.cpp index 2aa66b0f80e..9489928d074 100644 --- a/src/plugins/qmldesigner/components/curveeditor/detail/curveitem.cpp +++ b/src/plugins/qmldesigner/components/curveeditor/detail/curveitem.cpp @@ -297,6 +297,8 @@ void CurveItem::setCurve(const AnimationCurve &curve) item->setComponentTransform(m_transform); m_keyframes.push_back(item); QObject::connect(item, &KeyframeItem::redrawCurve, this, &CurveItem::emitCurveChanged); + QObject::connect(item, &KeyframeItem::keyframeMoved, this, &CurveItem::keyframeMoved); + QObject::connect(item, &KeyframeItem::handleMoved, this, &CurveItem::handleMoved); } emitCurveChanged(); @@ -344,14 +346,24 @@ void CurveItem::setInterpolation(Keyframe::Interpolation interpolation) emit curveChanged(id(), curve()); } +void CurveItem::toggleUnified() +{ + if (m_keyframes.empty()) + return; + + for (auto *frame : m_keyframes) { + if (frame->selected()) + frame->toggleUnified(); + } + emit curveChanged(id(), curve()); +} + void CurveItem::connect(GraphicsScene *scene) { QObject::connect(this, &CurveItem::curveChanged, scene, &GraphicsScene::curveChanged); - for (auto *frame : m_keyframes) { - QObject::connect(frame, &KeyframeItem::keyframeMoved, scene, &GraphicsScene::keyframeMoved); - QObject::connect(frame, &KeyframeItem::handleMoved, scene, &GraphicsScene::handleMoved); - } + QObject::connect(this, &CurveItem::keyframeMoved, scene, &GraphicsScene::keyframeMoved); + QObject::connect(this, &CurveItem::handleMoved, scene, &GraphicsScene::handleMoved); } void CurveItem::insertKeyframeByTime(double time) diff --git a/src/plugins/qmldesigner/components/curveeditor/detail/curveitem.h b/src/plugins/qmldesigner/components/curveeditor/detail/curveitem.h index e1517cf6dba..a8b18fa698f 100644 --- a/src/plugins/qmldesigner/components/curveeditor/detail/curveitem.h +++ b/src/plugins/qmldesigner/components/curveeditor/detail/curveitem.h @@ -27,6 +27,7 @@ #include "curveeditorstyle.h" #include "curvesegment.h" +#include "handleitem.h" #include "keyframe.h" #include "selectableitem.h" #include "treeitem.h" @@ -47,6 +48,10 @@ class CurveItem : public CurveEditorItem signals: void curveChanged(unsigned int id, const AnimationCurve &curve); + void keyframeMoved(KeyframeItem *item, const QPointF &direction); + + void handleMoved(KeyframeItem *frame, HandleItem::Slot slot, double angle, double deltaLength); + public: CurveItem(QGraphicsItem *parent = nullptr); @@ -100,6 +105,8 @@ public: void setInterpolation(Keyframe::Interpolation interpolation); + void toggleUnified(); + void connect(GraphicsScene *scene); void insertKeyframeByTime(double time); diff --git a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsscene.cpp b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsscene.cpp index ee907ec8cdb..3b7d848eaab 100644 --- a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsscene.cpp +++ b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsscene.cpp @@ -37,6 +37,7 @@ GraphicsScene::GraphicsScene(QObject *parent) : QGraphicsScene(parent) , m_dirty(true) , m_limits() + , m_doNotMoveItems(false) {} bool GraphicsScene::empty() const @@ -64,6 +65,11 @@ double GraphicsScene::maximumValue() const return limits().top(); } +void GraphicsScene::doNotMoveItems(bool val) +{ + m_doNotMoveItems = val; +} + void GraphicsScene::addCurveItem(CurveItem *item) { m_dirty = true; @@ -111,10 +117,9 @@ void GraphicsScene::handleUnderMouse(HandleItem *handle) if (item == handle) continue; - if (auto *handleItem = qgraphicsitem_cast(item)) { - if (handleItem->selected()) { - if (handleItem->slot() == handle->slot()) - handleItem->setActivated(handle->isUnderMouse()); + if (auto *keyItem = qgraphicsitem_cast(item)) { + if (keyItem->selected()) { + keyItem->setActivated(handle->isUnderMouse(), handle->slot()); } } } @@ -125,14 +130,29 @@ void GraphicsScene::handleMoved(KeyframeItem *frame, double angle, double deltaLength) { + if (m_doNotMoveItems) + return; + + auto moveUnified = [handle, angle, deltaLength](KeyframeItem *key) { + if (key->isUnified()) { + if (handle == HandleItem::Slot::Left) + key->moveHandle(HandleItem::Slot::Right, angle, deltaLength); + else + key->moveHandle(HandleItem::Slot::Left, angle, deltaLength); + } + }; + const auto itemList = items(); for (auto *item : itemList) { - if (item == frame) - continue; - if (auto *frameItem = qgraphicsitem_cast(item)) { - if (frameItem->selected()) + if (item == frame) { + moveUnified(frameItem); + continue; + } + if (frameItem->selected()) { frameItem->moveHandle(handle, angle, deltaLength); + moveUnified(frameItem); + } } } } diff --git a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsscene.h b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsscene.h index 77aa8c168d3..44936a76bde 100644 --- a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsscene.h +++ b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsscene.h @@ -61,6 +61,8 @@ public: double maximumValue() const; + void doNotMoveItems(bool tmp); + void addCurveItem(CurveItem *item); void setComponentTransform(const QTransform &transform); @@ -90,6 +92,8 @@ private: mutable bool m_dirty; mutable QRectF m_limits; + + bool m_doNotMoveItems; }; } // End namespace DesignTools. diff --git a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp index f7494b9dc80..217fdf10e99 100644 --- a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp +++ b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.cpp @@ -275,6 +275,18 @@ void GraphicsView::setInterpolation(Keyframe::Interpolation interpol) viewport()->update(); } +void GraphicsView::toggleUnified() +{ + const auto itemList = items(); + for (auto *item : itemList) { + if (auto *citem = qgraphicsitem_cast(item)) { + if (citem->hasSelection()) + citem->toggleUnified(); + } + } + viewport()->update(); +} + void GraphicsView::resizeEvent(QResizeEvent *event) { QGraphicsView::resizeEvent(event); @@ -433,6 +445,8 @@ QPointF GraphicsView::globalToRaster(const QPoint &point) const void GraphicsView::applyZoom(double x, double y, const QPoint &pivot) { + m_scene.doNotMoveItems(true); + QPointF pivotRaster(globalToRaster(pivot)); m_zoomX = clamp(x, 0.0, 1.0); @@ -471,6 +485,8 @@ void GraphicsView::applyZoom(double x, double y, const QPoint &pivot) QPointF deltaTransformed = pivotRaster - globalToRaster(pivot); scrollContent(mapTimeToX(deltaTransformed.x()), mapValueToY(deltaTransformed.y())); } + + m_scene.doNotMoveItems(false); } void GraphicsView::insertKeyframe(double time, bool allVisibleCurves) diff --git a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.h b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.h index 7308d77608d..7100bbd29b0 100644 --- a/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.h +++ b/src/plugins/qmldesigner/components/curveeditor/detail/graphicsview.h @@ -112,6 +112,8 @@ public: void setInterpolation(Keyframe::Interpolation interpol); + void toggleUnified(); + protected: void resizeEvent(QResizeEvent *event) override; diff --git a/src/plugins/qmldesigner/components/curveeditor/detail/handleitem.cpp b/src/plugins/qmldesigner/components/curveeditor/detail/handleitem.cpp index 33f35e52ac3..c0026c67f20 100644 --- a/src/plugins/qmldesigner/components/curveeditor/detail/handleitem.cpp +++ b/src/plugins/qmldesigner/components/curveeditor/detail/handleitem.cpp @@ -130,7 +130,7 @@ void HandleItem::setStyle(const CurveEditorStyle &style) QVariant HandleItem::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) { if (change == ItemPositionChange) { - if (KeyframeItem *parent = qgraphicsitem_cast(parentItem())) { + if (qgraphicsitem_cast(parentItem())) { QPointF pos = value.toPointF(); if (m_slot == HandleItem::Slot::Left) { if (pos.x() > 0.0) diff --git a/src/plugins/qmldesigner/components/curveeditor/detail/keyframeitem.cpp b/src/plugins/qmldesigner/components/curveeditor/detail/keyframeitem.cpp index b9adeb01ccb..bc8bd2f0e67 100644 --- a/src/plugins/qmldesigner/components/curveeditor/detail/keyframeitem.cpp +++ b/src/plugins/qmldesigner/components/curveeditor/detail/keyframeitem.cpp @@ -64,14 +64,22 @@ void KeyframeItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *opti Q_UNUSED(option) Q_UNUSED(widget) + QColor mainColor = selected() ? m_style.selectionColor : m_style.color; + QColor borderColor = isUnified() ? m_style.unifiedColor : m_style.splitColor; + + if (locked()) { + mainColor = m_style.lockedColor; + borderColor = m_style.lockedColor; + } + QPen pen = painter->pen(); - pen.setColor(Qt::black); + pen.setWidthF(1.); + pen.setColor(borderColor); painter->save(); painter->setPen(pen); - painter->setBrush(locked() ? Qt::black : (selected() ? Qt::red : m_style.color)); + painter->setBrush(mainColor); painter->drawEllipse(boundingRect()); - painter->restore(); } @@ -93,6 +101,11 @@ Keyframe KeyframeItem::keyframe() const return m_frame; } +bool KeyframeItem::isUnified() const +{ + return m_frame.isUnified(); +} + bool KeyframeItem::hasLeftHandle() const { return m_frame.hasLeftHandle(); @@ -108,11 +121,6 @@ QTransform KeyframeItem::transform() const return m_transform; } -bool KeyframeItem::contains(HandleItem *handle, const QPointF &point) const -{ - return false; -} - void KeyframeItem::setHandleVisibility(bool visible) { m_visibleOverride = visible; @@ -195,6 +203,31 @@ void KeyframeItem::setKeyframe(const Keyframe &keyframe) setPos(m_transform.map(m_frame.position())); } +void KeyframeItem::toggleUnified() +{ + if (!m_left || !m_right) + return; + + if (m_frame.isUnified()) + m_frame.setUnified(false); + else + m_frame.setUnified(true); +} + +void KeyframeItem::setActivated(bool active, HandleItem::Slot slot) +{ + if (isUnified() && m_left && m_right) { + m_left->setActivated(active); + m_right->setActivated(active); + return; + } + + if (slot == HandleItem::Slot::Left && m_left) + m_left->setActivated(active); + else if (slot == HandleItem::Slot::Right && m_right) + m_right->setActivated(active); +} + void KeyframeItem::setInterpolation(Keyframe::Interpolation interpolation) { m_frame.setInterpolation(interpolation); diff --git a/src/plugins/qmldesigner/components/curveeditor/detail/keyframeitem.h b/src/plugins/qmldesigner/components/curveeditor/detail/keyframeitem.h index 8518fbee691..b6807a1232d 100644 --- a/src/plugins/qmldesigner/components/curveeditor/detail/keyframeitem.h +++ b/src/plugins/qmldesigner/components/curveeditor/detail/keyframeitem.h @@ -66,14 +66,14 @@ public: Keyframe keyframe() const; + bool isUnified() const; + bool hasLeftHandle() const; bool hasRightHandle() const; QTransform transform() const; - bool contains(HandleItem *handle, const QPointF &point) const; - void setHandleVisibility(bool visible); void setComponentTransform(const QTransform &transform); @@ -82,6 +82,10 @@ public: void setKeyframe(const Keyframe &keyframe); + void toggleUnified(); + + void setActivated(bool active, HandleItem::Slot slot); + void setInterpolation(Keyframe::Interpolation interpolation); void setLeftHandle(const QPointF &pos); diff --git a/src/plugins/qmldesigner/components/curveeditor/keyframe.cpp b/src/plugins/qmldesigner/components/curveeditor/keyframe.cpp index 0ac23c36153..d0a411e849c 100644 --- a/src/plugins/qmldesigner/components/curveeditor/keyframe.cpp +++ b/src/plugins/qmldesigner/components/curveeditor/keyframe.cpp @@ -31,6 +31,7 @@ namespace DesignTools { Keyframe::Keyframe() : m_interpolation(Interpolation::Undefined) + , m_unified(false) , m_position() , m_leftHandle() , m_rightHandle() @@ -39,6 +40,7 @@ Keyframe::Keyframe() Keyframe::Keyframe(const QPointF &position) : m_interpolation(Interpolation::Linear) + , m_unified(false) , m_position(position) , m_leftHandle() , m_rightHandle() @@ -47,6 +49,7 @@ Keyframe::Keyframe(const QPointF &position) Keyframe::Keyframe(const QPointF &position, const QVariant &data) : m_interpolation(Interpolation::Undefined) + , m_unified(false) , m_position(position) , m_leftHandle() , m_rightHandle() @@ -57,6 +60,7 @@ Keyframe::Keyframe(const QPointF &position, const QVariant &data) Keyframe::Keyframe(const QPointF &position, const QPointF &leftHandle, const QPointF &rightHandle) : m_interpolation(Interpolation::Bezier) + , m_unified(false) , m_position(position) , m_leftHandle(leftHandle) , m_rightHandle(rightHandle) @@ -73,6 +77,11 @@ bool Keyframe::hasData() const return m_data.isValid(); } +bool Keyframe::isUnified() const +{ + return m_unified; +} + bool Keyframe::hasLeftHandle() const { return !m_leftHandle.isNull(); @@ -143,6 +152,11 @@ void Keyframe::setPosition(const QPointF &pos) m_position = pos; } +void Keyframe::setUnified(bool unified) +{ + m_unified = unified; +} + void Keyframe::setLeftHandle(const QPointF &pos) { m_leftHandle = pos; diff --git a/src/plugins/qmldesigner/components/curveeditor/keyframe.h b/src/plugins/qmldesigner/components/curveeditor/keyframe.h index 76284b2ff96..3aef8ed085a 100644 --- a/src/plugins/qmldesigner/components/curveeditor/keyframe.h +++ b/src/plugins/qmldesigner/components/curveeditor/keyframe.h @@ -47,6 +47,8 @@ public: bool hasData() const; + bool isUnified() const; + bool hasLeftHandle() const; bool hasRightHandle() const; @@ -63,6 +65,8 @@ public: Interpolation interpolation() const; + void setUnified(bool unified); + void setPosition(const QPointF &pos); void setLeftHandle(const QPointF &pos); @@ -76,6 +80,8 @@ public: private: Interpolation m_interpolation = Interpolation::Undefined; + bool m_unified; + QPointF m_position; QPointF m_leftHandle; diff --git a/src/plugins/qmldesigner/components/curveeditor/treeitem.cpp b/src/plugins/qmldesigner/components/curveeditor/treeitem.cpp index 86fdf1d674d..cd8b113c4b3 100644 --- a/src/plugins/qmldesigner/components/curveeditor/treeitem.cpp +++ b/src/plugins/qmldesigner/components/curveeditor/treeitem.cpp @@ -311,6 +311,16 @@ AnimationCurve PropertyTreeItem::curve() const return m_curve; } +bool PropertyTreeItem::hasUnified() const +{ + return m_curve.hasUnified(); +} + +QString PropertyTreeItem::unifyString() const +{ + return m_curve.unifyString(); +} + void PropertyTreeItem::setCurve(const AnimationCurve &curve) { m_curve = curve; diff --git a/src/plugins/qmldesigner/components/curveeditor/treeitem.h b/src/plugins/qmldesigner/components/curveeditor/treeitem.h index 0c1d16541cf..64448af9e5a 100644 --- a/src/plugins/qmldesigner/components/curveeditor/treeitem.h +++ b/src/plugins/qmldesigner/components/curveeditor/treeitem.h @@ -155,6 +155,10 @@ public: AnimationCurve curve() const; + bool hasUnified() const; + + QString unifyString() const; + void setCurve(const AnimationCurve &curve); void setComponent(const Component &comp); diff --git a/src/plugins/qmldesigner/components/timelineeditor/animationcurveeditormodel.cpp b/src/plugins/qmldesigner/components/timelineeditor/animationcurveeditormodel.cpp index 023200f494d..077b467c0e2 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/animationcurveeditormodel.cpp +++ b/src/plugins/qmldesigner/components/timelineeditor/animationcurveeditormodel.cpp @@ -230,6 +230,19 @@ DesignTools::AnimationCurve AnimationCurveEditorModel::createDoubleCurve( { std::vector keyframes = createKeyframes(group.keyframePositions()); keyframes = resolveSmallCurves(keyframes); + + QString str; + ModelNode target = group.modelNode(); + if (target.hasAuxiliaryData("unified")) + str = target.auxiliaryData("unified").toString(); + + if (str.size() == static_cast(keyframes.size())) { + for (int i = 0; i < str.size(); ++i) { + if (str.at(i) == '1') + keyframes[i].setUnified(true); + } + } + return DesignTools::AnimationCurve(keyframes); } diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelinetoolbar.cpp b/src/plugins/qmldesigner/components/timelineeditor/timelinetoolbar.cpp index 5d693f54225..dec61de19fb 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelinetoolbar.cpp +++ b/src/plugins/qmldesigner/components/timelineeditor/timelinetoolbar.cpp @@ -253,11 +253,6 @@ void TimelineToolBar::openAnimationCurveEditor() m_dialog->show(); } -void TimelineToolBar::updateCurve(DesignTools::PropertyTreeItem *item) -{ - DesignTools::AnimationCurve curve = item->curve(); -} - void TimelineToolBar::createLeftControls() { auto addActionToGroup = [&](QAction *action) { diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelinetoolbar.h b/src/plugins/qmldesigner/components/timelineeditor/timelinetoolbar.h index 6f275484b4a..1bb222b424b 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelinetoolbar.h +++ b/src/plugins/qmldesigner/components/timelineeditor/timelinetoolbar.h @@ -91,8 +91,6 @@ public: void openAnimationCurveEditor(); - void updateCurve(DesignTools::PropertyTreeItem *item); - protected: void resizeEvent(QResizeEvent *event) override; diff --git a/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp b/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp index 508db1051b6..85a68cd0bd0 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp +++ b/src/plugins/qmldesigner/components/timelineeditor/timelinewidget.cpp @@ -340,6 +340,11 @@ void TimelineWidget::updateAnimationCurve(DesignTools::PropertyTreeItem *item) groupNode.setAuxiliaryData("pinned", true); else groupNode.removeAuxiliaryData("pinned"); + + if (item->hasUnified()) + groupNode.setAuxiliaryData("unified", item->unifyString()); + else + groupNode.removeAuxiliaryData("unified"); } auto replaceKeyframes = [&group, item, this]() { From 1290e07819f15d5b323b93c53c779364aad6a605 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Wed, 25 Mar 2020 14:25:54 +0100 Subject: [PATCH 36/41] QmlDesigner.PropertyEditor: Hide action indidactors on controls Task-number: QDS-1688 Change-Id: Ia96a8d5229b42d9ac0be75273cadfc35b5cef334 Reviewed-by: Brook Cronin Reviewed-by: Tim Jenssen --- .../propertyEditorQmlSources/QtQuick/LayoutPoperties.qml | 4 ++-- .../imports/HelperWidgets/AligmentHorizontalButtons.qml | 1 + .../imports/HelperWidgets/AligmentVerticalButtons.qml | 1 + .../imports/HelperWidgets/BoolButtonRowButton.qml | 1 + .../imports/HelperWidgets/CheckBox.qml | 1 + .../imports/HelperWidgets/ComboBox.qml | 1 + .../imports/HelperWidgets/ExtendedFunctionLogic.qml | 6 ++++++ .../imports/HelperWidgets/FontComboBox.qml | 1 + .../imports/HelperWidgets/LineEdit.qml | 1 + .../imports/HelperWidgets/SpinBox.qml | 2 ++ .../imports/HelperWidgets/UrlChooser.qml | 1 + .../imports/StudioControls/ActionIndicator.qml | 3 +++ 12 files changed, 21 insertions(+), 2 deletions(-) diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/LayoutPoperties.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/LayoutPoperties.qml index 83d4a65b513..a15d77d21ac 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/LayoutPoperties.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/LayoutPoperties.qml @@ -140,7 +140,7 @@ SectionLayout { actionIndicator.icon.color: extFuncLogic.color actionIndicator.icon.text: extFuncLogic.glyph actionIndicator.onClicked: extFuncLogic.show() - + actionIndicator.forceVisible: extFuncLogic.menuVisible actionIndicator.visible: true labelColor: horizontalAlignmentComboBox.currentIndex === 0 ? colorLogic.__defaultTextColor : colorLogic.__changedTextColor @@ -176,7 +176,7 @@ SectionLayout { actionIndicator.icon.color: extFuncLogic.color actionIndicator.icon.text: extFuncLogic.glyph actionIndicator.onClicked: extFuncLogic.show() - + actionIndicator.forceVisible: extFuncLogic.menuVisible actionIndicator.visible: true labelColor: verticalAlignmentComboBox.currentIndex === 0 ? colorLogic.__defaultTextColor : colorLogic.__changedTextColor diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/AligmentHorizontalButtons.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/AligmentHorizontalButtons.qml index bb545d23699..eb96c62722b 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/AligmentHorizontalButtons.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/AligmentHorizontalButtons.qml @@ -93,6 +93,7 @@ Row { actionIndicator.icon.color: extFuncLogic.color actionIndicator.icon.text: extFuncLogic.glyph actionIndicator.onClicked: extFuncLogic.show() + actionIndicator.forceVisible: extFuncLogic.menuVisible StudioControls.ButtonGroup { id: group diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/AligmentVerticalButtons.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/AligmentVerticalButtons.qml index d74fa5d66ec..65d23975e6c 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/AligmentVerticalButtons.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/AligmentVerticalButtons.qml @@ -93,6 +93,7 @@ Row { actionIndicator.icon.color: extFuncLogic.color actionIndicator.icon.text: extFuncLogic.glyph actionIndicator.onClicked: extFuncLogic.show() + actionIndicator.forceVisible: extFuncLogic.menuVisible StudioControls.ButtonGroup { id: group diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/BoolButtonRowButton.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/BoolButtonRowButton.qml index 45ff2619288..5a79e7a78fb 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/BoolButtonRowButton.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/BoolButtonRowButton.qml @@ -87,4 +87,5 @@ StudioControls.Button { actionIndicator.icon.color: extFuncLogic.color actionIndicator.icon.text: extFuncLogic.glyph actionIndicator.onClicked: extFuncLogic.show() + actionIndicator.forceVisible: extFuncLogic.menuVisible } diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/CheckBox.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/CheckBox.qml index c3388ab759d..b9a8055f2c7 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/CheckBox.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/CheckBox.qml @@ -40,6 +40,7 @@ StudioControls.CheckBox { actionIndicator.icon.color: extFuncLogic.color actionIndicator.icon.text: extFuncLogic.glyph actionIndicator.onClicked: extFuncLogic.show() + actionIndicator.forceVisible: extFuncLogic.menuVisible labelColor: colorLogic.textColor ColorLogic { diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ComboBox.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ComboBox.qml index ad3e7b25b01..cdd4fc4a67b 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ComboBox.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ComboBox.qml @@ -57,6 +57,7 @@ StudioControls.ComboBox { actionIndicator.icon.color: extFuncLogic.color actionIndicator.icon.text: extFuncLogic.glyph actionIndicator.onClicked: extFuncLogic.show() + actionIndicator.forceVisible: extFuncLogic.menuVisible actionIndicator.visible: comboBox.showExtendedFunctionButton diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ExtendedFunctionLogic.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ExtendedFunctionLogic.qml index 64fcf13d988..4dc3bb1a672 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ExtendedFunctionLogic.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/ExtendedFunctionLogic.qml @@ -42,6 +42,8 @@ Item { signal reseted + property bool menuVisible: false + function show() { menuLoader.show() } @@ -97,6 +99,10 @@ Item { onAboutToShow: { exportMenuItem.checked = backendValue.hasPropertyAlias() exportMenuItem.enabled = !backendValue.isAttachedProperty() + extendedFunctionButton.menuVisible = true + } + onAboutToHide: { + extendedFunctionButton.menuVisible = false } StudioControls.MenuItem { diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/FontComboBox.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/FontComboBox.qml index 5d9ae328d24..76a030f81ef 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/FontComboBox.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/FontComboBox.qml @@ -81,6 +81,7 @@ StudioControls.ComboBox { actionIndicator.icon.color: extFuncLogic.color actionIndicator.icon.text: extFuncLogic.glyph actionIndicator.onClicked: extFuncLogic.show() + actionIndicator.forceVisible: extFuncLogic.menuVisible property bool showExtendedFunctionButton: true diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/LineEdit.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/LineEdit.qml index 5b6478adb1a..4a544a0f6a9 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/LineEdit.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/LineEdit.qml @@ -70,6 +70,7 @@ StudioControls.TextField { actionIndicator.icon.color: extFuncLogic.color actionIndicator.icon.text: extFuncLogic.glyph actionIndicator.onClicked: extFuncLogic.show() + actionIndicator.forceVisible: extFuncLogic.menuVisible ColorLogic { id: colorLogic diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/SpinBox.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/SpinBox.qml index 94bcb5bc1e4..3f70547692a 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/SpinBox.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/SpinBox.qml @@ -84,6 +84,8 @@ Item { actionIndicator.icon.text: extFuncLogic.glyph actionIndicator.onClicked: extFuncLogic.show() + actionIndicator.forceVisible: extFuncLogic.menuVisible + ColorLogic { id: colorLogic backendValue: spinBox.backendValue diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/UrlChooser.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/UrlChooser.qml index 7e23ccc6820..dcb0cc58b96 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/UrlChooser.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/UrlChooser.qml @@ -53,6 +53,7 @@ RowLayout { actionIndicator.icon.color: extFuncLogic.color actionIndicator.icon.text: extFuncLogic.glyph actionIndicator.onClicked: extFuncLogic.show() + actionIndicator.forceVisible: extFuncLogic.menuVisible ExtendedFunctionLogic { id: extFuncLogic diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/ActionIndicator.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/ActionIndicator.qml index e53df0712db..74869c386cc 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/ActionIndicator.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/ActionIndicator.qml @@ -37,6 +37,7 @@ Rectangle { property bool hover: false property bool pressed: false + property bool forceVisible: false color: actionIndicator.showBackground ? StudioTheme.Values.themeControlBackground : "transparent" border.color: actionIndicator.showBackground ? StudioTheme.Values.themeControlOutline : "transparent" @@ -50,6 +51,7 @@ Rectangle { id: actionIndicatorIcon anchors.fill: parent text: StudioTheme.Constants.actionIcon + visible: text != StudioTheme.Constants.actionIcon || actionIndicator.forceVisible color: StudioTheme.Values.themeTextColor font.family: StudioTheme.Constants.iconFont.family font.pixelSize: StudioTheme.Values.myIconFontSize @@ -65,6 +67,7 @@ Rectangle { PropertyChanges { target: actionIndicatorIcon scale: 1.2 + visible: true } }, State { From 03dd1654748caf47c751e5cf8e9af056d651b8e3 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Wed, 25 Mar 2020 14:38:26 +0100 Subject: [PATCH 37/41] LanguageClient: Fix setting trigger chars for function hint provider Change-Id: Ibd9f647ea6005638a06524aeac9ea64a0632b0d0 Reviewed-by: Christian Stenger --- src/plugins/languageclient/client.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index 80b156216d5..e3b8adc6d58 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -1244,7 +1244,7 @@ void Client::initializeCallback(const InitializeRequest::Response &initResponse) .value_or(QList())); } if (auto functionHintAssistProvider = qobject_cast( - m_clientProviders.completionAssistProvider)) { + m_clientProviders.functionHintProvider)) { functionHintAssistProvider->setTriggerCharacters( m_serverCapabilities.signatureHelpProvider() .value_or(ServerCapabilities::SignatureHelpOptions()) From b04391619bab5c5d6d317c54d447cefbe150490f Mon Sep 17 00:00:00 2001 From: Oliver Wolff Date: Mon, 23 Mar 2020 13:41:26 +0100 Subject: [PATCH 38/41] Android: Fix download link for JDK sdkmanager only works correctly with JDK 8, so we should not point to the latest JDK release, but specifically that one. Task-number: QTBUG-79664 Change-Id: I29dc2d26d41eed96c1abc03907ee835d70b9553b Reviewed-by: Christian Stenger --- src/plugins/android/androidsettingswidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/android/androidsettingswidget.cpp b/src/plugins/android/androidsettingswidget.cpp index bf40091db95..251b621bf3a 100644 --- a/src/plugins/android/androidsettingswidget.cpp +++ b/src/plugins/android/androidsettingswidget.cpp @@ -778,7 +778,7 @@ void AndroidSettingsWidget::openNDKDownloadUrl() void AndroidSettingsWidget::openOpenJDKDownloadUrl() { - QDesktopServices::openUrl(QUrl::fromUserInput("http://www.oracle.com/technetwork/java/javase/downloads/")); + QDesktopServices::openUrl(QUrl::fromUserInput("https://www.oracle.com/java/technologies/javase-jdk8-downloads.html")); } void AndroidSettingsWidget::downloadOpenSslRepo(const bool silent) From fccdc91e516ccd641d3cbce7f61e6b95cc82b2df Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Wed, 25 Mar 2020 13:38:05 +0100 Subject: [PATCH 39/41] QmlDesigner: Do not allow keyboard focus on macOS for puppet Since we integrated the 3D view no keyboard focus is required anymore. Change-Id: Ia523e1a6b0c1d0ef9912775a91022f28de47b54a Reviewed-by: Mahmoud Badri Reviewed-by: Miikka Heikkinen --- .../qtcreator/qml/qmlpuppet/qml2puppet/Info.plist | 2 ++ .../qml/qmlpuppet/qml2puppet/qml2puppetmain.cpp | 14 +------------- 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/Info.plist b/share/qtcreator/qml/qmlpuppet/qml2puppet/Info.plist index c15f81acad9..f8d63231ea7 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/Info.plist +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/Info.plist @@ -28,5 +28,7 @@ be met: https://www.gnu.org/licenses/gpl-3.0.html. qml2puppet CFBundleIdentifier org.qt-project.qtcreator.qml2puppet + LSUIElement + 1 diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/qml2puppetmain.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/qml2puppetmain.cpp index 10b8487d50b..70f403512fa 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/qml2puppetmain.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/qml2puppetmain.cpp @@ -133,19 +133,7 @@ int main(int argc, char *argv[]) // subpixel antialiasing and instead use gray. qputenv("QSG_DISTANCEFIELD_ANTIALIASING", "gray"); #ifdef Q_OS_MACOS - if (!qEnvironmentVariableIsSet("QMLDESIGNER_QUICK3D_MODE")) { - qputenv("QT_MAC_DISABLE_FOREGROUND_APPLICATION_TRANSFORM", "true"); - } else { - // We have to parse the arguments before Q[Gui]Application creation - // Since the Qt arguments are not filtered out, yet we do not know the position of the argument - for (int i = 0; i < argc; ++i) { - const char *arg = argv[i]; - //In previewmode and rendermode we hide the process - if (!qstrcmp(arg, "previewmode") || !qstrcmp(arg, "rendermode")) - qputenv("QT_MAC_DISABLE_FOREGROUND_APPLICATION_TRANSFORM", "true"); - // This keeps qml2puppet from stealing focus - } - } + qputenv("QT_MAC_DISABLE_FOREGROUND_APPLICATION_TRANSFORM", "true"); #endif //If a style different from Desktop is set we have to use QGuiApplication From 3719b2931b065e20c3caf14e3f089f35cc240c66 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Thu, 26 Mar 2020 06:50:19 +0100 Subject: [PATCH 40/41] LanguageClient: Resolve recursive include Change-Id: I2d365afc71a07e08b26052798fec1ce2c1e63fe3 Reviewed-by: Christian Stenger --- src/plugins/languageclient/languageclientformatter.cpp | 1 + src/plugins/languageclient/languageclientformatter.h | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/plugins/languageclient/languageclientformatter.cpp b/src/plugins/languageclient/languageclientformatter.cpp index 4097d000ce0..300208e8bf9 100644 --- a/src/plugins/languageclient/languageclientformatter.cpp +++ b/src/plugins/languageclient/languageclientformatter.cpp @@ -25,6 +25,7 @@ #include "languageclientformatter.h" +#include "client.h" #include "languageclientutils.h" #include diff --git a/src/plugins/languageclient/languageclientformatter.h b/src/plugins/languageclient/languageclientformatter.h index a9be3f7cab6..5c03b2ef261 100644 --- a/src/plugins/languageclient/languageclientformatter.h +++ b/src/plugins/languageclient/languageclientformatter.h @@ -25,13 +25,16 @@ #pragma once -#include "client.h" +#include +#include #include namespace TextEditor { class TextDocument; } namespace LanguageClient { +class Client; + class LanguageClientFormatter : public TextEditor::Formatter { public: From 94149612068ef9cd78f2e8fb07b70df62b36773e Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Fri, 20 Mar 2020 14:08:26 +0100 Subject: [PATCH 41/41] Fix example Task-number: QTCREATORBUG-23045 Change-Id: I2cf54a4b6ede3a19d0e5273683f4969d397028ba Reviewed-by: Tim Jenssen --- doc/qtcreator/examples/accelbubble/main.qml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/qtcreator/examples/accelbubble/main.qml b/doc/qtcreator/examples/accelbubble/main.qml index 26fe2598f05..584ba4d1a72 100644 --- a/doc/qtcreator/examples/accelbubble/main.qml +++ b/doc/qtcreator/examples/accelbubble/main.qml @@ -118,14 +118,14 @@ ApplicationWindow { if (newX < 0) newX = 0 - if (newX > mainWindow.width - bubble.width) - newX = mainWindow.width - bubble.width + if (newX > page1.mainWindow.width - bubble.width) + newX = page1.mainWindow.width - bubble.width if (newY < 18) newY = 18 - if (newY > mainWindow.height - bubble.height) - newY = mainWindow.height - bubble.height + if (newY > page1.mainWindow.height - bubble.height) + newY = page1.mainWindow.height - bubble.height bubble.x = newX bubble.y = newY