From b403258c87288cd0435254c69a2f5145d4623cdd Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 29 Oct 2021 16:39:10 +0200 Subject: [PATCH 01/48] ClangCodeModel: Try to correct unexpected ClangdClient count Ideally, it should not happen that there is more than one client per project, but if it does, try to fix the situation by choosing the "best" one and shutting down the others. Change-Id: If00924925afabf6bc7efe7f33da693db323a00d8 Reviewed-by: David Schulz --- .../clangcodemodel/clangmodelmanagersupport.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp index c06d8a8fff7..27d280ac7ad 100644 --- a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp +++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp @@ -388,6 +388,18 @@ ClangdClient *ClangModelManagerSupport::clientForProject( && c->state() != Client::Shutdown; }); QTC_ASSERT(clients.size() <= 1, qDebug() << project << clients.size()); + if (clients.size() > 1) { + Client *activeClient = nullptr; + for (Client * const c : clients) { + if (!activeClient && (c->state() == Client::Initialized + || c->state() == Client::InitializeRequested)) { + activeClient = c; + } else { + LanguageClientManager::shutdownClient(c); + } + } + return qobject_cast(activeClient); + } return clients.empty() ? nullptr : qobject_cast(clients.first()); } From 4fe5be2565eaaa585dfd0f5fee5d7126652ee737 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 28 Oct 2021 11:59:48 +0200 Subject: [PATCH 02/48] ClangCodeModel: Try harder to find out whether a function is virtual ... when following symbols with clangd. The textdocument/implementation request is expensive, so we'd like to make sure we only run it if we are sure that we're really dealing with a virtual function. We re-use the information gathered during highlighting for this purpose. Change-Id: Id92a9a92fe2ac7fd5acf903a9ade711223ee401b Reviewed-by: David Schulz --- src/plugins/clangcodemodel/clangdclient.cpp | 53 ++++++++++++++++++++- src/plugins/clangcodemodel/clangdclient.h | 4 ++ 2 files changed, 55 insertions(+), 2 deletions(-) diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index 7c811681556..6cf51fa6970 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -27,6 +27,7 @@ #include "clangcompletioncontextanalyzer.h" #include "clangdiagnosticmanager.h" +#include "clangmodelmanagersupport.h" #include "clangpreprocessorassistproposalitem.h" #include "clangtextmark.h" #include "clangutils.h" @@ -654,6 +655,7 @@ public: bool openInSplit) : q(q), id(id), cursor(cursor), editorWidget(editorWidget), uri(uri), callback(std::move(callback)), virtualFuncAssistProvider(q->d), + docRevision(editorWidget ? editorWidget->textDocument()->document()->revision() : -1), openInSplit(openInSplit) {} ~FollowSymbolData() @@ -678,6 +680,8 @@ public: openedFiles.clear(); } + bool defLinkIsAmbiguous() const; + ClangdClient * const q; const quint64 id; const QTextCursor cursor; @@ -688,6 +692,7 @@ public: QList pendingSymbolInfoRequests; QList pendingGotoImplRequests; QList pendingGotoDefRequests; + const int docRevision; const bool openInSplit; Utils::Link defLink; @@ -1059,6 +1064,10 @@ public: // The highlighters are owned by their respective documents. std::unordered_map highlighters; + // The ranges of symbols referring to virtual functions, with document version, + // as extracted by the highlighting procedure. + QHash, int>> virtualRanges; + VersionedDataCache astCache; VersionedDataCache externalAstCache; TaskTimer highlightingTimer{"highlighting"}; @@ -1366,6 +1375,7 @@ void ClangdClient::handleDocumentClosed(TextDocument *doc) { d->highlighters.erase(doc); d->astCache.remove(doc); + d->virtualRanges.remove(doc); } QVersionNumber ClangdClient::versionNumber() const @@ -1996,6 +2006,14 @@ void ClangdClient::gatherHelpItemForTooltip(const HoverRequest::Response &hoverR d->getAndHandleAst(doc, astHandler, Private::AstCallbackMode::SyncIfPossible); } +void ClangdClient::setVirtualRanges(const Utils::FilePath &filePath, const QList &ranges, + int revision) +{ + TextDocument * const doc = documentForFilePath(filePath); + if (doc && doc->document()->revision() == revision) + d->virtualRanges.insert(doc, {ranges, revision}); +} + void ClangdClient::Private::handleGotoDefinitionResult() { QTC_ASSERT(followSymbolData->defLink.hasValidTarget(), return); @@ -2003,8 +2021,7 @@ void ClangdClient::Private::handleGotoDefinitionResult() qCDebug(clangdLog) << "handling go to definition result"; // No dis-ambiguation necessary. Call back with the link and finish. - if (!followSymbolData->cursorNode->mightBeAmbiguousVirtualCall() - && !followSymbolData->cursorNode->isPureVirtualDeclaration()) { + if (!followSymbolData->defLinkIsAmbiguous()) { followSymbolData->callback(followSymbolData->defLink); followSymbolData.reset(); return; @@ -2491,6 +2508,20 @@ static void semanticHighlighter(QFutureInterface &future, ExtraHighlightingResultsCollector(future, results, filePath, ast, &doc, docContents).collect(); if (!future.isCanceled()) { qCDebug(clangdLog) << "reporting" << results.size() << "highlighting results"; + QList virtualRanges; + for (const HighlightingResult &r : results) { + if (r.textStyles.mainStyle != C_VIRTUAL_METHOD) + continue; + const Position startPos(r.line - 1, r.column - 1); + virtualRanges << Range(startPos, startPos.withOffset(r.length, &doc)); + } + QMetaObject::invokeMethod(ClangModelManagerSupport::instance(), + [filePath, virtualRanges, docRevision] { + if (ClangdClient * const client + = ClangModelManagerSupport::instance()->clientForFile(filePath)) { + client->setVirtualRanges(filePath, virtualRanges, docRevision); + } + }, Qt::QueuedConnection); future.reportResults(QVector(results.cbegin(), results.cend())); } @@ -3463,6 +3494,24 @@ void ExtraHighlightingResultsCollector::visitNode(const AstNode &node) } } +bool ClangdClient::FollowSymbolData::defLinkIsAmbiguous() const +{ + // If we have up-to-date highlighting info, we can give a definite answer. + if (editorWidget) { + const auto virtualRanges = q->d->virtualRanges.constFind(editorWidget->textDocument()); + if (virtualRanges != q->d->virtualRanges.constEnd() + && virtualRanges->second == docRevision) { + const auto matcher = [cursorRange = cursorNode->range()](const Range &r) { + return cursorRange.overlaps(r); + }; + return Utils::contains(virtualRanges->first, matcher); + } + } + + // Otherwise, we have to rely on AST-based heuristics. + return cursorNode->mightBeAmbiguousVirtualCall() || cursorNode->isPureVirtualDeclaration(); +} + } // namespace Internal } // namespace ClangCodeModel diff --git a/src/plugins/clangcodemodel/clangdclient.h b/src/plugins/clangcodemodel/clangdclient.h index 03675516616..580168c3e33 100644 --- a/src/plugins/clangcodemodel/clangdclient.h +++ b/src/plugins/clangcodemodel/clangdclient.h @@ -35,6 +35,7 @@ namespace Core { class SearchResultItem; } namespace CppEditor { class CppEditorWidget; } +namespace LanguageServerProtocol { class Range; } namespace ProjectExplorer { class Project; } namespace TextEditor { class BaseTextEditor; } @@ -76,6 +77,9 @@ public: const LanguageServerProtocol::HoverRequest::Response &hoverResponse, const LanguageServerProtocol::DocumentUri &uri); + void setVirtualRanges(const Utils::FilePath &filePath, + const QList &ranges, int revision); + void enableTesting(); bool testingEnabled() const; From 6e5ec9a939e6516784a4c65ab43449446c44cd3d Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 29 Oct 2021 16:46:34 +0200 Subject: [PATCH 03/48] ClangCodeModel: Prevent indexing with fallback client There is no project to index. Change-Id: I6d3ad2f894a45e2a7934cfb3c10c525299bfd34b Reviewed-by: David Schulz --- src/plugins/clangcodemodel/clangdclient.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index 6cf51fa6970..eef6e5e5730 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -560,7 +560,7 @@ static BaseClientInterface *clientInterface(Project *project, const Utils::FileP { QString indexingOption = "--background-index"; const CppEditor::ClangdSettings settings(CppEditor::ClangdProjectSettings(project).settings()); - if (!settings.indexingEnabled()) + if (!settings.indexingEnabled() || jsonDbDir.isEmpty()) indexingOption += "=0"; const QString headerInsertionOption = QString("--header-insertion=") + (settings.autoIncludeHeaders() ? "iwyu" : "never"); From 691acb8f872981eb060d63fc0f802787a0df81bc Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 27 Oct 2021 11:35:14 +0200 Subject: [PATCH 04/48] Fix build after qbs submodule update Change-Id: I195111ecb26dd0d313aeed5b8df3806a394d8d00 Reviewed-by: Christian Stenger --- src/src.qbs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/src.qbs b/src/src.qbs index 4f8db24ca98..8d50dafdc10 100644 --- a/src/src.qbs +++ b/src/src.qbs @@ -34,6 +34,7 @@ Project { qbsBaseDir + "/src/app/apps.qbs", qbsBaseDir + "/src/shared/bundledqt/bundledqt.qbs", qbsBaseDir + "/src/shared/json/json.qbs", + qbsBaseDir + "/src/shared/variant/variant.qbs", ] } } From a64912dad8ad918ae0bf44e53eef30a6e380b078 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 29 Oct 2021 13:34:14 +0200 Subject: [PATCH 05/48] Keyboard settings: Update item in list when resetting Explicitly update the item in the list when resetting a single shortcut. This was implicitly happening if the action has a shortcut by default (via the update of the shortcut input), but not if the action's default shortcuts are empty. Fixes: QTCREATORBUG-26502 Change-Id: Ic48accf6d2061e692ece9a1b756d004bac92f609 Reviewed-by: Qt CI Bot Reviewed-by: Christian Stenger --- src/plugins/coreplugin/dialogs/shortcutsettings.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/coreplugin/dialogs/shortcutsettings.cpp b/src/plugins/coreplugin/dialogs/shortcutsettings.cpp index a27d65b7b58..6d6ab01060a 100644 --- a/src/plugins/coreplugin/dialogs/shortcutsettings.cpp +++ b/src/plugins/coreplugin/dialogs/shortcutsettings.cpp @@ -483,6 +483,8 @@ void ShortcutSettingsWidget::resetToDefault() ShortcutItem *scitem = shortcutItem(current); if (scitem) { scitem->m_keys = scitem->m_cmd->defaultKeySequences(); + current->setText(2, keySequencesToNativeString(scitem->m_keys)); + CommandMappings::setModified(current, false); setupShortcutBox(scitem); markAllCollisions(); } From 33cfb7ebfca67abe465a13671b8368cb07524ebf Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 1 Nov 2021 07:20:40 +0100 Subject: [PATCH 06/48] LanguageClient: add a human readable version of client state Change-Id: I650e4b4932f32ad86505e9be2fc85eef6bcd6edd Reviewed-by: Christian Kandeler --- src/plugins/languageclient/client.cpp | 13 +++++++++++++ src/plugins/languageclient/client.h | 1 + 2 files changed, 14 insertions(+) diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index b177f82c520..29afb0e85a0 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -340,6 +340,19 @@ Client::State Client::state() const return m_state; } +QString Client::stateString() const +{ + switch (m_state){ + case Uninitialized: return tr("uninitialized"); + case InitializeRequested: return tr("initialize requested"); + case Initialized: return tr("initialized"); + case ShutdownRequested: return tr("shutdown requested"); + case Shutdown: return tr("shutdown"); + case Error: return tr("error"); + } + return {}; +} + ClientCapabilities Client::defaultClientCapabilities() { return generateClientCapabilities(); diff --git a/src/plugins/languageclient/client.h b/src/plugins/languageclient/client.h index 59f23599a49..7d433ee828b 100644 --- a/src/plugins/languageclient/client.h +++ b/src/plugins/languageclient/client.h @@ -116,6 +116,7 @@ public: Error }; State state() const; + QString stateString() const; bool reachable() const { return m_state == Initialized; } // capabilities From 7ca826e2f3158465c5aa51762e04fa9d3e7751d9 Mon Sep 17 00:00:00 2001 From: Mahmoud Badri Date: Mon, 1 Nov 2021 12:23:48 +0200 Subject: [PATCH 07/48] QmlDesigner: Close component library's context menus when layout change Fixes: QDS-5351 Change-Id: I06e02b7c137d2398528e6d4120d9ffbc7632c7a7 Reviewed-by: Miikka Heikkinen --- .../qtcreator/qmldesigner/itemLibraryQmlSources/ItemsView.qml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemsView.qml b/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemsView.qml index 815d4427ada..cbd9e5ed504 100644 --- a/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemsView.qml +++ b/share/qtcreator/qmldesigner/itemLibraryQmlSources/ItemsView.qml @@ -82,7 +82,7 @@ Item { property var currentImport: null property bool isHorizontalView: false - // called from C++ to close context menu on focus out + // Called also from C++ to close context menu on focus out function closeContextMenu() { moduleContextMenu.close() @@ -93,6 +93,8 @@ Item { itemsView.isHorizontalView = itemsView.width > widthLimit } + onIsHorizontalViewChanged: closeContextMenu() + Item { id: styleConstants property int textWidth: 58 From fe20c60c69f85488719acea278bd4ec90bf059f3 Mon Sep 17 00:00:00 2001 From: Mahmoud Badri Date: Thu, 28 Oct 2021 15:28:17 +0300 Subject: [PATCH 08/48] QmlDesigner: Support dnd bridge files to the assets lib Fixes: QDS-5278 Change-Id: I2e77ddcbdd6d97ca9d63ee2c8e4871302e8636b1 Reviewed-by: Miikka Heikkinen Reviewed-by: Qt CI Bot Reviewed-by: Thomas Hartmann --- .../qmldesigner/itemLibraryQmlSources/Assets.qml | 2 +- .../components/itemlibrary/itemlibraryassetsmodel.h | 3 ++- .../components/itemlibrary/itemlibrarywidget.cpp | 12 ++++++++++++ .../components/itemlibrary/itemlibrarywidget.h | 2 +- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/share/qtcreator/qmldesigner/itemLibraryQmlSources/Assets.qml b/share/qtcreator/qmldesigner/itemLibraryQmlSources/Assets.qml index 498c474411a..5ca714051b0 100644 --- a/share/qtcreator/qmldesigner/itemLibraryQmlSources/Assets.qml +++ b/share/qtcreator/qmldesigner/itemLibraryQmlSources/Assets.qml @@ -51,7 +51,7 @@ Item { if (url.startsWith("file:///")) // remove file scheme (happens on Windows) url = url.substr(8) var ext = url.slice(url.lastIndexOf('.') + 1).toLowerCase() - if (rootView.supportedSuffixes().includes('*.' + ext)) + if (rootView.supportedDropSuffixes().includes('*.' + ext)) files.push(url) } diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetsmodel.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetsmodel.h index 641f987fc0b..294a760a6b5 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetsmodel.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibraryassetsmodel.h @@ -66,7 +66,6 @@ public: static const QStringList &supportedAudioSuffixes(); static const QStringList &supportedTexture3DSuffixes(); - const QSet &supportedSuffixes() const; const QSet &previewableSuffixes() const; static void saveExpandedState(bool expanded, const QString &assetPath); @@ -84,6 +83,8 @@ public: Q_INVOKABLE void removeFile(const QString &filePath); private: + const QSet &supportedSuffixes() const; + SynchronousImageCache &m_fontImageCache; QHash> m_iconCache; diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp index 28b5d9fb947..fb4de1d84b7 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.cpp @@ -372,6 +372,18 @@ void ItemLibraryWidget::handleFilesDrop(const QStringList &filesPaths) addResources(filesPaths); } +QSet ItemLibraryWidget::supportedDropSuffixes() +{ + const QList handlers = QmlDesignerPlugin::instance()->viewManager() + .designerActionManager().addResourceHandler(); + + QSet suffixes; + for (const AddResourceHandler &handler : handlers) + suffixes.insert(handler.filter); + + return suffixes; +} + void ItemLibraryWidget::delayedUpdateModel() { static bool disableTimer = DesignerSettings::getValue(DesignerSettingsKey::DISABLE_ITEM_LIBRARY_UPDATE_TIMER).toBool(); diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.h index 6695c01da5a..5f631ae2434 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarywidget.h @@ -105,7 +105,7 @@ public: Q_INVOKABLE void handleAddImport(int index); Q_INVOKABLE bool isSearchActive() const; Q_INVOKABLE void handleFilesDrop(const QStringList &filesPaths); - Q_INVOKABLE QSet supportedSuffixes() const { return m_assetsModel->supportedSuffixes(); }; + Q_INVOKABLE QSet supportedDropSuffixes(); signals: void itemActivated(const QString& itemName); From 3562c5e96e1371d81e35af5274e130a024525993 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Fri, 29 Oct 2021 17:29:18 +0200 Subject: [PATCH 09/48] Remove unneeded includes of QProcess from cpp files QProcess wasn't used in these files. Change-Id: I24900bcf312eb6ea1ca3bc0c753cebb505ec552b Reviewed-by: Qt CI Bot Reviewed-by: hjk --- src/plugins/android/androidsdkdownloader.cpp | 3 +-- src/plugins/android/androidsdkmanagerwidget.cpp | 1 - src/plugins/beautifier/beautifierplugin.cpp | 1 - src/plugins/clearcase/clearcaseplugin.cpp | 1 - src/plugins/coreplugin/locator/spotlightlocatorfilter.cpp | 1 - src/plugins/debugger/debuggeritem.cpp | 1 - src/plugins/debugger/watchhandler.cpp | 5 ++--- src/plugins/ios/iosconfigurations.cpp | 3 +-- src/plugins/ios/iosprobe.cpp | 1 - src/plugins/ios/simulatorcontrol.cpp | 1 - src/plugins/nim/project/nimtoolchainfactory.cpp | 1 - src/plugins/perforce/perforceeditor.cpp | 1 - .../projectexplorer/devicesupport/localprocesslist.cpp | 1 - src/plugins/projectexplorer/extracompiler.cpp | 3 +-- src/plugins/projectexplorer/msvctoolchain.cpp | 1 - src/plugins/qmakeprojectmanager/externaleditors.cpp | 4 +--- .../designercore/instances/connectionmanagerinterface.cpp | 1 - .../designercore/instances/nodeinstanceserverproxy.cpp | 1 - .../designercore/instances/puppetbuildprogressdialog.cpp | 1 - src/plugins/vcsbase/vcsbaseclient.cpp | 8 ++------ tests/unit/unittest/clientserveroutsideprocess-test.cpp | 1 - 21 files changed, 8 insertions(+), 33 deletions(-) diff --git a/src/plugins/android/androidsdkdownloader.cpp b/src/plugins/android/androidsdkdownloader.cpp index 1ed8e045810..59adbe50bdf 100644 --- a/src/plugins/android/androidsdkdownloader.cpp +++ b/src/plugins/android/androidsdkdownloader.cpp @@ -28,11 +28,10 @@ #include "utils/qtcprocess.h" #include +#include #include #include #include -#include -#include #include using namespace Utils; diff --git a/src/plugins/android/androidsdkmanagerwidget.cpp b/src/plugins/android/androidsdkmanagerwidget.cpp index 96824298eed..9edb0fdf4ed 100644 --- a/src/plugins/android/androidsdkmanagerwidget.cpp +++ b/src/plugins/android/androidsdkmanagerwidget.cpp @@ -41,7 +41,6 @@ #include #include #include -#include #include namespace { diff --git a/src/plugins/beautifier/beautifierplugin.cpp b/src/plugins/beautifier/beautifierplugin.cpp index bc5dde7ac5b..aa2f8e4532e 100644 --- a/src/plugins/beautifier/beautifierplugin.cpp +++ b/src/plugins/beautifier/beautifierplugin.cpp @@ -62,7 +62,6 @@ #include #include #include -#include #include #include diff --git a/src/plugins/clearcase/clearcaseplugin.cpp b/src/plugins/clearcase/clearcaseplugin.cpp index a878f8864c1..c82d2bdae1e 100644 --- a/src/plugins/clearcase/clearcaseplugin.cpp +++ b/src/plugins/clearcase/clearcaseplugin.cpp @@ -88,7 +88,6 @@ #include #include #include -#include #include #include #include diff --git a/src/plugins/coreplugin/locator/spotlightlocatorfilter.cpp b/src/plugins/coreplugin/locator/spotlightlocatorfilter.cpp index 90dab9a8ec1..4f7e49d2f2c 100644 --- a/src/plugins/coreplugin/locator/spotlightlocatorfilter.cpp +++ b/src/plugins/coreplugin/locator/spotlightlocatorfilter.cpp @@ -45,7 +45,6 @@ #include #include #include -#include #include #include diff --git a/src/plugins/debugger/debuggeritem.cpp b/src/plugins/debugger/debuggeritem.cpp index e759d1889e7..2f71c8606bf 100644 --- a/src/plugins/debugger/debuggeritem.cpp +++ b/src/plugins/debugger/debuggeritem.cpp @@ -41,7 +41,6 @@ #include #include -#include #include #ifdef WITH_TESTS diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index ed3fb5de9d2..2b5373a042f 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -71,14 +71,13 @@ #include #include #include -#include #include +#include #include #include -#include #include -#include #include +#include #include #include diff --git a/src/plugins/ios/iosconfigurations.cpp b/src/plugins/ios/iosconfigurations.cpp index cf137c68bc6..6c244cfd4e1 100644 --- a/src/plugins/ios/iosconfigurations.cpp +++ b/src/plugins/ios/iosconfigurations.cpp @@ -60,10 +60,9 @@ #include #include #include -#include #include -#include #include +#include #include #include diff --git a/src/plugins/ios/iosprobe.cpp b/src/plugins/ios/iosprobe.cpp index 7fafba0ef48..84bfa561027 100644 --- a/src/plugins/ios/iosprobe.cpp +++ b/src/plugins/ios/iosprobe.cpp @@ -32,7 +32,6 @@ #include #include #include -#include static Q_LOGGING_CATEGORY(probeLog, "qtc.ios.probe", QtWarningMsg) diff --git a/src/plugins/ios/simulatorcontrol.cpp b/src/plugins/ios/simulatorcontrol.cpp index 993a245716e..0bf72b8a2f2 100644 --- a/src/plugins/ios/simulatorcontrol.cpp +++ b/src/plugins/ios/simulatorcontrol.cpp @@ -42,7 +42,6 @@ #include #include #include -#include using namespace Utils; using namespace std; diff --git a/src/plugins/nim/project/nimtoolchainfactory.cpp b/src/plugins/nim/project/nimtoolchainfactory.cpp index 91e74e3e3aa..289a29e693c 100644 --- a/src/plugins/nim/project/nimtoolchainfactory.cpp +++ b/src/plugins/nim/project/nimtoolchainfactory.cpp @@ -36,7 +36,6 @@ #include #include -#include using namespace ProjectExplorer; using namespace Utils; diff --git a/src/plugins/perforce/perforceeditor.cpp b/src/plugins/perforce/perforceeditor.cpp index 4566efc3572..3a642db9bba 100644 --- a/src/plugins/perforce/perforceeditor.cpp +++ b/src/plugins/perforce/perforceeditor.cpp @@ -34,7 +34,6 @@ #include #include -#include #include #include diff --git a/src/plugins/projectexplorer/devicesupport/localprocesslist.cpp b/src/plugins/projectexplorer/devicesupport/localprocesslist.cpp index 33796e3b12d..1579b2cc9fe 100644 --- a/src/plugins/projectexplorer/devicesupport/localprocesslist.cpp +++ b/src/plugins/projectexplorer/devicesupport/localprocesslist.cpp @@ -31,7 +31,6 @@ #include #ifdef Q_OS_UNIX -#include #include #include #include diff --git a/src/plugins/projectexplorer/extracompiler.cpp b/src/plugins/projectexplorer/extracompiler.cpp index 8e842b02264..e18df2b0f36 100644 --- a/src/plugins/projectexplorer/extracompiler.cpp +++ b/src/plugins/projectexplorer/extracompiler.cpp @@ -45,10 +45,9 @@ #include #include #include -#include +#include #include #include -#include using namespace Utils; diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp index ca93d5582b7..80b7ae637db 100644 --- a/src/plugins/projectexplorer/msvctoolchain.cpp +++ b/src/plugins/projectexplorer/msvctoolchain.cpp @@ -51,7 +51,6 @@ #include #include #include -#include #include #include #include diff --git a/src/plugins/qmakeprojectmanager/externaleditors.cpp b/src/plugins/qmakeprojectmanager/externaleditors.cpp index fe953a00498..ad6192844de 100644 --- a/src/plugins/qmakeprojectmanager/externaleditors.cpp +++ b/src/plugins/qmakeprojectmanager/externaleditors.cpp @@ -36,11 +36,9 @@ #include #include -#include #include - -#include #include +#include using namespace ProjectExplorer; using namespace Utils; diff --git a/src/plugins/qmldesigner/designercore/instances/connectionmanagerinterface.cpp b/src/plugins/qmldesigner/designercore/instances/connectionmanagerinterface.cpp index 7e0114bd8e2..43ff7f48a28 100644 --- a/src/plugins/qmldesigner/designercore/instances/connectionmanagerinterface.cpp +++ b/src/plugins/qmldesigner/designercore/instances/connectionmanagerinterface.cpp @@ -26,7 +26,6 @@ #include "connectionmanagerinterface.h" #include -#include #include namespace QmlDesigner { diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp index e04d725b38a..663af8f0f43 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.cpp @@ -81,7 +81,6 @@ #include #include #include -#include #include #include #include diff --git a/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.cpp b/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.cpp index 51d0242a1f5..b2e455a44f9 100644 --- a/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.cpp +++ b/src/plugins/qmldesigner/designercore/instances/puppetbuildprogressdialog.cpp @@ -26,7 +26,6 @@ #include "puppetbuildprogressdialog.h" #include "ui_puppetbuildprogressdialog.h" -#include #include #include #include diff --git a/src/plugins/vcsbase/vcsbaseclient.cpp b/src/plugins/vcsbase/vcsbaseclient.cpp index ecbb5ea37c8..9339d2ffd68 100644 --- a/src/plugins/vcsbase/vcsbaseclient.cpp +++ b/src/plugins/vcsbase/vcsbaseclient.cpp @@ -41,15 +41,11 @@ #include #include -#include -#include -#include -#include #include #include -#include +#include +#include #include -#include using namespace Utils; diff --git a/tests/unit/unittest/clientserveroutsideprocess-test.cpp b/tests/unit/unittest/clientserveroutsideprocess-test.cpp index c2231614e78..75e838c8a66 100644 --- a/tests/unit/unittest/clientserveroutsideprocess-test.cpp +++ b/tests/unit/unittest/clientserveroutsideprocess-test.cpp @@ -35,7 +35,6 @@ #include #include -#include #include #include #include From 662135bc075c47e4ef495d32f21e6a5d4709ccf9 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 1 Nov 2021 11:28:29 +0100 Subject: [PATCH 10/48] FileSearch: Add some logging for search progress Change-Id: I453b04eb3701035138900d699d4e69d5fd9b99df Reviewed-by: David Schulz --- src/libs/utils/filesearch.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/libs/utils/filesearch.cpp b/src/libs/utils/filesearch.cpp index bb096e59bf2..4be8ef209f2 100644 --- a/src/libs/utils/filesearch.cpp +++ b/src/libs/utils/filesearch.cpp @@ -32,12 +32,15 @@ #include "stringutils.h" #include +#include #include #include #include #include +Q_LOGGING_CATEGORY(log, "qtc.utils.filesearch", QtWarningMsg) + using namespace Utils; static inline QString msgCanceled(const QString &searchTerm, int numMatches, int numFilesSearched) @@ -140,11 +143,13 @@ void FileSearch::operator()(QFutureInterface &futureInterf { if (futureInterface.isCanceled()) return; + qCDebug(log) << "Searching in" << item.filePath; futureInterface.setProgressRange(0, 1); futureInterface.setProgressValue(0); FileSearchResultList results; QString tempString; if (!getFileContent(item.filePath, item.encoding, &tempString, fileToContentsMap)) { + qCDebug(log) << "- failed to get content for" << item.filePath; futureInterface.cancel(); // failure return; } @@ -222,6 +227,7 @@ void FileSearch::operator()(QFutureInterface &futureInterf futureInterface.reportResult(results); futureInterface.setProgressValue(1); } + qCDebug(log) << "- finished searching in" << item.filePath; } FileSearchRegExp::FileSearchRegExp(const QString &searchTerm, QTextDocument::FindFlags flags, @@ -257,11 +263,13 @@ void FileSearchRegExp::operator()(QFutureInterface &future } if (futureInterface.isCanceled()) return; + qCDebug(log) << "Searching in" << item.filePath; futureInterface.setProgressRange(0, 1); futureInterface.setProgressValue(0); FileSearchResultList results; QString tempString; if (!getFileContent(item.filePath, item.encoding, &tempString, fileToContentsMap)) { + qCDebug(log) << "- failed to get content for" << item.filePath; futureInterface.cancel(); // failure return; } @@ -296,6 +304,7 @@ void FileSearchRegExp::operator()(QFutureInterface &future futureInterface.reportResult(results); futureInterface.setProgressValue(1); } + qCDebug(log) << "- finished searching in" << item.filePath; } struct SearchState From 91f4559720fd388b37a5180a466b1125cf5b7969 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20L=C3=B6hning?= Date: Fri, 29 Oct 2021 13:51:35 +0200 Subject: [PATCH 11/48] Squish: Don't wait for nothing in tst_simple_debug Change-Id: I74bb40b03fa13568571f4009618c523bf9c13c63 Reviewed-by: Christian Stenger --- tests/system/suite_debugger/tst_simple_debug/test.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/system/suite_debugger/tst_simple_debug/test.py b/tests/system/suite_debugger/tst_simple_debug/test.py index 9468ac4f8a0..7237e00aae0 100644 --- a/tests/system/suite_debugger/tst_simple_debug/test.py +++ b/tests/system/suite_debugger/tst_simple_debug/test.py @@ -51,8 +51,9 @@ def main(): expectedBreakpointsOrder = setBreakpointsForCurrentProject(filesAndLines) if expectedBreakpointsOrder: availableConfigs = iterateBuildConfigs("Debug") - progressBarWait() - if not availableConfigs: + if len(availableConfigs) > 1: # having just one config means no change, no progress bar + progressBarWait() + elif len(availableConfigs) == 0: test.fatal("Haven't found a suitable Qt version - leaving without debugging.") for kit, config in availableConfigs: test.log("Selecting '%s' as build config" % config) From a2cb1edb690de661f36d3c66a6bf09437badd989 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 1 Nov 2021 07:25:07 +0100 Subject: [PATCH 12/48] clangd: assert on starting client for project that already has a client Change-Id: Ia50662063f7f7bdc26e5a842f7c25af4f4f4efdf Reviewed-by: Christian Kandeler --- src/plugins/clangcodemodel/clangdclient.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index eef6e5e5730..00ad74279e3 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -52,6 +52,7 @@ #include #include #include +#include #include #include #include @@ -1197,6 +1198,15 @@ ClangdClient::ClangdClient(Project *project, const Utils::FilePath &jsonDbDir) initOptions.insert("fallbackFlags", QJsonArray::fromStringList(clangOptions)); setInitializationOptions(initOptions); } + auto isRunningClangdClient = [](const LanguageClient::Client *c) { + return qobject_cast(c) && c->state() != Client::ShutdownRequested + && c->state() != Client::Shutdown; + }; + const QList clients = + Utils::filtered(LanguageClientManager::clientsForProject(project), isRunningClangdClient); + QTC_CHECK(clients.isEmpty()); + for (const Client *client : clients) + qCWarning(clangdLog) << client->name() << client->stateString(); ClientCapabilities caps = Client::defaultClientCapabilities(); Utils::optional textCaps = caps.textDocument(); if (textCaps) { From 4dfdbf91f6f0d18a981a560c80ddaad57bf07f4b Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 1 Nov 2021 12:06:38 +0100 Subject: [PATCH 13/48] CppEditor: Do not use clangd < 13 We will shortly need to use a command-line option that is new in clangd 13. Rather than starting to add checks for versions that won't work as expected anyway, we simply refuse to use clangd < 13 now. Change-Id: I42ec679e0f58449a2593cf92b4be7ed3101fa787 Reviewed-by: Eike Ziller Reviewed-by: Leena Miettinen Reviewed-by: David Schulz --- .../cppeditor/cppcodemodelsettings.cpp | 37 +++++++++++++++++++ src/plugins/cppeditor/cppcodemodelsettings.h | 9 ++++- .../cppeditor/cppcodemodelsettingspage.cpp | 21 +---------- 3 files changed, 47 insertions(+), 20 deletions(-) diff --git a/src/plugins/cppeditor/cppcodemodelsettings.cpp b/src/plugins/cppeditor/cppcodemodelsettings.cpp index f6c4629d0c7..cf57ee39730 100644 --- a/src/plugins/cppeditor/cppcodemodelsettings.cpp +++ b/src/plugins/cppeditor/cppcodemodelsettings.cpp @@ -34,6 +34,7 @@ #include #include +#include #include @@ -312,6 +313,11 @@ ClangdSettings &ClangdSettings::instance() return settings; } +bool ClangdSettings::useClangd() const +{ + return m_data.useClangd && clangdVersion(clangdFilePath()) >= QVersionNumber(13); +} + void ClangdSettings::setDefaultClangdPath(const FilePath &filePath) { g_defaultClangdFilePath = filePath; @@ -333,6 +339,37 @@ void ClangdSettings::setData(const Data &data) } } +static QVersionNumber getClangdVersion(const FilePath &clangdFilePath) +{ + Utils::QtcProcess clangdProc; + clangdProc.setCommand({clangdFilePath, {"--version"}}); + clangdProc.start(); + if (!clangdProc.waitForStarted() || !clangdProc.waitForFinished()) + return{}; + const QString output = clangdProc.allOutput(); + static const QString versionPrefix = "clangd version "; + const int prefixOffset = output.indexOf(versionPrefix); + if (prefixOffset == -1) + return {}; + return QVersionNumber::fromString(output.mid(prefixOffset + versionPrefix.length())); +} + +QVersionNumber ClangdSettings::clangdVersion(const FilePath &clangdFilePath) +{ + const QDateTime timeStamp = clangdFilePath.lastModified(); + const auto it = m_versionCache.find(clangdFilePath); + if (it == m_versionCache.end()) { + const QVersionNumber version = getClangdVersion(clangdFilePath); + m_versionCache.insert(clangdFilePath, qMakePair(timeStamp, version)); + return version; + } + if (it->first != timeStamp) { + it->first = timeStamp; + it->second = getClangdVersion(clangdFilePath); + } + return it->second; +} + void ClangdSettings::loadSettings() { m_data.fromMap(Core::ICore::settings()->value(clangdSettingsKey()).toMap()); diff --git a/src/plugins/cppeditor/cppcodemodelsettings.h b/src/plugins/cppeditor/cppcodemodelsettings.h index 5f4f4622c7a..2f3de7dd6bc 100644 --- a/src/plugins/cppeditor/cppcodemodelsettings.h +++ b/src/plugins/cppeditor/cppcodemodelsettings.h @@ -29,8 +29,12 @@ #include +#include +#include #include +#include #include +#include QT_BEGIN_NAMESPACE class QSettings; @@ -117,7 +121,7 @@ public: ClangdSettings(const Data &data) : m_data(data) {} static ClangdSettings &instance(); - bool useClangd() const { return m_data.useClangd; } + bool useClangd() const; static void setDefaultClangdPath(const Utils::FilePath &filePath); Utils::FilePath clangdFilePath() const; @@ -129,6 +133,8 @@ public: void setData(const Data &data); Data data() const { return m_data; } + static QVersionNumber clangdVersion(const Utils::FilePath &clangdFilePath); + #ifdef WITH_TESTS static void setUseClangd(bool use); static void setClangdFilePath(const Utils::FilePath &filePath); @@ -144,6 +150,7 @@ private: void saveSettings(); Data m_data; + static inline QHash> m_versionCache; }; inline bool operator==(const ClangdSettings::Data &s1, const ClangdSettings::Data &s2) diff --git a/src/plugins/cppeditor/cppcodemodelsettingspage.cpp b/src/plugins/cppeditor/cppcodemodelsettingspage.cpp index 7a850df329f..3e899ae01f6 100644 --- a/src/plugins/cppeditor/cppcodemodelsettingspage.cpp +++ b/src/plugins/cppeditor/cppcodemodelsettingspage.cpp @@ -35,7 +35,6 @@ #include #include #include -#include #include #include @@ -285,30 +284,14 @@ ClangdSettingsWidget::ClangdSettingsWidget(const ClangdSettings::Data &settingsD if (!d->clangdChooser.isValid()) return; const Utils::FilePath clangdPath = d->clangdChooser.filePath(); - Utils::QtcProcess clangdProc; - clangdProc.setCommand({clangdPath, {"--version"}}); - clangdProc.start(); - if (!clangdProc.waitForStarted() || !clangdProc.waitForFinished()) { - labelSetter.setWarning(tr("Failed to retrieve clangd version: %1") - .arg(clangdProc.exitMessage())); - return; - } - const QString output = clangdProc.allOutput(); - static const QString versionPrefix = "clangd version "; - const int prefixOffset = output.indexOf(versionPrefix); - QVersionNumber clangdVersion; - if (prefixOffset != -1) { - clangdVersion = QVersionNumber::fromString(output.mid(prefixOffset - + versionPrefix.length())); - } + const QVersionNumber clangdVersion = ClangdSettings::clangdVersion(clangdPath); if (clangdVersion.isNull()) { labelSetter.setWarning(tr("Failed to retrieve clangd version: " "Unexpected clangd output.")); return; } if (clangdVersion < QVersionNumber(13)) { - labelSetter.setWarning(tr("The clangd version is %1, but %2 or greater is " - "recommended for full functionality.") + labelSetter.setWarning(tr("The clangd version is %1, but %2 or greater is required.") .arg(clangdVersion.toString()).arg(13)); return; } From bcebf65bb1c376133b7f57e8d9b20cae8efea1bb Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 1 Nov 2021 12:17:37 +0100 Subject: [PATCH 14/48] ClangCodeModel: Make sure clangd sends all results ... for textDocument/references. The --limit-results option was recently split up; we have to set --limit-references as well now. Change-Id: I979aa21a11a08e829b6e843c0c135098aac7d3f5 Reviewed-by: David Schulz --- src/plugins/clangcodemodel/clangdclient.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index 00ad74279e3..fd1b9b87472 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -566,7 +566,7 @@ static BaseClientInterface *clientInterface(Project *project, const Utils::FileP const QString headerInsertionOption = QString("--header-insertion=") + (settings.autoIncludeHeaders() ? "iwyu" : "never"); Utils::CommandLine cmd{settings.clangdFilePath(), {indexingOption, headerInsertionOption, - "--limit-results=0", "--clang-tidy=0"}}; + "--limit-results=0", "--limit-references=0", "--clang-tidy=0"}}; if (settings.workerThreadLimit() != 0) cmd.addArg("-j=" + QString::number(settings.workerThreadLimit())); if (!jsonDbDir.isEmpty()) From f08d0e3d3e6f9c5d91a93dc78a6b3c3fda53a3dc Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 1 Nov 2021 13:25:48 +0100 Subject: [PATCH 15/48] ClangCodeModel: Prevent restarting the same clangd client more than once Change-Id: Ifd81a26506e48817b97c8ed1e5fa16ebb31d8c69 Reviewed-by: David Schulz --- src/plugins/clangcodemodel/clangmodelmanagersupport.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp index 27d280ac7ad..090a4549c3b 100644 --- a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp +++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp @@ -475,7 +475,7 @@ void ClangModelManagerSupport::watchForExternalChanges() return; ClangdClient * const client = clientForProject(project); - if (client) { + if (client && !m_clientsToRestart.contains(client)) { m_clientsToRestart.append(client); timer->start(); } From 6e8dcbcfd23414d0d6d9be659ce5a7c6d2de049a Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Mon, 1 Nov 2021 13:18:43 +0100 Subject: [PATCH 16/48] Fix a crash when modifying pro file In some unlikely case it may happen that between finished() signal is emitted by a watcher and when the queued handler is being called, someone could have called CppProjectUpdater::cancel() and delete the watcher immediately. In this case the handler could operate on deleted watcher instance. Add a QPointer in order to guard the watcher inside the queued handler. Amends: e3b639047f6a4a9c042987062bafdbf1726267cb Fixes: QTCREATORBUG-26507 Change-Id: Idb4a953e9017ce672adc64becb3061bd80c8c378 Reviewed-by: Eike Ziller --- src/plugins/cpptools/cppprojectupdater.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/plugins/cpptools/cppprojectupdater.cpp b/src/plugins/cpptools/cppprojectupdater.cpp index f34628af51a..61d9443c988 100644 --- a/src/plugins/cpptools/cppprojectupdater.cpp +++ b/src/plugins/cpptools/cppprojectupdater.cpp @@ -93,11 +93,16 @@ void CppProjectUpdater::update(const ProjectUpdateInfo &projectUpdateInfo, // extra compilers for (QPointer compiler : qAsConst(m_extraCompilers)) { if (compiler->isDirty()) { - auto watcher = new QFutureWatcher; + QPointer> watcher = new QFutureWatcher; // queued connection to delay after the extra compiler updated its result contents, // which is also done in the main thread when compiler->run() finished connect(watcher, &QFutureWatcherBase::finished, this, [this, watcher] { + // In very unlikely case the CppProjectUpdater::cancel() could have been + // invoked after posting the finished() signal and before this handler + // gets called. In this case the watcher is already deleted. + if (!watcher) + return; m_projectUpdateFutureInterface->setProgressValue( m_projectUpdateFutureInterface->progressValue() + 1); m_extraCompilersFutureWatchers.remove(watcher); From a8d5929be3a6d5fa7cbb307ee86264f31784ae73 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Fri, 29 Oct 2021 09:16:13 +0200 Subject: [PATCH 17/48] Utils: Do not update pathchooser value from displayed string The displayed string may differ from its "real" resulting path depending on having a base directory or not. Fixes: QTCREATORBUG-26408 Change-Id: Ic569671899329249559a2bfb3ecd30190f166dba Reviewed-by: hjk Reviewed-by: Christian Kandeler --- src/libs/utils/aspects.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/libs/utils/aspects.cpp b/src/libs/utils/aspects.cpp index 6a6c9d8e91d..f22c10ac46b 100644 --- a/src/libs/utils/aspects.cpp +++ b/src/libs/utils/aspects.cpp @@ -1081,8 +1081,9 @@ void StringAspect::addToLayout(LayoutBuilder &builder) d->m_blockAutoApply = false; }); } else { - connect(d->m_pathChooserDisplay, &PathChooser::pathChanged, this, [this] { - setValue(d->m_pathChooserDisplay->filePath().toString()); + connect(d->m_pathChooserDisplay, &PathChooser::pathChanged, + this, [this](const QString &path) { + setValue(path); }); } } From 4ecb6a9dc067edc2c673aaf343016111cb8d27ff Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 1 Nov 2021 10:18:38 +0100 Subject: [PATCH 18/48] Utils: Allow combining add multi cursor events with shift The old block selection shortcuts were used with alt + shift + up/down, but the new multi text cursor were just expecting alt + direction key for adding new cursors. In order to not break with habbits also ignore shift modifier when checking for alt + cursor move key events. Fixes: QTCREATORBUG-26503 Change-Id: I064e666a04b88c3b90d10ea35688613159f7d4a5 Reviewed-by: Christian Stenger --- src/libs/utils/multitextcursor.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/libs/utils/multitextcursor.cpp b/src/libs/utils/multitextcursor.cpp index c06eb95f186..3a97010fc7b 100644 --- a/src/libs/utils/multitextcursor.cpp +++ b/src/libs/utils/multitextcursor.cpp @@ -296,7 +296,10 @@ static QTextLine currentTextLine(const QTextCursor &cursor) bool multiCursorAddEvent(QKeyEvent *e, QKeySequence::StandardKey matchKey) { uint searchkey = (e->modifiers() | e->key()) - & ~(Qt::KeypadModifier | Qt::GroupSwitchModifier | Qt::AltModifier); + & ~(Qt::KeypadModifier + | Qt::GroupSwitchModifier + | Qt::AltModifier + | Qt::ShiftModifier); const QList bindings = QKeySequence::keyBindings(matchKey); return bindings.contains(QKeySequence(searchkey)); From 8f98f61ed411655a219c81eaf8e51413bf175430 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Fri, 29 Oct 2021 18:29:58 +0200 Subject: [PATCH 19/48] Doc: Update info on developing for Android devices Task-number: QTCREATORBUG-26312 Change-Id: Ic95a7c6ea4b0ab092a1b1feb07bba3dd368a3584 Reviewed-by: Assam Boudjelthia --- .../qtcreator-android-avd-arguments.png | Bin 0 -> 4442 bytes .../images/qtcreator-android-avd-manager.png | Bin 10873 -> 14237 bytes .../qtcreator-android-build-apk-step.png | Bin 0 -> 13157 bytes .../images/qtcreator-android-create-avd.png | Bin 25294 -> 7950 bytes ...tcreator-android-deploy-configurations.png | Bin 15752 -> 0 bytes .../qtcreator-android-deployment-settings.png | Bin 0 -> 6339 bytes ...reator-android-manifest-editor-package.png | Bin 12238 -> 11248 bytes ...-android-manifest-editor-splash-screen.png | Bin 8124 -> 10588 bytes .../images/qtcreator-android-run-settings.png | Bin 43749 -> 48325 bytes .../images/qtcreator-android-sdk-manager.png | Bin 8841 -> 8740 bytes .../images/qtcreator-options-android-main.png | Bin 28682 -> 15736 bytes .../images/qtcreator-settings-run.png | Bin 31475 -> 24017 bytes doc/qtcreator/src/android/androiddev.qdoc | 134 ++++++++---------- ...ator-projects-settings-run-android.qdocinc | 22 +-- .../src/android/deploying-android.qdoc | 129 +++++++++++------ .../creator-only/creator-mobile-targets.qdoc | 10 +- .../creator-projects-building.qdoc | 3 +- 17 files changed, 158 insertions(+), 140 deletions(-) create mode 100644 doc/qtcreator/images/qtcreator-android-avd-arguments.png create mode 100644 doc/qtcreator/images/qtcreator-android-build-apk-step.png delete mode 100644 doc/qtcreator/images/qtcreator-android-deploy-configurations.png create mode 100644 doc/qtcreator/images/qtcreator-android-deployment-settings.png diff --git a/doc/qtcreator/images/qtcreator-android-avd-arguments.png b/doc/qtcreator/images/qtcreator-android-avd-arguments.png new file mode 100644 index 0000000000000000000000000000000000000000..03a42988880e4a237bc4762cb025bf2dc639814d GIT binary patch literal 4442 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 literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-android-avd-manager.png b/doc/qtcreator/images/qtcreator-android-avd-manager.png index 7db5c73bbc9ad2545ab381db84c7dee0100731de..022395a800fa038e6ac5623d32b0ff66f09ed706 100644 GIT binary patch literal 14237 zcmeAS@N?(olHy`uVBq!ia0y~yV0_HLz<8B|iGhK^*No*p1A}>rr;B4q#jUql&h9<^qU84ad>wn z?o8Gbjjdh%3E8O|j@`TQK0v#D?-%DA_4m%(8n528>eHv%K*zMyXO@+p)}PY%pX>AF z|K!`-^X;p?ytuhJz5T9Zly>g4Y4>-PzUE_axc{?LBi}^o?pvu#X_-IW}`fY+bI#yonRenMGZyINY;#RqvMDb8=(zU5}bw z?Vfsfj_OK@pU?J3nc6ia^>1#QRs5zmEQ@W~yG1J}=M`y(#Gb!W6tegK$K&6(_N_j( z?B0co5}`l-?XBG)>gD$&P~+*%@AvoLYgyTQR!jZplC!IxcC9@fVrBoUM9Xzo*qSLb z*1UMdHF5p-m*#&3SNxt)^WvL~kF8Gd>Q#Me!YOU*K5Ur~6&8Kl^l;Qd%V2e_6*?{7 zX5F&6?XvB+;q3|MJ+sZWCU34>@;G;I*yDB9Ca>edLtYv!i~Cx|K*u48J<~ zu03Nve`(Y?k=ee_Uf)o@w(ybf_m#$~Hk+q>{M&!aqVbclU0m1;H@+)d7O(hoF1#*1 zYj4!vip}2ww@!QGzpXU?dEwb*Wu4a~9tW7M%(cDM_}z5Zp3^g;GUu5(J@}o{%Qn^Z zp3dr?y?=h(+J5(#`>`)lbBhhWZt#)auUmDX(%hmvcTwEZHMVI<;{DG<_Wz4Ge5G|k zXsC8`|Izbble{EbL-v0;rT;sr;@8$kCA%vQf7{5$D-yihd`DccwZDK@`AxoyM!k`V zb8gx3XUw1eSme_$_vMfGOe~*L`fj>DM{kUl$9d6H_oRxqY^;79#J23+dyB2v2dp+$ zJo^+BY`yD3=YiR>e*<`zWgPv={B!2#@?GT@jIB!!AD#V9eO5DD?wjD~W#_^#Z;LZ( zxp2c`Yt_6^-luOwZda`rs$9IL^x&24chlbgHCQK+QT!s9|II!A)Rx1qnA|7LJNs;B z=HbQi@8q^9{c`ikEmwWx{cx^P>86=UAHJ8~wAgy@=DM2JwHphw-s)uXw_MrrWcwA1 z(y;oCvf-bd)@pR`S-fU*T6%=kKJW8+-e&B<{4eUVVi&&RXseofVb_L?E6K5eJ?W9B zXB%$)nR{mc$#dO)`!4e5o^g@Ei32S)&7b! zpExbtaO>aHl2XGn&KLJB%6RD}`S1+3x*EEjN8JQd@TH%38zH-!C8D z*T|}U?s#O?aY&Xe_4l>i6Oov8;L40yZHZanT>S0el^Syc(`9kS16SF)6!cCB(m3a@ z?CJI7rAk=&|<*ipX-MZB$ zd8~{{epUPx@t+>PyY_JG-KVi?QG~(&=k;OPCieP&ANO?~dn}NDPvmu~@#9WaGMf3TvHGi+@H1e!Q8p&p>&yY25A3is<~bsJZWAFR%WZbDg6}a^~BbpNWe% zm1R{`FDt8i>&+LJo7V5M_Kf}PrBUZX=0Xa`b&u+T?W@1N`8=mk|6f;sD`_-$U#EF)?$a7E|C_hJZapVVR^Y0VDS7pbsEpj- z3(r~H?R(sg*%oDM_pNOe_vAe_!S`0hZoyM4-8&ubwC!1S;YQ!q%%>)yB4@7`vmN@Z zDPp?QYv$(|O;Z={;+Q|t77X<3jVsan?LUVb-S97b+%sK_x;yy z50yO_uwE!iT&%ZhjdoY}m6=n0bGLYJboyi`zHXUk>cl)>*H!2G_NC3v+5LI->X}

uXjZ)u-o0~ViUvv4&x!Bd4W7AWn1S=-I;+=8p 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 S_!a{L1B0ilpUXO@geCxPMKMAE literal 10873 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 HDWM4fO_I>x literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-android-create-avd.png b/doc/qtcreator/images/qtcreator-android-create-avd.png index 3fc6627cb879dcfe5dca303a5f891b636e7bdca8..50121765e565b81dced7cd5b849737c115801dc2 100644 GIT binary patch literal 7950 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 diff --git a/doc/qtcreator/images/qtcreator-android-deploy-configurations.png b/doc/qtcreator/images/qtcreator-android-deploy-configurations.png deleted file mode 100644 index a2b8faaf34bcdeb13c7d034163527978b8d4c02e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15752 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 S{4E0m1B0ilpUXO@geCwn;md^p diff --git a/doc/qtcreator/images/qtcreator-android-deployment-settings.png b/doc/qtcreator/images/qtcreator-android-deployment-settings.png new file mode 100644 index 0000000000000000000000000000000000000000..b301a6c9466c86675b880f4288cecd78c86cb1a3 GIT binary patch literal 6339 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 literal 12238 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 E0C%wMLjV8( diff --git a/doc/qtcreator/images/qtcreator-android-manifest-editor-splash-screen.png b/doc/qtcreator/images/qtcreator-android-manifest-editor-splash-screen.png index c1e99cd24eb791c13509123dfe509f17fdc6e4b2..d90e58b33f0bc25470adc07a985d86d10dedbb82 100644 GIT binary patch literal 10588 zcmeAS@N?(olHy`uVBq!ia0y~yV6kFgVASMbVqjqSYkIYYfk9K*)5S5Q;?~={zWp-S z_sS=vPJi!k;6Z>)R&Nb^`N`ETeQ#tp{!MjtRYZjHWGDPg&A>{U8MSr@uUvh`G-?Ke_%XTQO zV_@jee$)kHa6RhU!Nj1j4lD*@D6EqykI5|k)^4@7P`mW@?#o9SUtSjpXJC*L3x8*K z?|yyF_kgeIH?~y&f0k}v{kg9E!-EBUdmr}P*3(%h^CzY6+(X6q_g7|{KUm`@9bR_( zuFldo+ivR?vN9y(KK9b^-`y`?&L6%|Ze7^C^47a^b`;H+Z29(h!~1*k*UAnb{mPv`t?SwB z@9tY~CxnFL*M$75{df1p?Tc+c%Wf8|`nUOedvwUEPlfEZKklXVYkyVWTyu}@zmn>$LF&O!=EOf{XO~MubHa* zZ8t@q5^tSjz*YWN^)K(@6N341oR&+cKAvfO_3US9&BePluc|)gS6|1#;3FCSXw$Cn zIegyd5B*r=B|1As;{49_A{&14PW`nb=#D|@g;y(<|7w;?%inx#s-|Dsl?RvJPM>{s zw))q%{`qk`b_VV3oxE@HRQA5aDKksLx_5gmS!!87;iHE25!d=@>TcYh8wBM_TzztI*`Ja|X5X#)=hDur?Vhf-<%!|a z`tN#cCi%;0p08bhn!j`Z$DpW?J1TO2r{29{D8a*!u&?lGUQyq-j12+xT4j~<%8L>= zUFi!uo!0t%{s-%r#bv8%jY4`lwXZhICFL6*o%&JTxbVX6n@@iKURi9h@^9za)!QrG z?3Y#ugzxlRyj&Gkgoj>2%QTX_3c)Vz! zSK-q`t=tc{ypUr!@T=m~1Zf6_1v5crIm9qBFbIS*FfbIdGBAL7AYo))M#tH+XD6%s z&$Gx|$h%OrPKJTu5!aK*r(a%Pj{kLOdRbZ7I=T4;UoNy=m}H!O?#Dt<5q3fNU1rOi zf|r+;iuXllIA?ff_FF0}dF++ka;!zIwQa6d>8d~!P2bHJkBDX@#c(EXloASu>N=&p zzGhpZ(`2W^W@cuyuI)KymctsgdzJpecdo5R9@Td;JmNCZTh~%8b>95&gLhs(V)Ko? zcU{hAu-g7Wuu zb@x{8mo~ceclKh@O*gK@PsxvnlMxI1W*R(Es!T$5^M)r8(qTE*U+i9*^>)?17PdWl zg{%%Sjxmu}cNlf3H9G`#88#p9?$ExwAn4><_d?ZmS2yKM)_-8YBN0IdUWd5v8gueWnyD0|Lm9%UZr~TafqS0#vQh&Q7ccJ4zruK zqv#9oY43*_*H2%)6!(xwy$yJNXasGWNv{NqGmG53ZVZVMB`Go|v_J zS??Xg81a6`q!oXTiWa7}KJu!1=e6gP(<86cKWAp_2%5WKj%dO0>hh-=(qWP&+iOrX zU6SV#yZY~9{(@@r*hdK$R{vh)n0zz1nLqwlVae=eQW`Buy8EzPI9y(4-QAo0{N+BKo-vk3)SG)Bow#^xs^iqM?N+9hvnKxSe0kyQjNO}d zw51+D$-gHD$=1(1CQX07ILmh3kE^dTD;J=fB#ii~F??-&b?Lzr@~r<-UK`&-~e} zZ?(C~yO^#!kXw`;{#8}x|7)Reh9gsLHiu|^y!iO;p}mvetjyb9lAacFWxChTf9JZh zpWW{@(|*#j;*QMzN>%eIVe2w~e)##v?bM4ruhNr04tHvI_h_H}d1d#7NzBKm#ubY5 zSFPmh)bwSu__m`chqrt6trxdb!Rb#8lKwPBzg<2)wJxqxj9<-^|KHl(oxz?iH`lE` zuJvYR+UJtG6XEk@!n@A*#mC18hD)7{-x`1T+PYWZY&3OIm~|iT(~AL<*_%aQe~;V8 zvDqn$`&Zz z!lgFb?V_gaxIAf2R=h-Q=v?nfH%#WgnK#GSSgL=j>ijFuwic>>Oiy_gHSg$_M`BM^ z!3{7-o9n>GBU3H4{Y%!zX8YQAR$RM$JL~UZkwaOJx^^r|1Qp^9JAy*Yb6sN+RUe&t zdV2c*brYQqJK0`8@XT~uqV@$)ZYb41^0Do9EXh z-fS^zpVqAnvK{1ohK3zY;MS_bI)UR;i%+|OjR6&d3=Cmfpt5f6wU1kDWOm)YmwRqz zPE_?J(LcS?=63SCzpwuL;H3S&f4}VQUj9wru;R;u8LehugS&QY$}3zd9#&VnehMF` zHaa3&_|)RjsjsiE$Di4|dHeq-2Vd)prE*U`f9~w+_4|H3Y?rT#5}DTWbg8NHY_M}v zr|r0;e=YiLUVcVk{>67665|fFo3?FgFpgSzJMa0{x^1bJ98>3M$Qbf-{fw$S?Pi@N z+81==?~`xg-)-J{XZTFeJT`TLTidUNOJ)U$Nr$iMRGk?La!6sSUSVp;EqDIk{oX5; zweNj?{_AP&wt|pb+pSua_SYycFFCSD^6=Iw>$mo@TQ^F7+0NlFCVb?`x8>h#o_c2l z#q2D5d+T}8Ux%XQUv~UTXw-|_^W*aTe_tLRZhv_HgT+q2jLqQaJ0lVP=(ono<3Ha{ z{Wr-eNn)+o-GdtU<2#ug-v(B_esY^f+T1EY-+BvMzjkJ7((mK%DsN3!Sa(Hb+WbFH z)Jr2>!EqoaAO5MRKIHNBYrh_I{c#jq!Lw0HTC2@n>dwm-{7kEtO|?8eRV{VOvEx%a zAznLJs2XinsdBYtV(`zila2^_J8%2c{?TBA-|}F~BS&^SpS1P=E;P$T;?1k8tM#AU zyLbD&-HzC*nA(CfPS8-FSg1OGvfL)8%8H1yHeVlktoju4cb4+A+3tdh=RJ-dXYbH9 zt)BNxwL=?}Fpmp{KU;E;c}1A#iU;LoW%J_A7M^{?#n7;$C`YZI!8r!hYC1AiImG-` zH|w#fscRlU|LuG#7$tp6CQ1+7 zlUlRs?Af!+=hs<<{Ev=~zI|F@i}4n-EkDo9GzQyrsEfO_en)U&Qf13EIi=O0-1Lac zWI8ww5LpPGkwEgG?2DP(Hrbuxo;ItJ`#xia$)Z+X?BO0M637b-C`n}tNgDX4JyCiS{4YZ zxf4GYKFx1eUALy{VEC#@zfyy>|7^07OPqW?XzIq~-G@WlxhKs|_tIW&{=Q__;rD9m z>?~q-Z{G0HK_@Zhq_yX@{7rRVZ{L4+{JiL|=%xAm-z0f0wR@(|S@yj8ae>Hw|EN_e zI)|0lfjXG%W;!X04&{aHf1;eTYI^U*NgwVz@rvi(tB#n%9~`&SsztpI(KBMox${Lj zZ0C&bs-P?UT(TBd*9#Te#x4An;FJFCm}87!IJglzl{J0ZpY3~gFEv^j@J>X{{JVLN zo@Vm#=TpM^($9sM_t&}G^#os4ZI|IYa!RCls(bRncv^9{kUqMIp3qM z9Zlc@Mn`GGl-D!X=t$|FdA;PriU_;6{p-2Cmxk9rJsBGQ@#e?ZySHgROY79`+-GaH zuIKg7dlovY+LyQMgdP9-HjSD4_S_fi?jJF1>YN*XTqErJl)6J4o<~HFh!&>ug&!`9 zNl0DnvPjVE;{W519aX1Z)L5*Qv&txAOHq-}=^2eyrpCD;v0Xcp)H}Q8C$Y7B2mFZSxMLbsgH;KYrUBkZyncI^=Pij$fB{;N5w0K^BS6 z7cWB^3x4f9unm9EnJaIBHJY*nGN*!gK}g;Uv^U0bWFJQAy(pH%D<{X}Dq{-*i5{RZ>0&PAHeS6^Pel+XN~^Iz+=Ze>M< ztfAr+k2mDZ)tcTveU;><88Ycpr`t|$7g<&wC;4cGRPGEt#@-1_1PfEoT$%doicO8y zKK|){OdT@&LOvCLxx7DcM%KAV!_^`8S-!T<{<82NxYl_scS!WFiPE|w<pu*SPW?JIwV?XRQOO;< z7bRtf95p*zvS#V*vet9!KQnh|KRR_`@rlFj{P}lxsjl1LB6|DeWcB#!w_De)UHh?| z^)OfB)(xBHYg*YK*mZPjSbBZ^{>xgrcXP|Xf8YJ~?opGS+rPKIt-1R6)Yk0lcH*3x zPtTo*&fhC4bb4`D#orA(cPvWE_B(3!;*z3A{m1V3nwLwbd%d)Z+u;%`J~#e3`;7dU zmuyErTsUuVS*`1yTuQ&%k*O+$u1BwZ=+eFO@%JI|eII)BYaUnM|9ww;{hmovv&Hpd zew5cXFUsxA<5>jqTydZFTtCD0Eva+;+`%1l(c2UMG+FjkR6g!Culv{?|L29febvvW z)1BRUP4C>@T`q55C!@9PL&eTrdRF_-@f$qfap~S$)+rYoHW-9tZ%C1FV%r||?XzL> z--$_wS$|GGoc>sSu|!a6R`}z6#^mVU69x_m#KU;lW$m3HtZPxQ#@>+CHUbl1c*_%N|9dg^P z7H?gBP_a+@_to~l$Cv&zY4u%{B64)zj~&@!;dVctOfFD+S?TV z%=-B{{{OH1y3e!u?f-lz-~an=`M%F{19qjx#vW}u$NzeAXieU{9h15k4^NrYI?;(i z;_d^9wUHhQYp>|`y|HsQG8cKj?u}oE?bF52e|Jm8+r7);3STpK?%e0fitFCId$;fV zz3Sax?f(6E{NbQc^Vh@A9(8rC4HS*Ov()*b*gKYgAN%Y7+&o_=R`*n<{HyA#T`&Gv z*`GP|{8^`V>B)ujnWG{lIwm`m87uR1H8%wCnf*MKE}ZyGpm1r`ms>kF?UGFG+9A|t zcRh9LhY$&^Z9UU%3sZfyw!K*{Q#bd|+x&WKp5~t)`|D-u&i?uPzTWFec!gOZ(aDu{?9}H!%vb$ zrLFd#JHP9wC@8kB9GM#TcmCbQ8Z52<0@hr7-X5y9pI>~+@>}Oq4I-Yt`1$eGvRmK# zwb%9B*g(2c9u;Gg zZ)ab>|6kP)hYo|3|2HRI$lw2I>iU|mtK)gEM*lEd^K4ejx&FAlRq-dw+rfspd~!a1 zO?REllpT+5U0abIG($=9-JAG56^1r^#jEG(o)T*lJ(Tqlr6bFD<{{L7x6nz~l%;mQq85oe#jUJTOb3DyT1 zNq=g2>dJY@!|7*+Cl{ z&+$L<+Qjf-XXPWV)9JGgGHV;JaEJ*6iNBT%2c_9VLbKC89LVC)5(p2;S@8LA)iH2n zH0*eEYgv->^Xoq^uCC3K1C`0^a<$A#>IA^Lm>zLynO*pKarJcDb#uOgOz+T!$j_DE zduul{Xhi9{*>#nYy1DX&M|V5NFcz|kO27E?;_9PQT~@`<&Kx^-tdouV>}u(G>gyEN zEl6UXE5A1?Ci3YTp_pAIFOT&~n@ek&=$PbR@GE3RXqDnL*K?BKs2BSj)7<*3)vaw= zmv)EtiW?5k-PenSUt6uQtM2cw=hFHnMnBuFkBS}<1$k+4c(?ZI7?IYCVQ2fb7fyV{ zW$e2}%9zzFrZBhI*9q*yz1C9EBCXQm`eyTXYo9T>nDs|Qqwwg~v!P+ zPt}D_E4mkDUtd?N_x4<~`fq1{xjQd)E7SA8WVj`||E_*7BF^(|j-5-!k{ydSpR>BS zO7Clz_PX4MukZf-Z&AAw68w>kJA{fnu5HZ!d;a_XZ`=2$-apoVbZXnNsdXVInUBt8 z=f5{IK8Dk}e$)2vD)*-DI3zN+^jK$DY4Cz0qSv=w(!cRfY-QZ`kQ`8np)D59R{QV% z|A&WD&WndjNrqP?E-m=HSVk+&Pn-W8&p**{3y1W%g-;gk)?Sx;IXvfM^O~yam*?+? zZ3I<-Yf@q)ZGPDQ|GvHuq&r9?c5l_!)=9Vdcm1x;-yiVx+r7H)2jAw*ZG1TE;m%V{ z@9xEw@87d}Lu$SH;{RgbWn`6vq%_yPSo3tpCyh@Z9v+U~p4X{;CT^qc_vhRH{rdmU zs$$RI`|oUjKi@vDs%C5X#j2XGEA9X8?cxQ+K!ve;6DW4v(7q*Jt})>-U>?-+rf;v|an!lID_Ym)0Jb5cIBR&(~|w ziW_ZK&3L9ZcgLe!V&OUeU-|zmeZBwBd;34H?f*tUPQ385wCTpEfz3(tK+f*x2qSml)HTC)exe`2MD!y3W71`QINu-}Llwe%EZ? zZ<4NC{`BvDUPkzzuyybr3AKiC0 zoQsm$DRJq<+uPgif4x}jo?QFkAp7IvBB1nHD!(`W@7_-jUZ4H{PaagRmez%-uWMO< z|DIgSw1?aO|BU((7L!>ODANB!>e~F5llH|gO>523n2_Dy5edd2_0-|yFa_ANZRHCL}*Gv`C;GynK^&DwxcYCEzxv`P@BE8WQ={3wI-lUWT)wPRd-Au)TZvPI&h>TnUz|Jt zSF_x!7eD{Gtyb;ZeE=K^k50XN_pbW=-tE!vANSkWz1@2KSihzSIOqHS`;_tsn(a>= znR-9`k=NJP^Z)&v4;t;Mcgb_Cr`%+jmRTJ<-E ztvNK_?_R^KmEZn8Hq%@Ot#@~9+o=XB5I|-5B&*6#Pg=Rf_2Ty2c(O)lmbjGUEUWK3 z4kgMyl-RJNNxwIy#^mJk`E^qNX8b*3*!rj|dp5X`?2mhU_oB~o|M_;Mude+3{Cs`P z&P`W67A7vNTsU#|?AedJf>rEG-n@8xYR@tUP-a@^3Ca&uTg%;(TO|bYV&-IQxUeTB zOfbAJqH@d4i{T%P`(oBe2WzZDIPRXTPScJ}ZiqUdL)+vEqS%Hc+%H-0`HqOD8J%`n z{SjPbLhCGW9o8Co*63o^8KkPfef_t04l#^{u1DFd>^rpY$wKNynCo^l?O;N9amS;( zji8=?7jH@3mn={`ZN5)_4V=p|L`1omZ<)ytIPLj8>E+W z2C1LqdKB&uv7m$Px0UtJ9k?rsaDv4mwkoV^o$*u~yFC`!&o%r(f$4q!A3axOeN3hgmf-oJ<+d@i*58#@GL5(-_cmpV#_cVeRQ7%j+qU}CxzDyodF9s1&pRDhmE(Qi~neZUf zsySw-`hT^S*Pq?6MnLb_nV%Z(Z1}AMwQk6+i@4*wrS6MCmfur>r(s9+cUCR9*Qb^1 zx3%olVs-zJuRAs$o$7D*Q{|4w&e+F)zu&L_d=}i94O3e8#GFHGYw0(ODffPsT|D$j zc2ba_eckiLDHHEkuDBP!l2iI9Lx6?L%FvIqI+<0Aoj<-i<=7uryeKQ~K?_$MsMhl6 z(B8d!_xruy@8#|7xBvHJ>-9M4HS%WS;S3BBw{}cQ?^$zUp4B=R!GtMRT~mLw%lW3NX7N5iH*_PQH8(fR1qR~NG%pSl9-ID9%Loqq+=bC|YPe;otEhBJjruS%Mm zWFL}PZX=x%TKTZ^%Q^SgPh4w?T&|TAsup$xt@et(y7!;+(W$e9rD!KB+!l(cK{(cx=$jZ==+M|6u@9O^}DQ`9;A9%!7S6%&k=ZVFh zc7MNI{&4)wW@wB(>e?}>Vx{rEYgsXt8lZXNLf4p+SNO86V_5fZ-TL(n&mpjz9&vH6 zd;l3&nDyex$;sk+F*_xMy&Tp4I_i^4jCbkvfo)FE;5hQu2+#l^ufj0_Gj ziT|8#aBO$?lkvJy5V;Am`~}Bg2lla8CI--8D|mVY6i}d21~y;|o+>#YbTha7d;6}p zckfLKOaHLq`k?hs?SZ}s#*Mo{7UdUn{Se`4i({_tMPoO-P@|H7C3z1O<$M@(&=`Yke6 zz;wZ;yu!ezJ3xl4$=aG0!T@UP?kf3R;=l6P)T|VFo2foFh5T=pc4%~kd<(o`acjfX zm-b$)%O3`p`hF@F4R?r%d|7pN1w%>Q-1(*Ne_Wj~A!76Q5cAsG8%w;G6g*$LVfw%I zoS$r6z9+hwdp=?lnZGJ?(mefj4Lcs~3f;F#LbT!B`p=seIo8(1ynH_O$hY9*Q&;@{ zHm%=N;p%eGDCm)?rF(KDA*#Z>GY3+d>hK1+-ZKmF^vs$-9XU~QA)y6|pHmx+wHQF-FQ9hpalt_33SlX1kjoUkRnjxU<4;V z*21HeFd0y(4w?jj%0LFGASB2Th(-trQ3@JhV+E~tKqxvgRkZxsnVG%4y~4a=v$pTt z`BGgKJbjQo9X>jirrg@r`i%G1%jZxjl{-5)5)-Pcf5UoHzbZRHvtp;JuI>hv|22<6 zT`VNQ#4VwpAA4mife!g)hre%wcACI*5ukBeaC-Ghes!0qeh(-=b!b2Gk_-LhQ26{{ zbNMsz@I&Y3zjB>=W?nwkY~5Uc6tuL&AtvzB)oZ&! z#q`1_-v#3vYvtU$fAYotqqgqt9W8EM zpsAaN9ZKt_G`Se9b6NQ4?cPVbK3c7OGV#5QT@Tc2A+PR&hG)FXZr}au_xk6mu=M@6 z@5!zakX$1@Pv+J7$!lY7mTxn$^4nHawfcewc(_v_{K!rby?!JBd_PLZkTn~692PkdL z3VffJn`?W!V&O#SfGv317F4)gVo>*=x2NFYp`+d6v*(05eRfiI4*t7m5~w^~sm^OEZkzWVn!(*+2R)Zt}Xc zpOGQqCn)teID<$~amN4}=4AjS2rv&c(#qib;Xk83-~AoWuix3oz`(%Z>FVdQ&MBb@ E0CtPzK>z>% literal 8124 zcmeAS@N?(olHy`uVBq!ia0y~yV6kUlU{v8?Vqjoc-o*QifkD36)5S5Q;?~={XNzU7 z?lu2#$Hx3T??c;0hX9UAI-CYSLe1E2$J~zC*36~#r1DDBUo~D&KW*{z|2}7C@voZQ{{3~^7;Yz| zrKRQNz5Da?v$nQ&`1hq14?lidER>d>UMt7IaO_dK;g+t(XYv|CrkCZaRxLdncFXv@ zjd1e!rAwC{t<{OE3vmi*?PFs|uzC6PKqK>V|M~k$US3MQw8(E!+M>E;%a>ohl%}1V zm8GR;r}M5lkTX!!N{XT3>u|+?iTKtnH@zmuEfHs6 zc%!0iazbW2#rXv33wyU=@UM>xL zpFS;WZ`|ZK1_lZDs!YD(>(|XquiSleV#lg*QL~A0W})8e_L^Mww%TOk?6LRWUYW~( zV$G*L(ZBR%`jMuvja#ddjvnH+nH!pYx2gBn+HNZ+t+rB%ymrs-sJuLFHz>@(iPK+W_$1XTe{S70y}C<#(@%?^f6m5#jVpPRmVI(U z)$9FJ4z0~Ed={bZ_QlD;SgR!2`E&W#sDF#RtUsA}mxX1=ZOu&Wx%c>r&K94OPafx4 zytMOKvhrM6u{T=|*rje&FZqh9nLj^E*k;|6+gE*C`SG1ebyc3cbAqE5zgRRg`EB}3 zzPY6qQuZ=e@!#duXAeF1 z|Fi4w{!3M-?LCXMAMeZFFPn7hR54NKbmdZoyW8OdRvjAnmKt+lO8Ki5#Dee=|gb$e6No0mS% zE6rb=|94sW;@Z#a{{1_%@!hP$>3yR2-rwJuUB9)af0OqTafSx3<-Bp1+f&NqEX)EI34!dI>!rW@ zQ@O{t!||)O&wFI4_)FI+MurJ-OCXGdCtr$Q zURo-yDgIUXrK@i4wo6OIU$QbJ{CSzmwe8@UGiRo1hkvUqu`GRc<?#d&~?BZ#pf1UgBn8P}s}BzyONchA&L` zc>x>0e0ta}UuW5*vCNE-q2aEN{zM-!H-V#9)SwzKd6!-~{p!}SW4B&K#9iy~H$A4y z#K2H(vDd{cqol;hNncmw7~4x$28J8GUxHSfSDjoCw*GqCa#pa=(l3|#bWX0huvg^s z_xlCj+_89So{r|8Ka=AMbJxy`_!x0g zt*dP7)}-vEF&E!VYLsSTU??-+Tf+YPp33 z;c_cOg>qT-pG#(PCaf(e(B8Pv?b9popItW(7$*qt6qWXz8!#m{XqO@b!vdw3s)9~! z%cu8ljd~^JUVZkD%9fG?8s7RRvyE;VDYtbU^5yA+=BI$QUxbps#69w8n-d| z%&4oo`X{UToTTm%qn%3%o!2=FOUNm%poXujEc$ZT`&qs4MfqHKC} zh4`brGiJ{G*tep7YwxbLMPH8vSf|-~%03pFs=1e8@v`YV_~g_l%S_Nxy2t&#<5&3Y z6}P*>^MBtuU3l!sR`G=5m#XX9tffL-_K4pT{JMTy;C9jVaiC1PM7+oH%Klq!cfIs4 zaf7n*F_{(hTi52zyz*t!u5BAPZnIjK1d@0&LAu=B?A<+yaKmK2uj{vcPtRQ)ebsu} zmr0#mA2(bKU;k8m+qAFKOS(Mt8@_D%`K73O@5PAyck4IQRZmf!ne6{N@z3lR`>eH> zh=G)SnRj_c^5pj&zwV#>6@L46`0ZC^(XY*7&Cm94dv$l;mrK<*x-`y~Op1wEZGP+j z{`MZly$qMU>$Y68>pQ}@w04Hnz9l(lE=J$5`jqOeHa~T9`?|j+$3p&wul{%S+qvc9 zrPlLy#m2wi+w<%&@73MHFPDBd*lO^|`}-$vz2qz#;>)KV(L8i6_(|BF>hirm<|M94`5u$9{7Lv;QRC;b!pHwTnbatK z>r)N?*Z8F{zs`QW?Ym}P*v;6hyMtdYof|5|J^S(hP1*Wq@0Th$ti2btT3mXTpz>Fn zl^P)%lKvMeTW{12H2P^#xlv>0reC{ffin0d?hU~&m)?E2oG;jU+LGsTD*PViLCy!R zteO4HD|PvoS^HnhMCPsEe(hE6YTL=``@Md1M1zegp5Qml$IfqFvya@K-w>l7&se+e zpLWRqtm@xc(RcH*?|$1hqeo*^x%y>q<>HM?KHT#DZRDY5tfDsO?kl~Mc8Nc`Sbqm^ z>uk!*Um0D&HJzu*@)Gw3<(EsX6|0`8E}mofR#rrMW^qC5@-Mg2uN$>5I@0-JcBk;e zmFhb28x!hJnN5r~yc)SY-ZlT^g6W&DUfld^eZb$=&=JJ6u|-Qs@oizUzB6|R1>V1~`r>AJ>` zHm)iVZth=pcv?^Wmo@)ZgM3zgxqH{$q`TkN#jUs}>!ttpXPm0???nay{%w<@cUJ!` zj$9#}!nS6{?Y$uqK`+wY?&z-);Q~!Y8^65`F|9wkL znxcAm|MM*=*Um27r2pv6{pmM#;(mOc+ZicvHfe7D<&$eIQkfbFN^*K z-hNdkAHM#J(q4v3+{a{I#pf>0TPpsNbwXU*(&^sQ_4az09;to^FAYHkCS1RCT7+SP zq_MGa__`Rw6B6CQ%l&lq_4Rdhe#9L7xAE$iPgV>Dn_gdEzyI5etC<)WZrd9AfC_U^#{gWkgBlnN3`hk$sMW!MTbdQB7~J|`0M`j1#ST>y z5!FMYcGz_@vuk0;LwPP3Gu*!Z!lY)2_{-E!)rZ~O3&R($Zn}Fddr7a`-fgnVJ=Gce ztJrq5Z`(8VnZn+NFHS4I8+)&fv(UQ~>R9S#v$ZPO`qttvOqaUb`oAdceKYaPq&}Uq za?9iHd(3(E_M79+Zj-;N8yAG;tc|Owvk2W}%<_8Lp3Bi2w+5}tC_8z8_u!KLimb0W z-Y@OmY+vj$`{(cblizCJ?y_EMeg74g^p1Iq$L7Rw%})82JV)co36otlhgXW)rSJME zW~RX_|I)SUrnXhB+xnyCzgzRw2M%xvG@2+$ACpCp9;6Dzp`8N z^>Rr1?wzX4W-OEK9=$ZXQ1;lzWPOOWmp`Yr&7$v7g*VS^Y+_rN-e9>GQlqIhES~N@3JGs{4Z7SceUT&8h<0_E000n zHk$>Wd|vv8rOq`xKch0i@i8N>{L9u;-gA6S0ge9;J;K$iYGmCxpLmv_&s9jn(>a>xHSDl9+yaC#?q{=3(A7KK}F zetLsL{Mz2`H@m+C)m;DgYGcmo?E72y&&uwa8#X6mb@09gIm)%k`{yxkyD;tY+YE=v zZ|Zw?w|32rSoZKr*F0l;Po4VMIQitD9n*j|G(e=e_h|d@8`4G^7Vf{uCM=_ePqT_y_axf zH*MNfv`3riOn7|l*USF)wZGqP-+1j~i-y`>P_M{CfA`F|D)zn|mp)x|mp|IF(YpNI z5z!gv?SAXLyDtA%gB2X`Z{B_piVyu0#LDyI*pqLK%KKz2mvz< z=#i@^UxQxU9*N~??EUi>IfxiDI909mtC~4`_UyTHd+lEp{rvRwsnEyO8Ujb>R2~() zBX}pB`DN-McD?TO`&MPo{67|d`6A!HZ&THir{?_gt3F@w{x52;KX1>+L!GbL{bQ_m zRJ{H9INzpRr*55HbxG>O6Q}+>y#Aa&ex`NF(*xb7H|xjr&7avkecAl@S#^0YXFk{a z_wZ)7zy6+YU;eb-KOZ||mbHE9gFC^SpVygxp6`Ed&#xz6R{Pr&f7@Pf@wwuUP3^CZ z_xFFA{bOd;&+GnktG<+f{Cr8-e_qXx&dL0Lza4Sz*SGue;}LVe?Ee4e$KU_|x-s5X z%HI8b^^+6&@^+t2xAXl!?%e+WeRF%=#{=E_cl-QgpoJn7(Mw?z#v4%y}GS*~`X;pO7K2Oj!g?oWK2 ze&6aIm%+rizCE9gAJ$(lSNHR*^YVK&8|TLP-Lt58^y~B4FGaeSPH+BL{3XkJ?-|*u zy;I}Xo!Pg+rg+2LI6Yh8mrrjlEvx$Z_fPiOFGUaj1n>P~^mo3$&;DPx%c?4Wok>3X zrRbM=@cKW$R!*1y8~bNY)svIcn0$uY^vCE)lFo&9mTd~1}h+FAW=E{3)8zgG!&Y@VvFeZVt#LY&OOiE$I+Hr2*=d^Uf-|9{<| zh41qB{d{&@zP@LFz4+V*Nz?c7zjUo?w7poNUG%VoeV^G~L7A7We`myng@yH%yMF(E zH9Q{VxBGR!bLX74oF@SG)+KHa{i~k(pg4PT{L7`^Z;n>Z>bLu)p=W-7XR-RZ`!(Ng zrWbC%|3bb5R0&LoD>H(4qW-dX&DNxtjDP=rzqkMQ7qT`-z`Us?R_2 zLvtF)*PsC;seD%}MzF@rs?Pm~q#-4Ow0F|7Hxt*r_;j!C_uKM&mFm9^R!AKEQY*pW zslVW3m^#E|?=N}(k$v}Lc9^(cOvnG@y|wO_s<;j#V#bK=Szdmi;w9KNWTU2o>o_`uzE`oiwO6@X!zS(C>R7x^cq>17l<3P|1zP z&iC^`O{v2#Rgbva_?_g*;|z2--u^{tZ^M_Mm7wGw+M$=2nW?!i=Aj$wk-Q`4wtV-h zni!{M25K2+?3ub$c*Q1;c5(fo)Sd&AW?_+LIPH!D|TFUWlo43awvV4UM||4iY;Sz28|+}Ey%5d2?0zo1`1!E< zC2mmggF5#CN6+7u-+!;;#Ha1=4)6c_;qd*Wi^s0l%RD~5=x>Xvzx5YmP$TRTH_QPa zDqpj9PfA^za`}?x<@gJ6m$ZJCem>=E|9^_;5I}{5B&s&lm|>w z>-`!gUON455@@88m8XFxCgHrvJx=LhUfGOIyXS9z`t+%?sPJwTaP)zq5QH@^U%m`# zRunvRDqZCL#^+7Yn;BpuAw`FW{+F|7&z?PZZk}cFvrkV?pB5F^Eod#g+r-{pAJv?R z!jGJehol}k$J3{W>SeX(&Z=Owpcp&AXL^sTj{VBEx_S{0eGmNw!k`u-sDyzG&w_@5 zUbbsmgmnc zV}0qW-teXA3zLUF$QK^^5cfdSoxL)No;?iCm#ccYpKt5s z(~wH@hL3)}OI78&8&}i&*KN6c`p-k{wO=;b{66&bN9NM$OJ92EpO4L1K7ILfeUr&chl^D~xDPiyG>^66Cmqx4r#POCiQ*)A>u8&oJx%d-SiY!ScuF-}CbSzxeF{_C4dv zR3=}4|M`~1&;I=U+^+7lXF`SL$3=TKE9`Ah-l1%9sr!pj=Cfzd($dox@841L^V26e zaec)&k3DmK{;YhjrLCX-O)0CJ- z_o=6H-_2&}PQTY1b#Of+uZ&3nugsF^oZBb9o_DD>e)IH~(_j2um9sWa{p!EcZ3&MG zKZ^uzPWgU)W$&|T&*z<-DSZKKi(}Qz`r7!LS8g2Ixp}U!+RncB5xx zq!-tvJnwqnOFi8Wau>Tv!GySP8>^BZls>PyzkOqvwpF2V)cxu27*AJi39PcJmCtyv zpfUS_!rnLLOTYi&-SO_utG%0S{r5ju@cP`>b5U>AUrqP1ug|M|So-{m-F3Tk`?FU|L@y-Zr91&={Z{_-tUd7EB<8%b2hmD zMzj9mf*{Z^eZuZu(3CF2n;zYz(+@K+Fj%L0gTxmonIA))-hrne@YD~8=U@sZzy7Tc YNX@Nzku{~6fq{X+)78&qol`;+06yi^^8f$< diff --git a/doc/qtcreator/images/qtcreator-android-run-settings.png b/doc/qtcreator/images/qtcreator-android-run-settings.png index 5638b0ad7cc77df6e226adc2fdf05ea32a88a609..0b9143eb9fbd9197c50c7cff08587cec106f4390 100644 GIT binary patch literal 48325 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 literal 43749 zcmeAS@N?(olHy`uVBq!ia0y~yV7kb_!1#lMje&uor)gsf0|NtFlDE4H!+#K5uy^@n z1_lPs0*}aI1_o|n5N2eUHAjMhfq}im)7O>#39|qblknp$nw|^{3Jjhujv*Dd-rOy( z5V?B$*vI!do@S|+Jrr8RssxvWJ09&)(BkT7@(>OPba1^GUiYo7OIF~GsOVB<4y6Sd zFI=q}FEF)y*_0Xm?62}d&;Eufzl&pcPVr4Edp6V9`1>47>+CBlB2T-3f!|D5RRKXk zLBYTdF+!AJYX(ROl$!Xz zuC9`jl2VbTRi^)z%&HURPXixpd>|jxmgQ^x;lclRiz_EAeAU^}(b3`b#W3~XDR0|d z7k8fCYh#}+Z+D;|Y%J}h<@K%a+Nlz$8vS0GnMc&d#KRjlQw84MKE26)`$T>T&EKA19ed7tIV`Ye zWBs*Z5hyU`eE0iz@KDdqo*j#gZQJY5&XVC+b!8g6{7aWLZxhPwEVNfYJurc%UZ(E2 zU4Enp%{2!gy5$+L)D%myhlbC_=wa?%E_|?L) z%IYVY$5+n%K5t)VMmJj;NXH3P`9%lM#GP4k)B58Kwr^Q)cdkuj_)%u?b1whSTyHJb zX#$H57k5gVPqX|jy2#bV#pTJPlq)MDy)(nXPBe)KVFE=AG%ew!h)J2Vy$W7_*unj= zYHx*&oT#(jp601%+m2=(&HEl~{h$Apl#EEkm+fL-_s-#(f4=?p(l2IVQZz#X7_&iQX=Z2XYugi z!wMU@M~@$WEN59UcmCmBZLMt&N~}V!3tcg_ww~Q{MrUidEW6&1U8gQy5w7k0P+`Nu z!ZKmXlqE?gST%KZdyP_0J@{DhA>7)2dFj>&omJVKuU{4IEQz^R_+ZhB)iRH7tPqN^ zD)IK#Yc*R_wrx!0i zZ&$yiKW+B>KMm{EeIBfSn5$WTcyo>YBdMly?Wvo?9^d0Xc47UtuZy&HKJIe=`Qqd1 zLMaBeMBeHTZ>k^v%($anvNp0^ZgJf6b*s`V=B^FhQT$}~mlcUu@98|Be&CwTuZxdk zBx~N>la2oSucvOGa%!o4z!N2l=O>rGxM6#78dpi}=h&*S%}tq)PI@Ole-;0u zWsc?FmaP0SY486e$u}l4KjgN*ubh{@?49PSrRFoAPOdvN>B-g5EmdCUDy;3(wAWmn zZ0>faA^TCmym?!s?|&43@}RzdtIe{?7v=v;FWcTOHJ$TxWvJnr71xh_d06^<;?zyk zYhV8SaV5_GSNS)!<{uv>YI7L)_^g)>{}d+X|FcK``THdf#~U|S$QW>}xH8My>b}e7 zsHYs?zfahjZtVU1-;w_Pc?X+0=g9y5uyfVwIbI!X2hLt9ulo2XU+>MstuMa32)4PU z-S}_uqZ798!%r)$2+@4=`|*wNKOH9y%`H50r&8?RsicFCKF__^dEiXS<3m5iW0OC< zi#@u&nm?zhK*`DY=5Bp?;R8PDhYz);C$2xAbb5Y$hX1tU(n`O#*UoaDJFC1UR9nmU z?>v_EtBSmKXC-oRe)N2jcu;?dj%f0!K&^7=ldM*S^Mn3QO8fBU@qHnGhSb@24=?`9 zUJ(3;L+$;yl@{r*n|21d&yy$=p0{)U=WFTNHzp@5t_fnkRhHw|%NiZAUP#kr{*P5h zy3fB>v`>{S{(r~s`D-n~)K2A%Y4UawPagKR?@#C!-!SEI-$ec3f4BGT*?ecgPv!X+ zO~0#eo092wc7?$l*3~~h^={O;@!B@+0q^SDoppO}UEVQCSh?IjTfOhm)J)DFO<5Nb z9qO&jS9@$Q@AchZd-C^u{iOA`6~6pRm#BYQw$F2&(`&7z9Q-FzF8;Xwvm}x&(46o2 zRJpAjTf!e5?*A>88tX2hDD7T+p8In_;_{l?|9D>BoW=Ex=h5^3K2B%#T59gM2cBly z@o#3K$^84X#h*VHee2=d{vq@ETN|?)qu*<`zWjbrq3OA<>W)n3Q`Xl$Kip6mQnABc z_I0Sjo%`OurnT1m{C8aE&STXttJ*6+bO|`w>VLZE8+S+hm~lmpR{6f)8sEONf4s=1 z@78(ESXOw$u{huFX+QrM8TL&s&5DL#QL~yA1JZ?5Dz7feG zu`s4AI{w|>jdDx>a(hPp*N(5VnRs<(=nIn}B0 zJusiVR@q>w*h0&uq+l@*nL@U}EswtgxeD0=+mGS-0e@}hM5^va0cXqDD-v7s~um3Js|F7ra{3RD( zZf)PtU)`f`UTw&M9V{m z-@N%g@~K?s8$n?Z034ZPQ|0=Q8cw59!&7axrp;BWFjm-*a!bTDW8KHG|@h4^LN5 z{QgGN|Fv=L4b;}>-;pU?K-uWeK>i1bLV+e|Drp_ z8dtZlGw<56peV#(+n>E_e*QGJo3(9X&gTP$o0YtmIj)YD63q2fdUv|~hu&7zzrVIT z-sB;_`&obbmFK5D%`G1m#RR;ay6AI!x88PvonM&c=5KiPz%uFnvim>FKFdoi>pX1p zXYU#p)18y+%Hw@|IixGA!;L?0?w`3)lU>-lS6;?<`JT+2-YloBCk*DW)_=ZRJ%5A7 zNp1;??9v6{{beQ^@;&;=+}!*AO~{|V?1An1KITvTbytF4Uj53w-t)HD#vR|^DZZVO zm9sRf`I1g;wS_ag?UC%&t1iEPmnQT2WV2g|wVZ67?LNu#7vG=D`%>{CwC>h~-t!!b zJoi5=;r-Y9{MQ}N?T*PE>pwFbe!rr~;OFhE>&g}1R`W<3b+p^x@jd--?#g82oA$p$ z=l!S>-s$aTyddBH*O$Hh2j{PSdf>ZQq}IJt%73*szWT~|r}VsX&;4@C@G$FM!>!jO zW`*28t?tj8_FzHbnlDwJeZOZcfA`vN`nzVy?R)vY->`_a#rdo@*dO#ATgf+LUAAEC?TveO>ezW({^ z|GmfkU*?{v_?gJYD|KYS!TgWWt1376wwk;@y}@sxPThCGUtf3iFI-=9{FRA(Lcok2 z4IlqkckJ8C{^`sUnW%gBo6{U8Y|YSlES|nO`Bb-!O@@H;aeeDgVao(vn&&z1)O}Iz z#`ntiexm%wwQ2Tj_k~V3uFYnNcl-LsbB|S$MSsr>mxsOI3u-NSy=<@Zu{>GkJ6rB+ z@sIcC_1Vt3t<8K9dvMW?{SjOAW{BlxJq-V|yJPjc$N$uR|9tfE-xqnaS-z&X3ue9z zxSez5vEsV#K96TM{;l}&)pg3wMTU;kA4PZ_Zi@HNaJ=Tk#og`a+?c8*^mhK?d26L_ z?9gm9@e15m@?oLy6jO=iy3Mk)%{QnTPH%YO6~bli>38GEu^+V}ZBtZ@HmsQOZ9~x% z{?8L9ZJ5X_y?x_-VXvP>4}UyVw7%RL@4-=bwAB2M6UWBq6J|bUt+sfo-SXJmGvRX^ z?-BK9LK4CAIQD^1_15Se%eu1q<*epBOq%5$8xeWx?h$9^*PFke ze)#46Uk3g28w)O9uruK|kLW%!(qRNcs6qnfrUpd_VvAdOK3( z$*hV?;l_!NycVs?@Lc-nXNCE>)Mw9Pe0*ZE!v*DII&TC#Ub0%|@*dUH>pl;ce~tWc z#%A03Sx4kEmlv`=JDu{er}B-a&O2p|JICU=%_hxxepJUN@#YfCH!G?nulhapuK)M6 zYS(`m&*yfJBcdOpM8C)K(Hp;>W53}R$IN9`Iou=o%Vqe_03;? z&&*kWZIav4e@{J+ax8lo+Uqg%tLpxov&Xvo_dGd!(n+?8f(d9RI}C_f4_cLgemP=)W3VO zzB!e)OP=lDQ1UWpnqF+xrR(SBe-QVYd~N#V{Uw6ZTtyLEU*!Lpy=~z-W`j9b@&mh% z#H($zx!N4LVY>Y?orM1P0k?B5UO3uxlKWe=F#n^pGHAKp^s6hK zzZM-7QBj>VE5Aw5B|;lV|KZ z%>C_FOlj-E_xH~y6i*Y6|0gH**JS>hwzDhJtZx>cS4n-V6!!MqvD{w;x${q-Nex?d zU8h(>Mr2*`w<%jwD)ywT?M{we*qi$~O>q9(qmwtas75!fj8J5G95U^(Q`Y)_2U%_x zpEzYVb?+6YlF8Gi+_sq8x%yJU?4NJu*-wnW{QB~yb&nJDZf(urt4|kwx=6M@f60a# z)kSOAmd=j%J)3)Z#)cGm)@9Sr@Lry=Z=1~7SM7_>>&$z8J?i-Xsk2q{?;qy=%*C}OI>hnWJK6cw zLbjM0lYGKFBox_}FznkC!*@^B$aY6Pwa`d8j?_*cm^ytrt8!HZ;x*-!hkfzi8~2`_AiUw(o!5xZl{^;filuX5(3kINiFp@0Z?SxM@KNf<8nL^_e)a1_ZenRr^PROJ=jNv7|8{}Wc5ln- zmieukcs4Uwz5D27^T3Q>8Zmo2LXR;-UFT0ZIw`?vZd}l0W4?F#_ok!-)r5B6TA|z` zP_6Ykcn|yct!ti$eA1uDFUB;3^<+->efN0}+l_Y#U1Y42NYh((we4=!@yLBrexENC z-sCQx6-;iqFV8>weAVlMel7u;QhZf&)!6-%+vYNywvst^vakBVnyd5VV%IP8D-jTz z&!1huv2*iZzIB@;C%A?=e%xYb-pZ=SRm`^~S--W_ZjG7toE*zD+-vqeOP~CfPtWSU zY`R_hxylDTylUpEtugV1(I1yhnv?eM(**?sV}{9l?!?rvzk2oU!PZ+FX0atMJ+$Ha zn?uF<_o`mBHSh2La+gsxuR4A8x}sBxzZ^pErsT{z)E+$hQ`-I65g(qUe5FX&#e%w)iyZbt_$HSabMuY#iIncN|{RH#tNF7JTpSIW%+Y_m2JAC#%y^ z(}ZJGW$ZPi9wl-v4{3QC;PJKLYSv+mSLw&(1RCyI)M@nZC}ZHia`VJz|DKfOW$enE znDuKfOjzW7Vv+2Fiplf$e*Lq(I+$-}q(Gn+PxF&Sr3G$652yP&ZR5Wjw&k7bE-$mq zCr%h-#_SSd``u^Z5OM16kp}C<5g#s1?z!{wQ1)7v>EZJhiL_@`?lCw0yy?WJ7GcS} z#xIYe+*}@=@%xpZt*Op?X?OYiwDa?9pMMOB>d3pI1P z)om@8(f;-Kbct;l@;{gL?y9}N(7)5^dFS-UO^-XDzwZs(WxC$|!YWbsvM-Ws#{?TM zt5_SiAIK84;OY8zO~@~$rT1pRdeWSING2{Thb_i3!|Y3(Ky0 z@O-zbiN)1%~igx-+$xddbeA@Z|qj-tNoh)^xG{zowjDLw^kRe z9vxV?t09*2cjwyp?JsWj*NN_Y*mk=6xUJmm`Ud9sUvl5lDi3fhxK$b+e7I~ynPue8 zmZ_S>Zz}(s{<`H@obUN{x)xIx1~1E$`&zug{nv-eX`98)A9wdF(_0ug@y1!@>OBXK=)|0#f0{X?xH|fj z^#P%v_UQbT{ozqWhP&y87&=NEsUJYz=1sru+iW&hUK_k4=ExJzlbn(g@u ziH9Z3awHD7*`89)Kd1P5lbH$k*`%wFd_(rU%F?>w>%+97E>}8f?a|Z0JLc^OP27?d z-OS+QQ(bv$+uGi}KlHjXk6c((oE|kr_ubd7j1#(d*Qs4glly!>{qgfT*RIZX_R3N` zcf#P!KAB5KJcqp81p>CLPLBA?$@S^D#oNl=C(oTYC@1IIA?uT4vDoWjLF$Cih%e^% z=J0INSvW;gmTBh8Cl%d&x~wxZpRl?GsvY5H78d6I#-QG~?eoHQ|9{-xv-Qjm)!t`w zZwbAPJDp#DW9PGX->&d%PMjt7=a5#=|4&^O7AFhOe>nbd{_%fzHJ|+S(Gm2`ylt^2 zS`;(IDMf@jXPfodM zx#!wXD>b{X#__e+T8_`Fn}2PlX?4%^7l}(eq{62 z;s?_fO#iWS^36X-0_^4|9N+uJ_SfFIB{!a|tKT}$RbJ;z!cl+qdaL6vzuj1VPX74r zrN1tIKH6V#VE=?Eyq_!Tzr;-PQAoG6KfiOj)_5bwGTyFUO%#QwwyEiAt z_3!iko^Znd_OUmG%ANNuy7Q;m`nIX~*~0 z=ZqjvwD+YsskptFKzqGJEQ^EnT+`^jOaJJa6&F zWpk0){@@^ESR=aVH% zH)o!1@mb;iHe%s00(7v_}cn4Z3Q;Q7(H(_KH^%Xv`4EpGSi?EI6fqN@su_r^>9 zKbu{1?Q7hxy;bZ>Wz{NQ?vD8X+B_$&cvI5fvs2b@H_SL8ZF0uv=+uc0f0l(Ld2jJy zU1NW-XwH&e_OM*v-)Uyg{%&fV^LfdscP*NGKGj&2m+YLIm~ZE^!gTtTyR#!~eyf}P zeO&CZ@2+vh_rn73UVmnjcfWDs{_d`s`L#ZGH1DvPen0>8ZeUr}H;Hq`_wPEjGZi#hFt@cJxnybjioLHa z3JzWm?JLVHJ12QCB)39x>0jOr7Ax;kR#iGy|-|V?)COV_g-0t$7nU^N(qoMt$!^M%O1v*@v^9 zg9iL}ty*`A<9U-^cInC(-J3Z(V)T@hltOrRD!971JSf_^VeSLPms!u#m#>RkA6}}P z7`r!a{jJq~%;K)GPcwccJXBq@VFN>VqJXTdZ$N-R+rsyblepV6XYGj5`}X#Bd*-Yg zfB#%PcRn$enVES*=EgN@aEkyw>8n z2nq?M|6Rvix;r{LIy4AV9Zp+7D)CZ87z0&uqVQ(l*QAt`C0fcLmjvmksy^+gU#%Vm znX%F&>>j8=c-;eaGE^xM6fveX_^JwM&iwMlgo}$yY^#N^fq=oW3%*3dX`|6zcli;K%Y)zw$M z>JGM+hleLGa`h5gWZL5F;__sY-FhuZ2+UFAeGZy3o+!l0$G6P+_iT;ubuyiu)iVr> z)hsP7rytq1TK$*G)0KCAy2kC@taU9prvA!n+b+Ski#Ia3UHNMBHP2q^#U@ao>Iur` z@0)qIv$Mvaif6ZQ`Q?w#X6w%^{VzW8e7{let>WLlx+{Ven;2r=+~3vKYOH3QUTbyF zd#z|{e#*BaE@i*BIM2QG)bnMTjp-tr%k6bXwEABuDk&8ycJ;13((-=aVH4kfe?IH4 zt69|R^u<$2ATXTo$;x#Lb!LAsJiq>q_I=pz zw@ggOPX5$KB_*Yzb4C*~pdrbPPNhbaP*hRq}Lc2{j4E zsXMp1^WQS>P`ohx;5PgEN1x@VO?qNj5NFvkv3L8Y*eF{oGyQ($THVRVYF%r#=6%_> z)9&K7lxe;aXVtqWeMnlI_&;#V`59-f-H^@*KI-{y+Rd6jA0>a6-h{0M2vW*>dsz0Y zw!nm)(>#-p8>YJ}N;qEGxl})P{R*#{0@m-YoYndBuDC90a^L!jIP>S{loVGnhI+RO z#cY@-Z~te~j=!!KF9)vF{r+uVD_h`%eW{H5)1@XVK}4zDvcPn5%EUfub6 zX&j4gl&8bpTT}Ro4}F_2`Tb-58!Z+d_NnXkOx|s6vMi{B_4+y0KVNRLh`rUcsXF%U z)SZI+cVnWB+XCwKXL5G`e7X63#GEIL*`@EQUdAwA`{%2h?>#ba&8>@_ zC6s(N$^B0Ln>CjjAH3{0tlQfE;+wzWo--+Oze{xG4sh&hTDaa^?cK%lpPM&WmG8YG zyuZ?$bN8#LEcc2VTR(Uo`^R+s>)T^fL!D0Cx0?NN@$yXP#y)wVB_jc(OZSkI& zg6H4guRnG~bY;a_^%afVxwiA<_~$H`Yq$Q|k+;4{?{>f6uqQ_R*PV-Vx(a)GnZdHIDenbwAh(!OQXL$nYb_Z=Eo}*({^<|6RnQaRNMbaD?at+ikjcS zJUiDiu0FO_;eK52ZMHjJC*J3OJh3MBMpjAEhX)!xtg0H5RJ%@}QvdYmMCX#AHfg!q zu64TMMp=$(j=a?$3fQfK?^icn7t#&c^UY39>PF*{=jt2(u2{$$7ZhG|{Dl9uiO+Z+ ze_Gf4^8RMtkNJPxv>KN3Ob@?z-g~{R^Q7Acg4Wsk-;bTQ^*!J7rxpB$*S|d9n7w9= z_0y+%zK?h1-K$I0kpE%6{Qv*2Nfl4`&;0hY*k+2%u~L5flXG*Ye>(KVcE-|M1^1iR zdj5V@Di=AgtG;)(q{#;T>u>6sEmx|qI%u}6Z?5NE!KX9r_EcE3|1J8(yV~tfwg0DE z*J5-WQ&&h#3%|1OkM@NxyTWq*WUq7D($R6E^4Zkz_}}N5OA87NOtY_8ynAn+d#~o0 z{fCG}{9;m$2U&I&pU|`LTd?u^g37;4|7QG=-u=mE&&<~|t%`L8eWil;{gB6jcp6j~ZW_{P5$%t%;Ja?;3`5*lehbmUpZp<;4B7_VHhydu&$Z{>`hCc$4^J{>`|#X3q8w z74rtinQXlpd;f{o-J8^W{!IG!rbr#zxf@N>__Wi`Cr0=2`@iCvmb*20N1_tlCCPk+Dsz?Vr|U#6$!b}TI1YtSQn^}&qyua7?FR#}x) zsl=>P5$mahU`5BJ+o_PQdRyQ`?+=IIAt z%nuZoI2g+)TD*OkW2v)e=jEW2oO}l}8@Dij*7&#eW#Qv<=hcqaKH#<4VH=jiKK-1E z`t8z!HS2G`wacpNzuI+{frnl6cFD5Srlp$VNk_j#7PQ=mc$Y3SCp<3i-$J>P_2TQ# zw(%OwQDjL~nN;>6cw+04Wof~S_W2vnzw^gAxXQ*Z$4pv6v8DZ{X8B=(xSg*qZ0)&w z|Li4(#}d&iczmr(A1-s7%JG?5xPDIE#~-&FoDP&soLaoVi0#}2g&0Xm85xO3r&V+h zKbf+B#;r4|w@VZ1;_l?V58P^=W2O_q(amuHd>b*^gq+f`lh^y>4zioYM?ULII@ zneX3z{aW*Pm5)EXi>bUeE%RrWD0}l4M(waQHa~t<3NG5a+iZj8d#+g~91qXC{+GFw znD8up;#@7HF^ZYlP@662T+}U?;yZfdWXP;MAhwH_8v*uNQ6ZD$v zRd?o`lKKhH4+nL!kG|wNa>A~eJ0orK%t((zhbHd%7k$i=X^~^ZYq>9LV3VY=A#a<`Y9_(|FaqA3gIn(3w>Dt+6 zI}J~F-Fsbd?Unk>T^WCS4#%CmWz+6|e-87ufK^*xpPvwCzTsuP{YGcm3rb2#&qeoV zvptCX`+4F@)g>lr*ZwKTovvM-9B8K<&;S41;S-)K5}>MDj~@y?ePvQ8+-H963&OURGMv031wJo73W#m-e|f+%zXQL?_ZyurvDWz zXxq>H|B%Ty)#s0nD(nc8o;7vryjw>PetWv+i`kP^zZ4}JOgCAE$I6wYiC-w$`0Bgq zl+1GV@G!1pU5%y-M5an#Q~M>+{qp&T!)LsdG>1BW;6%}Ox-p&|G_2! zXLnse!HNH8ByLQava+rG^LzI_?_T`Ua?6ueVygCoSyzI~$`{eoT93svN03`a;tBV^LZ2 z1oMaCYU^Yi`k&8JR@ZHRV>|oiuID22qu%zVf7%iMqV&D+o`PUAOH1p{`1w9Jjb|@9 z8TXMjpS@(+?E~UFweR#6i>s^47rM5s{L*HB z6-F`rO3&<>UysU^{k*`=?dsxkPI=k+?w$40-?Xb9{j3&Cs|yR(mQKwpO@;yi4(IF#kr$(tM=TP`{&|$gTmd%T<2(7 zZ&Mc#c@v@tYAdI(v?cCe#6E4t=>t($)U!Ez*$zzKG40R$`6>l3wgk(adwA;PvY?!& zpR48u2L<)@L}amvN3Z5vbSd@eiJN;`L;Mw{u7B-deBbKc^~t)RwR1d%#l{+QKK~P3 z&&oHqZRT8`gKxI$cS>ov#FwmbG27F9kXh;Dc87oauKN5f;EKMps;8r)W6sfpxpRH~ z@%zikoGMg^aK3oik}G|0Y2e!RZN(i^8rq6GIy(L+hsZsCDYN{Qlgzoqi)!MQwg33q zyA+g^ie^k=d%^v6&nf}kphS)^b#~d6Xj$rAX>tc9%F4vW; zb=u;=DIy~BV)cGk7Z*LIu+>xlG+o}mdX3>lB~{LgQinjD0?+x^Aqx>*M8NA2UG#nl zE<%N=~ zi_4QYZ5hg&IM-%X6hywdxT?-T)%yFaC3z7?F3Ijx=e>BZHhaeYD*e3N?a6IX-A8wD z-1olye@c1UX~VMg`Q5Rnml?iWJO9RmpU?GWW9r^NF5!+n@pA7a^XWse$_so>pToHG+%vg1+lCQR_z@rmMH_elO z*7>SE<6O?FBWUvC()4$^Nrg||B_4hA)#XlL=h4IW9`aA`G~FY&{mY9ppxTr|esJ^;+d%dsao1`ONFVo5|J@0!K!n5sx_L-#9UoO^c zSoh6v+u{BtCKflXE{;xpJ@;E zK5e|X;lGBJ*qPMul~z-@3xz^9G@g|APxx53;`{lx);~?{K7LCG=?=B|_w9YkZ1wry z&+gpp(UIkFHE1D=_?qX(`S+{j?dMlsVfD7E^!c${fj=H9meYU;XW$v3<3G_s?^CJ_ePBo%vEwxjI6r ztnT>Xd_9%#AH1)8*?ML!tJ@3Sl3&l0eqLRgtKHnX{;Y!Cao&%{Kk^dU+qSPgt-gAC z;EKnKJ33B8a$KDDX-h`rw71-1n@cv!o7>-I7bRrSw| zBhhP4axVY5xBt@lZT&}&n&y2^h<}wQb^demwaKzk^R4CI9k=y7Z&+1m#_&yQx}e#s z(s{ov*gwyod-&Vw9Z%n79ohd~Wqt11qe3BVU5S+y{X1oOyym9J_Sfh)FZjFh|BU1I z_xEdUx4qH($@^aNj}vQuXx%;0>@2sW_>*zX)`Q#;D@!6(F2~jM`fpz25^p`@;oo)1 z&sT5m+gN+>;-@dqWU+Q7mA3ebuS@6C=ZSP#b-jNB*Toxm)e;mJoePbT-_x#HuR3q{ z-V5s$%fGEZdTct|rz>jW*B(e{x$iJAEHINla5?tR%ny%hZML3vn)-PX~W|6Lo6R60I#cVN%>;UgnvuPjiiD2yAb+ncsPRYrpR8%a%U_ zt~r_MNA~UwG}gM!pgiZ;S*?j1QdA|?=iYGs6My=HX`Y{{b%M*qHLjLs|F=$B^VsLL zZ^VHfQB9FwpKk0c;ni&P)S0(&9#4P&8s5_p@B0=yEnzkAjNL!Ow9|5julzdM&p%VA zwywImm{072^ndox+ny#SP1;>4d%O8m@WISE6;X#h@2XwBVVlpEeaUvlyOe2v{v1E} zA*nal@pVx4469VxOgZ85S6R#c?3#VcH|t@2!dl^f3GbH8S#;}Pv8}JZT)aY{=xJfe zgoCfWloUT!B%k-+*QZ{yK6%42v!$L7xR(9h)0#7%Km3r)GQEu#c0^u%wAx($r1$g9 zYNuIj-uzCsn|;b`nd6kFJ!h;9-DHSM;UYjOvJ8Dg3fgChBS5c$f~)d9rlLr06F8hMn7W5|=LJKfCJR ziECSqnXKN>%9^~%Pj&OdyMo6b-8r~r#ZTth!Lu){`NEdA?xf|rEz7jor&lT*-%Fk(@hn+Gf%XjhlacEqQxoR@6nuh#I>!jeeh={gjts&wKV<_Sb>g=ew_`AFbMy z$vZhsrtLe2^`E6nnfYL_Pkv@ZReipS|Ew)F{?}$u7Kd`j#s^ zOsg!rrRRB;g_*Hi+t}VrdCDsM%0%Jm{qxrP=Kn8j`(E|&R?ZCr&&Us~@oo3qemm+H z%~$UAt@n9)+w-)iR$!4C$KHREcGWus%MNTVvtf4oZT#o%ypZjTt@VbRerM-cCoYaZ z8@}HE`8;cOgHQK7xP--wzkc?gu}!ll=wX@Gyvdo8+<7Larj|wq>GEoxrB~y>wQ-r6TI=)`tzUL+r`_h*}pN=M}_^G z*(!OH<%)*uf`j&XpJ%J{AD*{XC-Pyk!(}NQpG>ctz56%)ia2@J#L&=y@4eyYw~Bd% zR{mR7cwe28*7D!BbL-CZ1zy))-6^_X8c|=>EZF^ha{jFqwdb|(e9m8P8k_PoVukR# zBMVk6zsJF?zGjE=wKJy_jFS!L_x_mGJ1@EA-sIydo6OEXylnowL3c{l+h4{@uJh*n zy6>;@|8=R&&uu1~Hy5-{QM$vno11Y>i+jt&>2qW6T+UWhGGfv`>H4@ucBzKw6D7Oj zHs8M4uC1K!@Gx$gkIdmoonlOjq>HaVxL0y_>%{MmW9HPAnVg*SS!eDunV+vN_zCyl z2ur;qrxW&iA^&|g7NG=7lm4F4;L7*)!3X91-um@_+RvV!dUwLgCFvrYQs4dm_~p!& z#na9P{kw0P9e>KN?D=-(ZB3%rDjBpzlTJ_GU#)gh>J+Ha>7*)kPOzj>TWUj(|3C94 z!T;6EUOay}eZ~gEo-|$U$=lxe3$5C=Jp1z|774a%2aG~ii}W$>D2}N(v{<9`j{49<yiWdWE7WIQJCpYIQ^l$H%Z*iuW<1p*zWG_cJ0D3_Z~uRE z(Hpfph0(T3e|Zf46db#pOlGiUzE}ksvyumh`|;kbmB-^a;)S}?*Dtsk zyWZ%RoPKm&#k}ox-ba0+&&|KR`@-rsPWx`uv@L2#XEv_8;rIXd{O6z6l*G)mz9BZ> z?P$I2TF+O9^naM_(zlJTV*h`~cFmtu&Dl~@52w$1aQEn$@Ak)bye^w3^_8K~jWP1~ zqt4l%RI~jw?OB6&=9*W1>r^@LNL4>mck{j(hxO!V9KXT0e0QIF{^|U_nx0wK^G+_V zf3R*Iv&7AVof9|DemdFiK|3$&QQz~YzwIb>DXpJYu5DGQuJ`P8|FaFp*$cjWlbu{| z_1Vs@I>g!P`#aB`%WW^usVKhlwu_(09dZ5^J2&@rpOinZj!S%cw>u?0Wkd4GDzoZE z-Nkz+zk2)o@@hgmb~dmsKhFz-ukjmclHn}yF+CU2;+lGlwd z&dSfpKbkB&Z^731kNd2ju~+S${_)#heFJmr`B&%nKl#lr_vEL3mEeTklaJo-eX`l~ zrqUw5uy3U$3aUcjCke?uw~@R#d>Iyz!lVk~clbgiv9wBOUy@)L9P zwC=SW(>^SVxvVhRwYw}vg7KD^^W0q*St1S;94R=eo68Zqf7aSK(+ojD!HJ*E4#m2B zoawdQ?yRtR+lJzA7SG=9cCeF7sTv_$C$~x&JUg5Y(xC_<5Jp77x!dv-@uUynoqRck$a*%)hwU{=wmok1KY?X7U`k_(|~?Pj2()HRevt z&!;*|eh%Q4dHy+1rqtGd@9loJZJTehotwNZwR7p`ZvD$^XMKHAAGOW)zjUd7>DRMD zO6mG8*Vj(*zkB1+e6L?(<~wJ6pR=i?CXL5=9mgRCo^)ZWxcAA&Ivj02+z|is*3!s< zCD!oAn^sZp%DmcVl2)M~7RS9e=hwSjFW`9YK$Tp!Tv*oEir(Yvdlfc3Rk-)A`lsZ- zX)BWVE}w2&Xm6AqEB35acHzpZw`)W0noL{B&-bX2oz1xH<-+96upYk6=G#|;cFFqh zFIVV^TXD`s+M@sVw3)|FWd=vidt=T2?f2%()Be?3+nhe0x07R6^tlDQZ>7n6{Qv)Z z)3t^$!MMDr)Qp0DLt$dq~BCG=|X{eru3u&d2O|K(T8j9 zTG$-VePELrohBA7emv87e#ZNa8An#nSu9YyK>XLMg9j51{MlZ-B3g6)R%@A6n_}*; z-{N{JY4)Y+RBP0Z|6AFf{Qb*&zGmN~Cg%P9`=&LIS*({ibRw$l=4-~KL`ziNs z-!i_ye|bUXx(SEGgMV1x4d1gb^u~wX(^qZv5`42|@|WM?HJ?6_EcN!D`W8Q}BOL{H=O;f8Ec<@$%-rhqb8~Esqrdz! zmTr?hcW|rUtL-b=_RnWODV_HD=cVK)s}`)k+WS!X-J;Y|VX1J&m%rCvwpz zugAYXQ1jjS&h3R_%hojO%=^l^+V3X!Y0G6jj^@8b>nz?meav&1A9(oX#RKB*rxgF) zSz3_ZEwRi$+K;OtX+hfcz&q99(peIlEH?d-PSdq@tDE@w`J|5v*B*ah?)GSFCI7Nz zy(=EQXEr?j^U>?lBR9Qg?7o@k+Ou?~j{gpe>bNH|v*$WZS334^+XTj?J#!2A)|Fn| z;H%4|qwd+Mar}n3kW2i^&5;@T{$KBepPbYyX3kW8$0%*j^5<98ZD;;}RMQtz)KIFv zHu2hd--_jb^WtoU*EIBnWpKW~(4s5v_w*%;t!~@?11IWqZ~i`-$Hlb!!-vOnH=db$ zuqF1T#H;&9h5LIRZToSL`%E`%EkJq1)S{Eu*JrU+*Z-E)@!Mqn_sFU@Od$?|YhCny zHn1KK()_T-eZKmP+W+M z(Y*i3#&eZtX4}onmE5;Q&TQVs#m1Fy=aw#E?kX34_0<3I+{{9YJ+lqo95uW%-=H)9 zo9N#9SyNZPZM&jbF?nXNaKVrACm+M#KmT?&|3md6^|!z8J3lzLy)x}-=9?(_RoA~L zt?&5yJ=c0pVJ**}j~`v`^_@GatTE?Rm$c2R3-3SvUb*wHa$Lo4mUp-QKmJ(QZ>;b& z^qJc&ZvH1B8D^DTY z`Q_gu8BsF7+cF=2oA~V8GPfD_J3T+Te(~pwQU95H&1lxXpvm@eKf3mwJM{MRO6FZ| zvMY8!O^%y6zc2s!Mjx4L-L}Hw0#Da@o@ymL}KYgab1GTals1Mx1$8#0WZr1$XThHU4eugza)A9F%$eJ&I z%%8M`_tbrux^8GFP(&*93Cp-JV%xs2#CGyOrsx>$i(f*L1A$o1OM= z`gQBoW`1vPp4FT^yC?a!#gv$eWrgbRp1(gKQZ!d<-5ZUtHI`lhcRBW)GkegH^7Yc; z6sx-_?(d##i1q$*?CP8og^zvipFJmh@5-8&!ACyDSlpe*(tb_l#FB%l-fC70cl`33 z`sMKL8}lbLJC`O~Z=GlVJ!?g<{*OBck4x_Dyy{-eWxrnRuG_PZvTy8T8;qYCME6JO z)z5z9yZIZhN6h9Kxte7m?ozwO*FOqzsg9a4wfOe#L}!~ahqIk2celwzZCM>(rM6Hf zS6n9TZ(GZuZJU)WOLl23G%ac9y1ew@?ktU~%sdaaOcIz}QYjYranaASXFcQpDrYY) zE_kSB|CU8Pcy7kwTNketoA1}RZ@c>TnAqN~``fZJF7G?Hv$S0H{*hagD_5*|;wGzf zY_;0fQ;|nj^1k*^|6i-~D^-7GndsF_)qfQ+t!#YjX7K*mXWLnG)$!D}T$#^0G5)y` z?pEyYo^Mxe-(V3c^YVAZCbfBPxzb5HnhZlf?JJwSE7|t<=FkJ4mzI5%S$nN*+CkMh zeBL+gS6Is2-`E{Iv+Pb5qv!3gO{Us&ewm&wsM@<~W9Sz{)ymggX6jEKZ&Tk?>~FJd zO|8!Dxovmnx}WL$yQKY!(vwS}pI7+bP75>Bz3a6p_UP2g2}@u1#n)_n)$!!~eg1^P z6;F=mr@F^X6}q-~MdqBN?@DibmNTvk;gk1V9+kmyYtt9Ulf2V&`=%zpSraYY?V`8n zlF>!+Yfir_nij?UnU%7*RpVDf-q~{xbL>1zEec+gytt5H^!st(c6ojO*R}t;u0K#S zKG+fzv!*gLK;%Nt?svPp`AVA&9=Uz};5NU8hj{|?3f8cqb7H4f`N@2Xd9!VE_Txhj z3l?7$E$k?eOS`zn^v>;c4Simd#~rs%ubN+D$ro<(@^nkO;23zk(pe$Fg8?M!j);%7^eH&#D>zP3R&WVdK`V^!e&>MI`)E|_v@ zerlHW^gYFb?cB?Q9amp&$Vxumq`&ggf4^fsa((6JIJfEl?woIaG`40^Sj~s;&09ja zr#}-Hm5<-EN$6z3y!`u<=5?-IcYY`Hj#=}||2=cq&OJT4d)plM@}t+~=dW?OB>VqC z$Nqx&-Le+v)+~RNe(e5g&BJlCk3A@6zR_TOufy}w8&;+--^si@toz-h=8mK<2i>P1op|PRZQAJ*N9qn%Ut!X={8l_st<2r?b>Nj% zPbXI&>?^Ul`=VsmrQZtcx0H3yPySXU*B|0=cK?GN8b|D9UE*i7vVAby8K`$6cJ5g> z@7ygrCN`&To%8Ro=%FQ)T;)@IGF3 z+EVX~6Z4+`E_Uy2Cx$<&ZrO3sqA16Lxry`2w5NCTg39vLmet9#ZCl;u$=r3WTkC67 zko|_9#Lh*BGpk?_Y)mrFQj-n8mrXl9#JnUeneVae{m?puCG z8v^IMM=fft5#7SL_T{xp>yI$||NQl;WD+QtWryVnEAF-0&Fy(}U$S-cmegrW-zHg~p1y1C?7-94nO#d0PM=zM;O()s zadIAS?(dm@;2rZ$-80g-@Uv)M`3T%qR-3R?#}w5;rhLQ-P^@ys?s@lyI*a-BU7}sk>z*xsU2^0 zbGB`Jdav#*$0h9rFFvlk*C8gjZ#uhws${V0o9uuO+2!inuNp1NsL3q3E^Fd(=jc6= z^3KM%!r$(O5{5T)RhB+`*~`jA&(&78NsexHfooek@>gljX!q#jHx_g!#c z4d-*_%#&{2(smtoyZS_D@_#y^A)Z+&o9kSmiYWaWLA25!fC6cCm)MBoxU3Wxl_k9Dr95Myt8W#uuJ^8^t;E* z!oz;oME!kH{;Q&9=mz9g-eE=YoFs|dv5*we`g*% zOs?F$o!`sPX17@Vq4N`2119>jlppbt6X{!n0_v%HOwcC&E-T&cbXT_T7U(YiI zovjmbdB1SQ@7p1_?ZVc+KXc-wd}05r6Q3k6M}|Mz^f=<%$Lku+zl{r@C0A&%rl`xN zzn=8|X8p_Rxf7T6t$g%-D_?=&=C1+=oz*`luHf%$$*uW+Rm*R;_p7r)-_CC|)wyFl zEph!`w?0+&*Dp2v=9En>d7Q=I?o{LN75+r8t#>J66B z+w2}}+Gx^yKk07jtmIWiFVpX@Yj}K->C$2AON+Pm@n$dHaPsBbwq;lHFMQafDI_8i zvW$Pfq0!4v3RP)|XP>1D>z#9x?=kes-6HTPe&Nb%-P8Z;&u~3od)#sPm*ZFGTkd)B z;{{9Bx*6vVO+NSk!altko|yA5H23V(^4+&ezmENJ{cB^N>}@mC?e93PE9nqmSh93! zY>~@OuIX$S3JTeFZTZfn*z$uvC^zTtm(rK*uU|TC_F|qTC1fEoz1eJqXn8sR(;uhS zum3QQM=_5lT-4>ht))*@0Ec4BkN#kv#4i<30+0R52#mQYbN>tP{oGR%a`pPEgzSu|IDcouMr7osy6s|_~Mo;cV}3;Uw`9xul}c>)03d*v);d-bbM9Y z2gcya&-<)0PG6ewQf=P95}CPsr>wp;kNbI0tE|DQuSu8A2%21ty}9w={-+6XRnL{} zepeWMcl%?`{>}C8D$e8sS2FL!hevPZ{<(f@wC8hn#g-k*9<^!P30&LVe6Trhxod8{ zjf~}z`F02Icc*=JPg(cn)&9!RkfrLv@heZtKi;3T{`0XNd~5DKPmO#3{OGLhaY=Po z_HVg(O?ges42M0xZ@rXs|H4*x##c3dZ&+C<$K2mrR7($j_PIT^yULcw{_3H5_v@V} zSD9MJxpxP?zhM5+_g=)bmfeSLi8^ra!@U&6a~ z!Xx*Fd^1napHKN0i1JF^*|C1>iRiP>j%-`|e{NZ;fYYDdj$71Lh;8jrkKFf84;l-TH8@_}O2Un}1~1i)k(3&2YP)$o%5k3NANysrKt< z(!af*m@@q{%Szsyb9bG8U0xa(>hn%U=)2CN%lX?Uton87#X5G0qUhu%UcO8Hc@Nqx zy)7m@bPHZ9u5TaS9eX;|>dwtcTC+sT{up$}8{IPe)cDSXr)2VmkJffk8>ah&9$fy~ z;$B{Hlf3TP7nc{R9qVb<`In@3{Pn%_&E;DaT&ABoCvW$3_Sus=0t~iG9&s+;uB>x| zJGah=J^bwR-A@Cb%*kC{YvX;%IWzor&w9hzb3dQ|-u)tK82|bp9E?IN^)MN#C2N=9Jeb?0?(jciHX2_la>Wl~o@u%;qiFF)8xzL!W8$ zzv*qW*So#_YSqV2#Sdj-UN1_V9mO)|-(3GkyN%bqT5t3Ft>c`AN2SJ()3+qPHkSWX zKCdqT+zCm29Sb!3ATgtr#rv@KeTF^Nqo91H{oba|faH{hD z=1((tr+$8{waiOeipBco&!4x~e0*{4!tdRe*R+{uJuCe8E7Od-eEH*DIkJ1Pj!Ye> zP0Km+V#bk6JyIsCUj!C+jqU13;~giu?j2in z(|(ig%~t>8?GhKyNyk6`Z}`~EypQ>F<=5XlzhW+|OX7O|E%ES+tDCImz4P(=x3}Yc z-95)mo4*vs9h&ONd0hL#wY~l3ZdN~QF6q1MX7uIQt7hlFRrUYz>+Bk-_q2bQ{g8KN zyX&`EDsIB`V;7gke>(ZkGCyv5c_KWYPJeE1XvpG(=>hLmWnf^|7)#r~)wyXh*A&ZrUe=!;-KM{`y*K^M3!k{^blH~;kFL%M+c)3f^Z$K^?q+BR zANNc6vvBK~nRfH~d1WO&U;6vyR$;@><6O+bv4_iA>OL|;$1p0tolLjfRLc1N@BQhm z^W|&Jb<1iGzN-oNl=S2C=cO+5&bi80NhcrcU3UNE^cmGlHq@738|hIv_0;q9@8dfn&uBl9jU%vn3ogCSRf7OlF z#e09N+c^7=x8E(*x3fbSd<}fF)C|79ZCw&P)q38{6ANa4GbnaW6I73|<+a*+)cRBU zwznr1hW+1IlJ)H9y|>$n-|yY@Pj8jH2$Pk4r!)?3Q)7zf!H><06%$A>Zz~gS_HpUFES^Dlbx1B$6p=|3 zci_V_2c!G5PvvvwnOvVaxGF8ibp5eSFY`at zwn_UYgdf{`N%Hg^NuL{2`xgF-wfT5LBd@!@J#>2P2F)A(`Oj`=Ztgf8wBk~sg|Hj% zqbo=BZzS$c$T?Fn`DI|G#G&6G?*t$Ata__#7Rl%3!LkX6)-UJ~zEMk(7JBaZ6SQ%fHJ-Zithh#MH2lS^)+o>Y^L^us z>3f&l3JqC4^~dAFh>y!6f3vBqi#)SU#Cnx-@7?b3Lajx%x@Xcq_4Ij!>D&4&yX;%` z#EL=f2#1WAo7W>@2(In|cwF%qr>IE5H8P8SXr{>fm#$TctI^+5XQKE}A4=+99$2P~E}Bc5i1r-}JKotjf*M zIn(z3+4t_rOrF_Yr=K1=yx(f;>Yodb`=#aRtV~@Q9dPP`{PZH1O?kO*R2d68r-!QK z#2#OmW1gV?EkNYktF0W@Vh-+F5&0%=``i-o2VPGER&PP(@@e9CJ<3!6#=6)~SuDRbF*h^!&e=^@m!Al}8_}=#_0b=Cd(#RffD z(SLD&)Q_*#yTjU<^S4&`+Oyn_3$b-CR^D1Adv$Txhu4ifbFvthoBuuaYfV~7Mvjg7 zx=GvDCg!^(rWvouO@DQCO~S)i*i+#!B%Z=XdxXLtX z+uD@uFpIC*^X{vqpSi!rdRjZzljCb1ufNQjasA5b4Z5c7dtYy#_=@R{flQoQJIZzZdJ|sQe(dA@S%UA^@8G2^EYf- zVrcW~@$n*G4r~#UmNV#weHxND}64{Z{y=VE=%RtugkfYz2ed~;fLzeKOMey z`N_`Em~AS3M^onP-l6;Mk3x&U^;$Kl0~4zno)+_Mkh$>l>ceY-{f1Q`R?F|j_{uGK z7ID(D`bdd&!H%sNr3-${{P;cV)Q0QJ41e5_yayhYYTRR_7yt3=adqv9CC8sO&YI7k z5^*kF@9LZqowEEtdqg)hMb#B;iZ>)@-a)-daEsXHo5xX+ycMl(sTX7Q`oMr{^`5r0mFS6tv#M^Z)}T= zn7^}g8)Nh@)<>=L`?+5ERtQLK}^X!I+xuG9Fezg;JxqV{Wy!kQjWVCnQ3-zwK z)S2|`qrG-?pxIzg!5%=B46XV~DCzLJw zcC`mO!uLNRKkN0y?+@Q)i0?hDeLLtxc&SNMf))Ri)ap-bBj(=wQKc<1@1|&vo!uPk z=eLD#?)zZ8P5(*)SLWdd%jHu7?g-l5%i66`5paHv%+yWa+$H^{=q=~&{njKh=c4fA zsVcqes$%udJ=pf{3Xi^j#fP)sB_n5SI=tljg5ci?*VcOM-StoJ{jT^4yMou=d{XiA zLG3zST|2vZ8rL4(x*Bl*xNz$mDJzRZ(Iv`f3Ep&^Nm06 zMDF#UKDu;99%9D6?4K679)6|oC+{iuFoO@i%=<}Ut>8cwb&&Lt1O8(I}B)NRZ0 zl3JEkrxsaed@zkSWtSdT*k5b@+a^P@vCS0 zD|)W(=mSB4j&eV)u z_$5{H`ql%VI|~(8BuY!QRxAv@BNDNB!_B)p?!J2J=%2^8^Oi%?U(@GJOIE+;pL*s8 zi_F8`4g-d+&W=2D!7|nUnW5Tw_ca)EUtTe2FO}ba=Je#ar&B%Ge>$~fdd2Vl%PnPZ z97@k#{qp_l+TGe|;?*&0UtC*M;FH~Kbz$w!@Q-ib*|@DeH+SVq{Wte_Z7*50ZP}X7 zM_s>syK513|L6q2(2hIXXFqhhsNi^%r=(yu$$ zmJ9#c%Jpl4-<_)`C;zoxTyU#@L*{DsyKMIyYwKkf9DESpo#vZeSQ&KN_tU(&DrP_A zYiIpf7|av$`pWdYf9yBwcC2txGS{>=7Y^Rf&wM-d@DfJX=dM$$bXUr+5HS?(m3SjI zDX6$`;e)#yxZkdh-Q##mYVOOc3%ROX-4kZp-HFoen%jOZZi-Z9+3~qozF%8V(N^rf z{@RnbH+_9PkDDJ4G|LZvVY5J-_iyQf7a!Nhwr8oa?hWjpHP@%8Pgq1bF*bkKf+Mb~ z=IZ?W7c5w`{-bPQ&i(8~!SmN$G11DXl`aZjzbxg=tUcY|6~r&a9@7G#+o_$n&z%Ae?Gz10{F>o7l=Bh^L8FgF0JXid z{KN9Zj{CVxihh4)rRok*W;q$ZQhC``%H1#4-v4~}-5sS_H;=FSI#<&2r}Dc%;Yhn= zsr^$g$ftI_@7GDKdm`cHTge+8X2$uuukey&jcTCDwAC@wH(##{y>;KE;*r}kxeXIa z9Tg_-&9e=>o4-8yh0(t~UEl(%rXT_I!pfiHTOrh zY|8QfXaDs3Z_2-%bj?ia*y;86{oJ);<4x-iJr_i;l7Ttb*tBDy@#MJQLLXLTc^q%chCu+TWuKPFhBB z6!HeYGS8^EDXFcY;ZfzrQMgy`8<#xy^(5}c_P45j@@~0R#Z#AT@h$SXysSoxfYXwt zv0rrbp0F=%1r5ZuXsB~8g0W!Zw~IuA&OruUkAzNAhyo4iI&~E7dL$nm7%IB>Vn^6& z*TpAwlHKas4M#7A;t? zpr|RsHE_f2w;GdLA>+IM1Iu>H=I6gJs(;s&y=ZBRGgwOu|2ma*Q>D4VRUgqz*iJsk+z;Jd8jk*?D)jZ)xp8o(uYPQA9Et@`?H z7_yb}9K9@ddfI%uhnJtKp9oH^0DDVo(S+4H4_B-)^H!SqB56hC#XozqBhlnGjpxCpLxID=YO7B)W?NKYyCebd}j;!emU9S_Q(394`yc-8Z)m;QJbzzw zd%WBqj_c0nFBq#xJUx2;<&y%ztq)Z1Ma}Jtzg#V0yGcAZ>-T~u%L)n}`Yih|7rdh; zmt*d6pY#v8r5{h)9_#W?|M2!4kKXOQUHZ0hf1CJT%cs2hWy4@|tM~D3Mnjw5ht{hI zI?PV=H~iJtHpBMLjm^oC-|n5(=_qO3#}?bxpZG$Tm-EvJ<+|fec7Jm;1I<3X{-_mS z)|==U6}#&yzgqH7m1Tb>)*Sp4TGXGLa?|j`i;B}vf4kkE5^b%SQ06=T5ml4N8Ab2D1H;K|9r#o^$!<6PZOBCFktQNWFNWj0_t*=?Y@?+tHa+v zJGN%tCllvM%`ZNGn*HbgmSZ_HKkFsiZx*t9QmWR!qt$nEc+yS{tE&Q+9y|Wh*#Gg( zhpkI2cxN2Wevnu`S-7&}$3)-E1@UM3-nW^UES(g)ob#)V*(UuJhP^h6e^}mPeV+HG zWYg={<&hUZJu2c;ed0H-av{59{QhGvct46%ge|Z0U`!XjzUx_R=9W6C{`#3-4&T!& zvfnUld;52i^SMu7`?vkOYg1D!b>GIa=j}|bWm=`2g*zFUedT7HIJ_`>#Hl2Q`dZsv7cil*}pMect=lNj&Y&O6%Ge~#%Yt)J-0Q_ zs+!>u%{;3u+t4h-=W6r*O-f7ce6uq@=G|zSrOqe#RAcY$Ri(Rne+6>?tg4kU+umiY z-gx-<<#VZ3vB$$dT#n~_vbs#jJnzYd^4vpz)-4D-{_;pB*Rrw*)0&dJPeF@1{K6gY zPkDFOWX3~@UDw36PZ4JzFJ%x zHDNx#o3NX!+I~=G%***-WZB-?@$Rr>VYqbG@2tYzrWLi+o7X(ww3}}? zbGV<`&GbiBS05f&c~x|ypw>xkyVPm_1K!R3VJPhLQYPjzbNspAvt8VI*cbcUxxRy~ zl=*O{?FZB9>_7d2y{igT7V$0TKYuJL>%htf`QHvto71#*#`j%oZ>G$xJ^S{+yGx5M zYyS9JG4-bZ)?>^Ca(^bZ$KMKgG$}@1{Nuel3wb2}Nina|o^x;WB+K}JXX3&Y8si$b z)ILkLnsb_~`oT)e2G8O;*-h&|Eb=*fURj>mZ81}sXn=tP?}Yj8`|d=5>adR01-2=R z{$Evy3SQ0cZx=9i>*Qm`s>j;ArO!?Ht|lBK*n9i&&+K#2e@xw*(|i4T>YjSa_1ruE zh1aZ4&c?I%-1dtXZ+kttq~n+B68N4d!t@ z

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 literal 8841 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 diff --git a/doc/qtcreator/images/qtcreator-options-android-main.png b/doc/qtcreator/images/qtcreator-options-android-main.png index 4a2c09dd8b5dafd0ec1f6f71ea926d04c35e17a5..15afbe73b6b331accb34124dc1d194648c7f2a46 100644 GIT binary patch literal 15736 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

|pOx?D#TOk7wE4t*Y!P$U zhW#qHDjXWGFFq=2X=&T5kOII6Cdw`VLP z@?BYe^Qz9b&n)?OoY~HFa5%6Ycv0eTwV$ndYu(WlM??33CE-Vz-$)&vctrqIRczP+ zTJgpJs);~Lp`a_Yz_kjvJ|?iV%z7cLV3?TDCH7&|OIH-=Y zO308^XutTIfq_BTrRHNw$$^8->=!|MyM(VZf)^5fdw+j_`TKj167;~EiL@CUYd(JZ z^ogaUL8j8+Ib?0pqt?`jxcBRiF9kc{mm_FN8u3nmx=w=k^;*B}dvE?Poc%U$`POrx zYu;UL+*O)#J$T*u6fFh@hRN3%cS>hHTQ>V;!;RO=OC9PSH7%SQuxQPhouW^k%Y_{N zaW-tWvXHss-dUwx*53uraz!@_F)&29$SUkxa5=ABYUdWgW6YZt<=oovII#3j)#}_m z`!wq|&wVSslTU&-?z+jlDTWyn-c&oBVPi;mSmIFlJKRs9*l-c|AHkK<(c+nA!F5w^ zMvFb<58HijU(54vGC{B2teaw^dj59a^79dEBVO556tMl@oONXXma7SO=WGdVZ%zNO zd;h-RMQpD|fp({O1vU*kC0aQ0Z6N_P}V#FHH{c zvSP7lb{4($8>6M8*sq-9cClKZbzpwM+s-9BtW0YI&rA&Q*W_8j>=Zbu2PEC r}H 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 diff --git a/doc/qtcreator/images/qtcreator-settings-run.png b/doc/qtcreator/images/qtcreator-settings-run.png index 5d0680fbdf6d074b9d9967d085d69079d3496038..3df81e9daf45ac96e79ed7d695bce6da1e11c34a 100644 GIT binary patch literal 24017 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

lf@*;r8oWxFISx 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 \uicontrol Options > \uicontrol Devices > - \uicontrol Android. + \uicontrol Android on Windows and Linux or \uicontrol {\QC} > + \uicontrol Preferences > \uicontrol Devices > \uicontrol Android on + \macos. \image qtcreator-options-android-main.png "Android options" \li In the \uicontrol {JDK location} field, set the path to the JDK. \QC checks the JDK installation and reports errors. @@ -108,7 +108,8 @@ offers to add or remove those packages. Before taking action, it prompts you to accept the changes it is about to make. In addition, it prompts you to accept Google licenses, as necessary. - \li The installed NDK versions are listed below the SDK path. + \li The installed NDK versions are listed in + \uicontrol {Android NDK list}. The locked items were installed by the SDK Manager, and can only be modified from the \uicontrol {SDK Manager} tab. For more information, see \l{Managing Android NDK Packages}. @@ -118,10 +119,9 @@ For Qt applications that require OpenSSL support, \QC allows to quickly add the \l {Android OpenSSL support} to your project. For more information, see \l{Adding External Libraries}. - \li Select \inlineimage online.png - to download the OpenSSL repository to the selected path. If the - automatic download fails, the download web page opens for manual - download. + \li Select \uicontrol {Download OpenSSL} to download the OpenSSL + repository to the selected path. If the automatic download fails, + the download web page opens for manual download. \li Select the \uicontrol {Automatically create kits for Android tool chains} check box to allow \QC to create the kits for you. \QC displays a warning if it cannot find a suitable Qt version. @@ -172,7 +172,9 @@ \section2 Managing Android NDK Packages To view the installed \l{Android NDK} versions, select \uicontrol Tools > - \uicontrol Options > \uicontrol Devices > \uicontrol Android. + \uicontrol Options > \uicontrol Devices > \uicontrol Android on Windows and + Linux or \uicontrol {\QC} > \uicontrol Preferences > \uicontrol Devices > + \uicontrol Android on \macos. \image qtcreator-options-android-sdk-tools.png "Android NDK and SDK checks" @@ -198,7 +200,9 @@ To view the installed Android SDK packages, select \uicontrol Tools > \uicontrol Options > \uicontrol Devices > \uicontrol Android > - \uicontrol {SDK Manager}. + \uicontrol {SDK Manager} on Windows and Linux or \uicontrol {\QC} > + \uicontrol Preferences > \uicontrol Devices > \uicontrol Android > + \uicontrol {SDK Manager} on \macos. \image qtcreator-android-sdk-manager.png "Android SDK Manager" @@ -216,15 +220,39 @@ \section1 Managing Android Virtual Devices (AVD) - A list of AVDs is shown under \uicontrol Tools > \uicontrol Options > - \uicontrol Devices > \uicontrol Android > \uicontrol {AVD Manager}. This - works only if the \uicontrol {Android SDK location} is set correctly in - \uicontrol {Android Settings}. + The available AVDs are listed in \uicontrol Tools > \uicontrol Options + > \uicontrol Devices on Windows and Linux or \uicontrol {\QC} > + \uicontrol Preferences > \uicontrol Devices > on \macos. You can add more + AVDs. - The value in \uicontrol {System/data partition size} is used to set the - emulator's system partition size upon execution with \uicontrol {Start}. + \image qtcreator-android-avd-manager.png "Android device in Devices" - \image qtcreator-android-avd-manager.png "Android NDK and SDK checks" + You can see the status of the selected device in \uicontrol {Current state}. + To update the status information, select \uicontrol Refresh. + + To start an AVD, select \uicontrol {Start AVD}. Usually, you don't need to + start AVDs separately because they are automatically started when you + select them in the \l{Building for Multiple Platforms}{kit selector} to + \l{Deploying Applications to Android Devices}{deploy applications} to them. + + To remove an AVD from the list and the kit selector, select + \uicontrol {Erase AVD}. + + To specify options for starting an AVD, select \uicontrol {AVD Arguments}. + + \image qtcreator-android-avd-arguments.png "Startup options for AVDs" + + Specify the options in \uicontrol {Emulator command-line startup options}. + For available options, see \l{Start the emulator from the command line}. + + \note The Android Emulator has a bug that prevents it from starting on some + systems. If an AVD does not start, you can try starting it manually by + running the following commands: + + \badcode + cd /emulator + ./emulator -avd + \endcode \section2 Creating a New AVD @@ -232,68 +260,18 @@ \list 1 \li Select \uicontrol Tools > \uicontrol Options > \uicontrol Devices > - \uicontrol Android. - \li In the \uicontrol {SDK Manager} tab, select \uicontrol Install for - an Android version, and then select \uicontrol Apply to install a - system image. Alternatively, you can install the system image from - Android Studio. - \li In the \uicontrol {AVD Manager} tab, select \uicontrol {Add} to - open the \uicontrol {Create New AVD} dialog. - \image qtcreator-android-create-avd.png "Android NDK and SDK checks" - \li Set the name, type, skin, architecture, API level, and SD card size - of the device. + \uicontrol Add > \uicontrol {Android Device} on Windows and Linux + or \uicontrol {\QC} > \uicontrol Preferences > \uicontrol Devices > + \uicontrol Add > \uicontrol {Android Device} on \macos to open the + \uicontrol {Create New AVD} dialog. + \image qtcreator-android-create-avd.png "Create New AVD dialog" + \li Set the name, definition, architecture, target API level, and + SD card size of the device. \li Select \uicontrol OK to create the AVD. \endlist For more advanced options for creating a new AVD, use the command-line tool - \l{avdmanager}, or use Android Studio's native AVD Manager's UI. - - \section1 Selecting Android Devices - - When you deploy an application to an Android device with Android - version 4.2 (API 16) or later, the \uicontrol {Select Android Device} dialog - opens. It lists the devices that are connected to the development PC, as - well as AVDs, and their status. You can select devices or AVDs from the - \uicontrol {Compatible Devices} list for deployment. - - If \QC determines that a device is not ready for deployment, it places the - device in the \uicontrol {Incompatible Devices} list, with information about the - issue. For example, you might need to authorize the connection on the - device. After you authorize the connection on the device, select - \uicontrol {Refresh Device List}. The device is moved to the - \uicontrol {Compatible Devices} list and you can select it for deployment. - - Other reasons for showing a device in \uicontrol {Incompatible Devices} are - that the Android version on the device is too old or that the tool chain - used for building does not match the Android architecture on the device - (for example, you cannot deploy an ARM build on an x86 device). - - \image qtcreator-android-select-devices.png "Select Android Devices dialog" - - To \l{Creating a New AVD}{create a new AVD}, select \uicontrol {Create Android Virtual Device}. - - To set a device as the default device for a particular Android architecture - for the current project, select the \uicontrol {Always use this device for architecture} - check box. The \uicontrol {Select Android Devices} dialog will not appear - until you switch to another project or restart \QC. - - \section1 Using the Android Emulator - - To run your application on the Android Emulator, you must have an Android - virtual device (AVD). For more information about creating a new one, see - \l{Creating a New AVD}. If you run an application without a device connected to the - development PC and without an AVD specified, \QC asks you to add an AVD. - - \note The Android Emulator has a bug that prevents it from starting on some - systems. If the Android Emulator does not start, you can try starting it - manually by running the following commands: - - \badcode - cd /emulator - ./emulator -avd - \endcode - - For more information, see \l{Start the emulator from the command line}. + \l{avdmanager} or the Android Studio's native AVD Manager UI. \section1 Debugging on Android Devices diff --git a/doc/qtcreator/src/android/creator-projects-settings-run-android.qdocinc b/doc/qtcreator/src/android/creator-projects-settings-run-android.qdocinc index b5f781c87e1..3c370103907 100644 --- a/doc/qtcreator/src/android/creator-projects-settings-run-android.qdocinc +++ b/doc/qtcreator/src/android/creator-projects-settings-run-android.qdocinc @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Creator documentation. @@ -34,19 +34,19 @@ A default set of Android Activity manager (am) start options is applied when starting applications. You can specify additional start options in the - \uicontrol {Activity manager start options} field. However, if the default + \uicontrol {Activity manager start arguments} field. However, if the default options conflict with the added options, the application might not start. The default arguments for the Activity manager for a normal run: \badcode - am start -n org.qtproject.example.notification/org.qtproject.qt5.android.bindings.QtActivity + am start -n / \endcode The default arguments for the Activity manager for the debugger mode: \badcode - am start -n org.qtproject.example.notification/org.qtproject.qt5.android.bindings.QtActivity -D + am start -n / -D \endcode For example, to run the application as a particular user, enter the start @@ -54,18 +54,20 @@ \image qtcreator-android-run-settings.png - You can specify shell commands to run before the application is started and - after it is quit. For example, enter the following commands to unlock the - screen and to switch to the user account \c 10 on the device before running - the application: + You can specify shell commands to run before the application is started + and after it is quit. For example, enter the following commands into + \uicontrol{Pre-launch on-device shell commands} to unlock the screen and + to switch to the user account \c 10 on the device before running the + application: \code input keyevent 82 am switch-user 10 \endcode - Enter the following commands to switch back to the default user, \c 0, and - to unlock the screen after the application is quit: + Enter the following commands into + \uicontrol{Post-quit on-device shell commands} to switch back to the + default user, \c 0, and to unlock the screen after the application is quit: \code am switch-user 0 diff --git a/doc/qtcreator/src/android/deploying-android.qdoc b/doc/qtcreator/src/android/deploying-android.qdoc index 734d8681936..7a97cf2b397 100644 --- a/doc/qtcreator/src/android/deploying-android.qdoc +++ b/doc/qtcreator/src/android/deploying-android.qdoc @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2020 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Creator documentation. @@ -52,7 +52,8 @@ \note Since \QC 4.12, Ministro is not supported. - To specify settings for application packages, select \uicontrol Projects > + To \l{Specifying Settings for Packages}{specify settings} for application + packages, select \uicontrol Projects > \uicontrol Build > \uicontrol {Build Android APK} > \uicontrol Details. \if defined(qtcreator) @@ -64,7 +65,7 @@ Because bundling applications as APK packages is not trivial, Qt 5 provides a deployment tool called \c androiddeployqt. - When you deploy an application using a \uicontrol {Qt for Android Kit}, \QC uses + When you deploy an application using a \e {Qt for Android kit}, \QC uses the \c androiddeployqt tool to create the necessary files and to bundle them into an APK: @@ -100,41 +101,58 @@ To view the packages that the \c androiddeployqt tool created, select the \uicontrol {Open package location after build} check box. - The packages are deployed on the connected Android devices. To switch the - device used as a default device for the selected kit, select - \uicontrol Projects > \uicontrol Run > \uicontrol {Deploy to Android Device} - > \uicontrol {Reset Default Devices}. The setting applies until you restart \QC. - For more information, see \l{Selecting Android Devices}. + \section2 Specifying Deployment Settings - For more information about the \c androiddeployqt tool, see - \l{Deploying an Application on Android}. + The available deployment settings are listed in the \uicontrol Method field. + To add deployment methods for a project, select \uicontrol Add. + + \image qtcreator-android-deployment-settings.png "Deployment settings" + + To rename the current deployment method, select \uicontrol Rename. + + To remove the current deployment method, select \uicontrol Remove. + + The packages are deployed on the Android device that you select in the + \l{Building for Multiple Platforms}{kit selector}. To add devices, select + \uicontrol Manage. + + For more information about specifying additional start options for + applications, see \l{Specifying Run Settings for Android Devices}. + + To remove previously installed files from the device, select + \uicontrol {Uninstall the existing app before deployment}. + + To install a pre-built APK, such as a 3rd-party application to a device, + select \uicontrol {Install an APK File}. \section2 Specifying Settings for Packages - You can specify settings for the \c androiddeployqt tool in \QC and in the - project .pro file. To specify settings in \QC, select \uicontrol Projects > - \uicontrol Build > \uicontrol {Build Android APK} > \uicontrol Details. + To specify settings for the \c androiddeployqt tool, select + \uicontrol Projects > \uicontrol Build > \uicontrol {Build Android APK} > + \uicontrol Details. - \image qtcreator-android-deploy-configurations.png "Deploy configurations" + \image qtcreator-android-build-apk-step.png "Build Android APK step" - The anddroiddeployqt tool uses the information in the project .pro file to - create APKs. For more information about the qmake variables - that you can set in the .pro file to tailor the APK, see - \l{Deploying an Application on Android}. + The \c androiddeployqt tool uses the configuration information to + create APKs. For more information about the available options, see + \l{androiddeployqt}. - You can view information about what the anddroiddeployqt tool is doing in + You can view information about what the \c androiddeployqt tool is doing in the \uicontrol {Compile Output} pane. To view additional information, select the \uicontrol {Verbose output} check box. + Select \uicontrol {Add debug server} to include the debug server binary + into a package. + \section3 Selecting API Level - In the \uicontrol {Android build SDK} field, you can select the API level to use - for building the application. Usually, you should select the newest API - level available. + In the \uicontrol {Android build platform SDK} field, you can select the + API level to use for building the application. Usually, you should select + the highest API level available. - \note For Qt 5.12.0 to 5.12.5 and Qt 5.13.0 to 5.13.1, Android build SDK 28 should - be used. For recent versions than the latter, build SDK 29, or the most recent - should be used. + \note For Qt 5.12.0 to 5.12.5 and Qt 5.13.0 to 5.13.1, Android build + platform SDK 28 should be used. For more recent versions than Qt 5.13.1, + build platform SDK 29 or the most recent one should be used. This field does not specify the minimum supported API level nor the target API level, which you can specify in the Android manifest. See @@ -146,7 +164,7 @@ For testing the application locally, use the APK format, because the package can be uploaded directly to the device and run. For distribution to the Google Play store, create an AAB by selecting - the \uicontrol {Build .aab (Android App Bundle)} check box. + the \uicontrol {Build Android App Bundle (*.aab)} check box. When building with CMake, you can view the selected ABIs in the \uicontrol {Initial CMake parameters} field in the \uicontrol CMake section. @@ -253,11 +271,11 @@ \section1 Editing Manifest Files - You can use the qmake variables to specify all - the settings you need for the \c androiddeployqt tool and you do not need an - Android manifest file unless you need to specify Android specific settings - like the application's icon. Also, the manifest file is needed if you want - to publish the package in the Play Store. + You can use the configuration options to specify all the settings you need + for the \c androiddeployqt tool. You only need an Adroid manifest file + to specify Android-specific settings, such as the application icon. + However, the manifest file is needed when you want to publish the package + in the Play Store. \section2 Package Names @@ -384,7 +402,7 @@ \li Locks the orientation to its current rotation, whatever that is. \endtable - \section2 Supported Resolutions + \section2 Icons and Splash Screens You can set different images to be shown as application icons and splash screens on low, medium, high, and extra high DPI displays. The following @@ -399,6 +417,36 @@ \li Extra-extra-extra-high-density (XXXHDPI): ~640dpi \endlist + Specify settings for icons in the \uicontrol {Application icon} tab. Select + the image with the highest resolution as the \uicontrol {Master icon}. + \QC resizes the icon and sets versions of it to be shown on low, medium, + high, and extra high DPI displays, as needed. Alternatively, set the icons + for each resolution separately. + + \image qtcreator-android-manifest-editor-app-icon.png "Application icons in Android Manifest Editor" + + Specify settings for splash screens in the \uicontrol {Splash screen} tab. + Select images to display as splash screens depending on the device + orientation and screen resolution. + + \image qtcreator-android-manifest-editor-splash-screen.png "Splash screens in Android Manifest Editor" + + By default, the splash screen is hidden automatically + when an activity is drawn. To keep it visible until + \l{QNativeInterface::QAndroidApplication::hideSplashScreen()} is + called, select the \uicontrol {Sticky splash screen} check box. + + In \uicontrol {Image show mode}, select whether to center the splash screen + on the device display or scale it to fill the display. + + Set a background color in \uicontrol {Background color}. + + Select the images with the highest resolution as the + \uicontrol {Master image}, \uicontrol {Portrait master image}, + and \uicontrol {Landscape master image}. + + Select \uicontrol {Clear All} to reset all settings or remove all images. + \section2 Android Manifest Editor If you use qmake as the build system, you can create an Android manifest @@ -447,22 +495,11 @@ \li In the \uicontrol {Screen orientation} field, select the option for determining \l{Screen Orientation}{screen orientation}. - \li In \uicontrol {Application icon}, select an image with the highest - \l{Supported Resolutions}{resolution} as the \uicontrol {Master icon}. - \QC resizes the icon and sets versions of it to be shown on low, - medium, high, and extra high DPI displays, as needed. Alternatively, - set the icons for each resolution separately. - - \image qtcreator-android-manifest-editor-app-icon.png "Application icons in Android Manifest Editor" + \li In \uicontrol {Application icon}, specify images to use as application + icons depending on screen resolution. \li In \uicontrol {Splash screen}, select images to display as splash - screens depending on the device orientation. You can set different images - to be shown on low, medium, high, and extra high DPI displays. By default, - the splash screen is hidden automatically when an activity is drawn. To keep - it visible until \l{QtAndroid::hideSplashScreen()} is called, select the - \uicontrol {Sticky splash screen} check box. - - \image qtcreator-android-manifest-editor-splash-screen.png "Splash screens in Android Manifest Editor" + screens depending on the screen orientation and resolution. \li In \uicontrol {Android services}, select \uicontrol Add to add a service. You must enter at least a service class name for a new service. If you select diff --git a/doc/qtcreator/src/overview/creator-only/creator-mobile-targets.qdoc b/doc/qtcreator/src/overview/creator-only/creator-mobile-targets.qdoc index bf08dceaff3..70ff6464d68 100644 --- a/doc/qtcreator/src/overview/creator-only/creator-mobile-targets.qdoc +++ b/doc/qtcreator/src/overview/creator-only/creator-mobile-targets.qdoc @@ -56,11 +56,11 @@ Qt applications for Android are compiled as \c {shared objects} that are loaded by a Java launcher that is part of Qt. This is totally transparent to users. As Qt is composed of libraries - referencing each other, Qt 4 applications are only supported on - Android version 1.6, or later, and Qt 5 applications on version - 4.1 (API level 16), or later. You must install a Qt version - targeting Android and the Android SDK and NDK to develop for - Android devices. + referencing each other, Qt 5 applications are only supported on + Android version 4.1 (API level 16), or later, and Qt 6 applications + on Android version 6.0 (API level 23), or later. You must install a + Qt version targeting Android and the Android SDK and NDK to develop + for Android devices. \if defined(qtcreator) \li \l{Connecting Bare Metal Devices} diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-building.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-building.qdoc index b5a3b750e40..a16d5bc93de 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-building.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-building.qdoc @@ -55,7 +55,8 @@ \li Click the \uicontrol {Build and Run Kit Selector} icon (1) or select \uicontrol Build > \uicontrol {Open Build and Run Kit Selector} to select the - build and run \l{glossary-buildandrun-kit}{kit}. + build and run \l{glossary-buildandrun-kit}{kit} or an + \l{Managing Android Virtual Devices (AVD)}{Android device}. \image qtcreator-kit-selector.png "Kit selector" From d177dab95d38b86a224c70d7dcf62f105d9be639 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Mon, 1 Nov 2021 16:49:34 +0100 Subject: [PATCH 20/48] Doc: Describe exporting and importing color schemes ...in Tools > Options > Text Editor > Fonts & Color. Also describe the new formatting options for code elements. Task-number: QTCREATORBUG-26278 Change-Id: I41540658ec13e7fdcbba9492840c99316fbe1251 Reviewed-by: Artem Sokolovskii Reviewed-by: David Schulz --- .../images/qtcreator-font-colors.png | Bin 16917 -> 16366 bytes .../images/qtcreator-import-color-scheme.png | Bin 0 -> 3151 bytes .../editors/creator-editors-options-text.qdoc | 23 ++++++++++++++++++ 3 files changed, 23 insertions(+) create mode 100644 doc/qtcreator/images/qtcreator-import-color-scheme.png diff --git a/doc/qtcreator/images/qtcreator-font-colors.png b/doc/qtcreator/images/qtcreator-font-colors.png index 8dfb7451e5a02c0124e0334f5c286cadb1592197..1cfe802c33ed56d95dcbc2c06649f94c242e8ef8 100644 GIT binary patch literal 16366 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ૄq1+IN&CtzNd9%V)M! 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 L>gTe~DWM4fy3?nh literal 16917 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 RfA|Da^n~bqfFh diff --git a/doc/qtcreator/images/qtcreator-import-color-scheme.png b/doc/qtcreator/images/qtcreator-import-color-scheme.png new file mode 100644 index 0000000000000000000000000000000000000000..4c46359260612d3d4d19573733ec445709a9e913 GIT binary patch literal 3151 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 literal 0 HcmV?d00001 diff --git a/doc/qtcreator/src/editors/creator-editors-options-text.qdoc b/doc/qtcreator/src/editors/creator-editors-options-text.qdoc index 307728cfc34..d6448754483 100644 --- a/doc/qtcreator/src/editors/creator-editors-options-text.qdoc +++ b/doc/qtcreator/src/editors/creator-editors-options-text.qdoc @@ -85,12 +85,35 @@ The backgound of the \uicontrol Text element determines the background of the code editor. + \li In \uicontrol Font, select \uicontrol Bold or \uicontrol Italic to + format the text of the selected code element by making it bold or + italic. + + \li In \uicontrol Underline, select the color and style to use for + underlining code elements. + \endlist When you copy code from \QC, it is copied in both plain text and HTML format. The latter makes sure that syntax highlighting is preserved when pasting to a rich-text editor. + \section2 Exporting and Importing Color Schemes + + To share color schemes with others, export and import them as XML files. + To export a color scheme, select \uicontrol Tools > \uicontrol Options > + \uicontrol {Text Editor} > \uicontrol {Fonts & Color} > \uicontrol Export, + and then select the filename and location for the XML file. + + To import a color scheme, select \uicontrol Import, and then select the XML + file to import. In the \uicontrol {Import Color Scheme} dialog, enter a name + for the color scheme in \uicontrol {Color scheme name}: + + \image qtcreator-import-color-scheme.png "Import Color Scheme dialog" + + When you select \uicontrol OK, the color scheme is added to the list of + color schemes in the \uicontrol {Fonts & Color} tab. + \section2 File Encoding To define the default file encoding, select \uicontrol Tools > From f48c7f4df69b0dac10f2db4e7ab7cfcf6e2da5ad Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Mon, 1 Nov 2021 15:59:56 +0100 Subject: [PATCH 21/48] Doc: Update Qt Widget based application tutorial - Describe new wizard dialogs - Update screenshots Task-number: QTCREATORBUG-26278 Change-Id: I66407a2f799e05aa1d01e9c9d1ddd509ab07cadb Reviewed-by: Friedemann Kleint --- .../images/qtcreator-add-resource-wizard.png | Bin 16369 -> 18218 bytes ...new-qt-gui-application-translationfile.png | Bin 0 -> 12059 bytes .../qtcreator-new-qt-gui-application.png | Bin 17577 -> 18659 bytes .../src/widgets/qtdesigner-app-tutorial.qdoc | 44 ++++++++++++------ 4 files changed, 30 insertions(+), 14 deletions(-) create mode 100644 doc/qtcreator/images/qtcreator-new-qt-gui-application-translationfile.png diff --git a/doc/qtcreator/images/qtcreator-add-resource-wizard.png b/doc/qtcreator/images/qtcreator-add-resource-wizard.png index 7f35d735c1d51f2ded10cb42a68326aaad03a070..3b1b8b045e3d74137e27ec5f285ff2279493421a 100644 GIT binary patch literal 18218 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 literal 16369 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 E0F2Pb5&!@I diff --git a/doc/qtcreator/images/qtcreator-new-qt-gui-application-translationfile.png b/doc/qtcreator/images/qtcreator-new-qt-gui-application-translationfile.png new file mode 100644 index 0000000000000000000000000000000000000000..27282a68e8ad4f161bb41e88f74b3783d8e8680d GIT binary patch literal 12059 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%0Ai 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 literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-new-qt-gui-application.png b/doc/qtcreator/images/qtcreator-new-qt-gui-application.png index 6ee1705462f4d5d1d6f8ee3080eb74110fb7a09d..19d8e0c1ebc3755e0d11feffc497f435f8757463 100644 GIT binary patch literal 18659 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 p;9a%-L_a-rSd477jW!$kWx&Wt~$(699|3u(ALE literal 17577 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 UeYMeJU|?YIboFyt=akR{07CAK&Hw-a diff --git a/doc/qtcreator/src/widgets/qtdesigner-app-tutorial.qdoc b/doc/qtcreator/src/widgets/qtdesigner-app-tutorial.qdoc index a28111f574c..2dab21729ec 100644 --- a/doc/qtcreator/src/widgets/qtdesigner-app-tutorial.qdoc +++ b/doc/qtcreator/src/widgets/qtdesigner-app-tutorial.qdoc @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2020 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Creator documentation. @@ -48,8 +48,8 @@ \list 1 \li Select \uicontrol File > \uicontrol {New File or Project} > - \uicontrol Application (Qt) > \uicontrol {Qt Widgets Application} > - \uicontrol Choose. + \uicontrol {Application (Qt)} > \uicontrol {Qt Widgets Application} + > \uicontrol Choose. \image qtcreator-new-qt-gui-application.png "New File or Project dialog" @@ -60,10 +60,11 @@ \li In the \uicontrol{Name} field, type \b {TextFinder}. \li In the \uicontrol {Create in} field, enter the path for the project files. - For example, \c {C:\Qt\examples}, and then select \uicontrol{Next} (on - Windows and Linux) or \uicontrol Continue (on \macos). + For example, \c {C:\Qt\examples}. - The \uicontrol {Define Build System} dialog opens. + \li Select \uicontrol{Next} (on Windows and Linux) or + \uicontrol Continue (on \macos) to open the + \uicontrol {Define Build System} dialog. \image qtcreator-new-project-build-system-qt-gui.png "Define Build System dialog" @@ -71,7 +72,8 @@ use for building and running the project: \l qmake, \l {Setting Up CMake}{CMake}, or \l {Setting Up Qbs}{Qbs}. - The \uicontrol{Class Information} dialog opens. + \li Select \uicontrol Next or \uicontrol Continue to open the + \uicontrol{Class Information} dialog. \image qtcreator-class-info-qt-gui.png "Class Information dialog" @@ -84,16 +86,26 @@ \note The \uicontrol{Header file}, \uicontrol{Source file} and \uicontrol{Form file} fields are automatically updated to match the name of the class. - The \uicontrol {Kit Selection} dialog opens. + \li Select \uicontrol Next or \uicontrol Continue to open the + \uicontrol {Translation File} dialog. + + \image qtcreator-new-qt-gui-application-translationfile.png "Translation File dialog" + + \li In the \uicontrol Language field, you can select a language that you + plan to \l {Using Qt Linguist}{translate} the application to. This + sets up localization support for the application. You can add other + languages later by editing the project file. + + \li Select \uicontrol Next or \uicontrol Continue to open the + \uicontrol {Kit Selection} dialog. \image qtcreator-new-project-qt-versions-qt-gui.png "Kit Selection dialog" - \li Select build and run \l{glossary-buildandrun-kit}{kits} for your project, - and select \uicontrol Next or \uicontrol Continue. + \li Select build and run \l{glossary-buildandrun-kit}{kits} for your + project. - \li Select \uicontrol Next or \uicontrol Continue. - - The \uicontrol{Project Management} dialog opens. + \li Select \uicontrol Next or \uicontrol Continue to open the + \uicontrol {Project Management} dialog. \image qtcreator-new-project-summary-qt-gui.png "Project Management dialog" @@ -105,7 +117,8 @@ \note The project opens in the \uicontrol Edit mode, and these instructions are hidden. To return to these instructions, open the \uicontrol Help mode. - The TextFinder project now contains the following files: + If you selected qmake as the build system, the TextFinder project now + contains the following files: \list @@ -122,6 +135,9 @@ The .h and .cpp files come with the necessary boiler plate code. The .pro file is complete. + If you selected CMake as the build system, \QC created a CMakeLists.txt + project file for you. + \section1 Filling in the Missing Pieces Begin by designing the user interface and then move on to filling From b272d441cb794b85cf2bdaae19d087d36195a606 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Tue, 2 Nov 2021 10:00:28 +0100 Subject: [PATCH 22/48] Utils: disable multi cursor add keyboard shortcuts on macOS They work inconsistently and interfere with system shortcuts Change-Id: Ibd85483904144ca697bb372746c7999299b7b1f8 Reviewed-by: Eike Ziller --- src/libs/utils/multitextcursor.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libs/utils/multitextcursor.cpp b/src/libs/utils/multitextcursor.cpp index 3a97010fc7b..7225de9344a 100644 --- a/src/libs/utils/multitextcursor.cpp +++ b/src/libs/utils/multitextcursor.cpp @@ -27,6 +27,7 @@ #include "algorithm.h" #include "camelcasecursor.h" +#include "hostosinfo.h" #include "qtcassert.h" #include @@ -309,7 +310,7 @@ bool MultiTextCursor::handleMoveKeyEvent(QKeyEvent *e, QPlainTextEdit *edit, bool camelCaseNavigationEnabled) { - if (e->modifiers() & Qt::AltModifier) { + if (e->modifiers() & Qt::AltModifier && !Utils::HostOsInfo::isMacHost()) { QTextCursor::MoveOperation op = QTextCursor::NoMove; if (multiCursorAddEvent(e, QKeySequence::MoveToNextWord)) { op = QTextCursor::WordRight; From 75b62666941cf62621d3cc5a852f1ec7ab2e9726 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kai=20K=C3=B6hne?= Date: Fri, 29 Oct 2021 16:57:54 +0200 Subject: [PATCH 23/48] Document third-party components by their upstream name Also use a paragraph from the upstream documentation for third-party code that missed it so far. Change-Id: I2609d32eafca9810116f7a9ac2df9221541acb15 Reviewed-by: Eike Ziller Reviewed-by: Leena Miettinen --- README.md | 22 +++++++++--- .../overview/creator-acknowledgements.qdoc | 35 ++++++++++++++----- 2 files changed, 43 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index d7a702f3d7d..b30250bcc15 100644 --- a/README.md +++ b/README.md @@ -309,7 +309,10 @@ we thank the authors who made this possible: With backported/additional patches from https://code.qt.io/clang/llvm-project.git -### Reference implementation for std::experimental::optional +### Optional + + A single-header header-only library for representing optional (nullable) + objects for C++14 (and C++11 to some extent) and passing them by value. https://github.com/akrzemi1/Optional @@ -324,7 +327,9 @@ we thank the authors who made this possible: The idea and interface is based on Boost.Optional library authored by Fernando Luis Cacciola Carballal -### Implementation for std::variant +### MPark.Variant + + MPark.Variant is an implementation of C++17 std::variant for C++11/14/17. https://github.com/mpark/variant @@ -335,7 +340,11 @@ we thank the authors who made this possible: Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt) -### Implementation for std::span +### std::span implementation for C++11 and later + + A single-header implementation of C++20's std::span, conforming to the C++20 + committee draft. It is compatible with C++11, but will use newer language + features if they are available. https://github.com/tcbrindle/span @@ -395,7 +404,10 @@ we thank the authors who made this possible: IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -### SQLite, in-process library that implements a SQL database engine +### SQLite (version 3.8.10.2) + +SQLite is a C-language library that implements a small, fast, self-contained, +high-reliability, full-featured, SQL database engine. SQLite (https://www.sqlite.org) is in the Public Domain. @@ -487,7 +499,7 @@ SQLite (https://www.sqlite.org) is in the Public Domain. from Florian Loitsch which is licensed under the MIT License (see above). Copyright © 2009 Florian Loitsch -### Minitrace +### minitrace Simple C/C++ library for producing JSON traces. diff --git a/doc/qtcreator/src/overview/creator-acknowledgements.qdoc b/doc/qtcreator/src/overview/creator-acknowledgements.qdoc index 4ec9eb9ea26..2e6b71d0f76 100644 --- a/doc/qtcreator/src/overview/creator-acknowledgements.qdoc +++ b/doc/qtcreator/src/overview/creator-acknowledgements.qdoc @@ -385,7 +385,11 @@ \li \l{http://code.qt.io/cgit/clang/clang.git} \endlist - \li \b{Reference implementation for std::experimental::optional} + \li \b{Optional} + + A single-header header-only library for representing optional + (nullable) objects for C++14 (and C++11 to some extent) and passing + them by value. Copyright (C) 2011-2012 Andrzej Krzemienski @@ -404,7 +408,9 @@ \li \l{https://code.qt.io/cgit/qt-creator/qt-creator.git/tree/src/libs/3rdparty/optional} \endlist - \li \b{Implementation for std::variant} + \li \b{MPark.Variant} + + MPark.Variant is an implementation of C++17 std::variant for C++11/14/17. Copyright Michael Park, 2015-2017 @@ -419,7 +425,11 @@ \li \l{https://code.qt.io/cgit/qt-creator/qt-creator.git/tree/src/libs/3rdparty/variant} \endlist - \li \b{Implementation for std::span} + \li \b{std::span implementation for C++11 and later} + + A single-header implementation of C++20's std::span, conforming to + the C++20 committee draft. It is compatible with C++11, but will use + newer language features if they are available. Copyright Tristan Brindle, 2018 @@ -613,7 +623,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \endcode - \li \b{SQLite, an embedded database. Version 3.8.10.2}\br\br + \li \b{SQLite (version 3.8.10.2)} + + SQLite is a C-language library that implements a small, fast, + self-contained, high-reliability, full-featured, SQL database engine. The author or authors of this code dedicate any and all copyright interest in this code to the public domain. We make this dedication @@ -628,11 +641,15 @@ \li \l{https://code.qt.io/cgit/qt-creator/qt-creator.git/tree/src/libs/3rdparty/sqlite} \endlist - \li \b{three.js (license MIT)}\br - Copyright (C) 2010-2015 three.js authors\br + \li \b{three.js} + + Copyright (C) 2010-2015 three.js authors + + MIT License. + share/qtcreator/templates/wizards/projects/qmake/qtcanvas3dapplication - \li \b{OpenSSL toolkit} + \li \b{OpenSSL} The OpenSSL toolkit stays under a double license, i.e. both the conditions of the OpenSSL License and the original SSLeay license apply to the toolkit. @@ -753,7 +770,7 @@ [including the GNU Public Licence.] \endcode - \li \b{Mesa LLVMPipe, 3D graphics library} + \li \b{LLVMPipe - The Mesa 3D Graphics Library} Mesa is a 3D graphics library with an API which is very similar to that of OpenGL. The llvmpipe software renderer enables the running of OpenGL @@ -826,7 +843,7 @@ from Florian Loitsch which is licensed under the MIT License (see above). Copyright (C) 2009 Florian Loitsch - \li \b Minitrace + \li \b minitrace Simple C/C++ library for producing JSON traces. From 5f191126c1e56edc0e9327647385dbeda43aaa95 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Tue, 2 Nov 2021 13:21:36 +0100 Subject: [PATCH 24/48] Doc: Describe "Auto-save files after refactoring" option Task-number: QTCREATORBUG-26278 Change-Id: I7c9a1ead665ab3506f7cb7a8eb13fb14c5863c8d Reviewed-by: Christian Kandeler --- doc/qtcreator/src/editors/creator-code-refactoring.qdoc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/qtcreator/src/editors/creator-code-refactoring.qdoc b/doc/qtcreator/src/editors/creator-code-refactoring.qdoc index ab57bb4d8ff..d0e569543ec 100644 --- a/doc/qtcreator/src/editors/creator-code-refactoring.qdoc +++ b/doc/qtcreator/src/editors/creator-code-refactoring.qdoc @@ -43,6 +43,10 @@ code by selecting them in a context menu. For more information, see \l{Applying Refactoring Actions}. + By default, the refactored files are saved automatically. To disable + this feature, deselect \uicontrol Tools > \uicontrol Options > + \uicontrol System > \uicontrol {Auto-save files after refactoring}. + \if defined(qtcreator) \section1 Finding Symbols From 5ef4e2f5ac0971c3896de9996e159f7d1523903a Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 1 Nov 2021 14:21:03 +0200 Subject: [PATCH 25/48] QmlDesigner: Add default template to Component item in library The default template includes an "Item" child node under the component. Also added "Component 3D" item that will have a "Node" child. Task-number: QDS-5308 Change-Id: I254f18a2ec7b623d8cd4a72e6e727d0d17a1a91d Reviewed-by: Mahmoud Badri Reviewed-by: Samuel Ghinet Reviewed-by: Thomas Hartmann --- .../designercore/include/rewriterview.h | 3 ++ .../designercore/model/qmlvisualnode.cpp | 1 + .../designercore/model/rewriterview.cpp | 10 ++++++ .../designercore/model/texttomodelmerger.cpp | 2 +- .../qtquickplugin/qtquickplugin.qrc | 2 ++ .../qmldesigner/qtquickplugin/quick.metainfo | 22 ++++++++++++ .../qtquickplugin/source/component.qml | 34 +++++++++++++++++++ .../qtquickplugin/source/component3d.qml | 33 ++++++++++++++++++ 8 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 src/plugins/qmldesigner/qtquickplugin/source/component.qml create mode 100644 src/plugins/qmldesigner/qtquickplugin/source/component3d.qml diff --git a/src/plugins/qmldesigner/designercore/include/rewriterview.h b/src/plugins/qmldesigner/designercore/include/rewriterview.h index 44e804f25df..e3a4af0b758 100644 --- a/src/plugins/qmldesigner/designercore/include/rewriterview.h +++ b/src/plugins/qmldesigner/designercore/include/rewriterview.h @@ -179,6 +179,8 @@ public: void sanitizeModel(); + void setAllowComponentRoot(bool allow); + bool allowComponentRoot() const; signals: void modelInterfaceProjectUpdated(); @@ -221,6 +223,7 @@ private: //variables bool m_hasIncompleteTypeInformation = false; bool m_restoringAuxData = false; bool m_modelAttachPending = false; + bool m_allowComponentRoot = false; mutable QHash m_canonicalIntModelNode; mutable QHash m_canonicalModelNodeInt; diff --git a/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp index f26c32ad780..a580ee55495 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp @@ -249,6 +249,7 @@ static QmlObjectNode createQmlObjectNodeFromSource(AbstractView *view, QScopedPointer rewriterView(new RewriterView(RewriterView::Amend, nullptr)); rewriterView->setCheckSemanticErrors(false); rewriterView->setTextModifier(&modifier); + rewriterView->setAllowComponentRoot(true); inputModel->setRewriterView(rewriterView.data()); if (rewriterView->errors().isEmpty() && rewriterView->rootModelNode().isValid()) { diff --git a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp index 84b3678f5d5..051c449e21a 100644 --- a/src/plugins/qmldesigner/designercore/model/rewriterview.cpp +++ b/src/plugins/qmldesigner/designercore/model/rewriterview.cpp @@ -704,6 +704,16 @@ void RewriterView::sanitizeModel() }); } +void RewriterView::setAllowComponentRoot(bool allow) +{ + m_allowComponentRoot = allow; +} + +bool RewriterView::allowComponentRoot() const +{ + return m_allowComponentRoot; +} + Internal::ModelNodePositionStorage *RewriterView::positionStorage() const { return m_positionStorage.data(); diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp index 3f6a04fde47..b8b2c427692 100644 --- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp +++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp @@ -1200,7 +1200,7 @@ void TextToModelMerger::syncNode(ModelNode &modelNode, return; } - if (modelNode.isRootNode() && isComponentType(typeName)) { + if (modelNode.isRootNode() && !m_rewriterView->allowComponentRoot() && isComponentType(typeName)) { for (AST::UiObjectMemberList *iter = astInitializer->members; iter; iter = iter->next) { if (auto def = AST::cast(iter->member)) { syncNode(modelNode, def, context, differenceHandler); diff --git a/src/plugins/qmldesigner/qtquickplugin/qtquickplugin.qrc b/src/plugins/qmldesigner/qtquickplugin/qtquickplugin.qrc index 8adfb84baf2..21189d1dce3 100644 --- a/src/plugins/qmldesigner/qtquickplugin/qtquickplugin.qrc +++ b/src/plugins/qmldesigner/qtquickplugin/qtquickplugin.qrc @@ -43,6 +43,8 @@ source/texteditv2.qml source/textinput.qml source/textinputv2.qml + source/component.qml + source/component3d.qml images/column-positioner-icon.png images/column-positioner-icon-16px.png images/default-icon.png diff --git a/src/plugins/qmldesigner/qtquickplugin/quick.metainfo b/src/plugins/qmldesigner/qtquickplugin/quick.metainfo index 851d457cdc3..5ad17c372e2 100644 --- a/src/plugins/qmldesigner/qtquickplugin/quick.metainfo +++ b/src/plugins/qmldesigner/qtquickplugin/quick.metainfo @@ -446,6 +446,28 @@ MetaInfo { category: "e.Qt Quick - Component" libraryIcon: ":/qtquickplugin/images/component-icon.png" version: "2.0" + + QmlSource { source: ":/qtquickplugin/source/component.qml" } + } + } + + Type { + name: "QtQml.Component" + icon: ":/qtquickplugin/images/component-icon16.png" + + Hints { + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + } + + ItemLibraryEntry { + name: "Component 3D" + category: "Qt Quick 3D Component" + libraryIcon: ":/qtquickplugin/images/component-icon.png" + version: "2.0" + requiredImport: "QtQuick3D" + + QmlSource { source: ":/qtquickplugin/source/component3d.qml" } } } diff --git a/src/plugins/qmldesigner/qtquickplugin/source/component.qml b/src/plugins/qmldesigner/qtquickplugin/source/component.qml new file mode 100644 index 00000000000..1a3b2770bb1 --- /dev/null +++ b/src/plugins/qmldesigner/qtquickplugin/source/component.qml @@ -0,0 +1,34 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +import QtQuick 2.0 + +Component { + Item { + id: componentRoot + width: 100 + height: 100 + } +} diff --git a/src/plugins/qmldesigner/qtquickplugin/source/component3d.qml b/src/plugins/qmldesigner/qtquickplugin/source/component3d.qml new file mode 100644 index 00000000000..474497e54b7 --- /dev/null +++ b/src/plugins/qmldesigner/qtquickplugin/source/component3d.qml @@ -0,0 +1,33 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick3D 6.0 + +Component { + Node { + id: componentRoot + } +} From 1d1b18ae1d370f319534b39907d9a27b539f2b09 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 1 Nov 2021 16:33:20 +0200 Subject: [PATCH 26/48] QmlDesigner: Copy main document model metainfo to inFileComponentModel This is necessary to have all component library items available when editing in-document subcomponents. Fixes: QDS-5352 Change-Id: Ib7553d8e36a5b9ece7afb3c01681148f6268e7f2 Reviewed-by: Samuel Ghinet Reviewed-by: Mahmoud Badri Reviewed-by: Qt CI Bot Reviewed-by: Thomas Hartmann --- .../qmldesigner/components/integration/designdocument.cpp | 1 + src/plugins/qmldesigner/designercore/include/model.h | 1 + src/plugins/qmldesigner/designercore/model/model.cpp | 5 +++++ 3 files changed, 7 insertions(+) diff --git a/src/plugins/qmldesigner/components/integration/designdocument.cpp b/src/plugins/qmldesigner/components/integration/designdocument.cpp index 2659ffbbd75..b2610b0982a 100644 --- a/src/plugins/qmldesigner/components/integration/designdocument.cpp +++ b/src/plugins/qmldesigner/components/integration/designdocument.cpp @@ -166,6 +166,7 @@ Model* DesignDocument::createInFileComponentModel() { Model *model = Model::create("QtQuick.Item", 1, 0); model->setFileUrl(m_documentModel->fileUrl()); + model->setMetaInfo(m_documentModel->metaInfo()); return model; } diff --git a/src/plugins/qmldesigner/designercore/include/model.h b/src/plugins/qmldesigner/designercore/include/model.h index 8a1e0b7abbd..cb453a57566 100644 --- a/src/plugins/qmldesigner/designercore/include/model.h +++ b/src/plugins/qmldesigner/designercore/include/model.h @@ -88,6 +88,7 @@ public: MetaInfo metaInfo(); NodeMetaInfo metaInfo(const TypeName &typeName, int majorVersion = -1, int minorVersion = -1); bool hasNodeMetaInfo(const TypeName &typeName, int majorVersion = -1, int minorVersion = -1); + void setMetaInfo(const MetaInfo &metaInfo); void attachView(AbstractView *view); void detachView(AbstractView *view, ViewNotification emitDetachNotify = NotifyView); diff --git a/src/plugins/qmldesigner/designercore/model/model.cpp b/src/plugins/qmldesigner/designercore/model/model.cpp index eda7b13c5c2..5f211b86056 100644 --- a/src/plugins/qmldesigner/designercore/model/model.cpp +++ b/src/plugins/qmldesigner/designercore/model/model.cpp @@ -1606,6 +1606,11 @@ bool Model::hasNodeMetaInfo(const TypeName &typeName, int majorVersion, int mino return metaInfo(typeName, majorVersion, minorVersion).isValid(); } +void Model::setMetaInfo(const MetaInfo &metaInfo) +{ + d->setMetaInfo(metaInfo); +} + NodeMetaInfo Model::metaInfo(const TypeName &typeName, int majorVersion, int minorVersion) { return NodeMetaInfo(metaInfoProxyModel(), typeName, majorVersion, minorVersion); From d3345320c77027e697e1ce03bfc93f5d4c70013a Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 2 Nov 2021 16:22:34 +0100 Subject: [PATCH 27/48] QmlDesigner: Squash warning MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp:497:51: warning: ‘QDir& QDir::operator=(const QString&)’ is deprecated: Use QDir::setPath() instead [-Wdeprecated-declarations] 497 | m_filePathDir = {newDir.absoluteFilePath()}; | ^ In file included from /data/dev/qt-5/qtbase/include/QtCore/qdir.h:1, from /data/dev/qt-5/qtbase/include/QtCore/QDir:1, from src/plugins/qmldesigner/designercore/include/subcomponentmanager.h:39, from src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp:26: /data/dev/qt-5/qtbase/src/corelib/io/qdir.h:110:11: note: declared here 110 | QDir &operator=(const QString &path); | ^~~~~~~~ Change-Id: I307e5243a3334257ea4285b23ef0e0453e1e17e8 Reviewed-by: Thomas Hartmann --- .../qmldesigner/designercore/metainfo/subcomponentmanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp b/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp index 63185d8dfb0..bc45647b605 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/subcomponentmanager.cpp @@ -494,7 +494,7 @@ void SubComponentManager::update(const QUrl &filePath, const QList &impo if (!filePath.isEmpty()) { const QString file = filePath.toLocalFile(); newDir = QFileInfo(QFileInfo(file).path()); - m_filePathDir = {newDir.absoluteFilePath()}; + m_filePathDir.setPath(newDir.absoluteFilePath()); } m_filePath = filePath; From 426fde79d6b920d4ccbc0c90659633e1c893e826 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Tue, 2 Nov 2021 14:21:50 +0100 Subject: [PATCH 28/48] LanguageClient: support semanticTokens/refresh Fixes: QTCREATORBUG-26499 Change-Id: Icd5879609bb856797fa223394357a1f15554d2cf Reviewed-by: Christian Kandeler Reviewed-by: Qt CI Bot --- .../clientcapabilities.h | 24 +++++++++++++++++++ src/libs/languageserverprotocol/jsonkeys.h | 1 + .../languageserverprotocol/semantictokens.cpp | 4 ++++ .../languageserverprotocol/semantictokens.h | 9 +++++++ .../clangcodemodel/test/clangdtests.cpp | 2 +- src/plugins/languageclient/client.cpp | 8 +++++++ .../languageclient/languageclientmanager.cpp | 1 + .../semantichighlightsupport.cpp | 22 ++++++++++++++++- .../languageclient/semantichighlightsupport.h | 6 ++++- 9 files changed, 74 insertions(+), 3 deletions(-) diff --git a/src/libs/languageserverprotocol/clientcapabilities.h b/src/libs/languageserverprotocol/clientcapabilities.h index c0bdae40319..693fc231f26 100644 --- a/src/libs/languageserverprotocol/clientcapabilities.h +++ b/src/libs/languageserverprotocol/clientcapabilities.h @@ -529,6 +529,24 @@ public: void clearSemanticTokens() { remove(semanticTokensKey); } }; +class LANGUAGESERVERPROTOCOL_EXPORT SemanticTokensWorkspaceClientCapabilities : public JsonObject +{ +public: + using JsonObject::JsonObject; + /** + * Whether the client implementation supports a refresh request sent from + * the server to the client. + * + * Note that this event is global and will force the client to refresh all + * semantic tokens currently shown. It should be used with absolute care + * and is useful for situation where a server for example detect a project + * wide change that requires such a calculation. + */ + Utils::optional refreshSupport() const { return optionalValue(refreshSupportKey); } + void setRefreshSupport(bool refreshSupport) { insert(refreshSupportKey, refreshSupport); } + void clearRefreshSupport() { remove(refreshSupportKey); } +}; + class LANGUAGESERVERPROTOCOL_EXPORT WorkspaceClientCapabilities : public JsonObject { public: @@ -601,6 +619,12 @@ public: Utils::optional configuration() const { return optionalValue(configurationKey); } void setConfiguration(bool configuration) { insert(configurationKey, configuration); } void clearConfiguration() { remove(configurationKey); } + + Utils::optional semanticTokens() const + { return optionalValue(semanticTokensKey); } + void setSemanticTokens(const SemanticTokensWorkspaceClientCapabilities &semanticTokens) + { insert(semanticTokensKey, semanticTokens); } + void clearSemanticTokens() { remove(semanticTokensKey); } }; class WindowClientClientCapabilities : public JsonObject diff --git a/src/libs/languageserverprotocol/jsonkeys.h b/src/libs/languageserverprotocol/jsonkeys.h index fa0e5d63e01..332571fb2cf 100644 --- a/src/libs/languageserverprotocol/jsonkeys.h +++ b/src/libs/languageserverprotocol/jsonkeys.h @@ -171,6 +171,7 @@ constexpr char reasonKey[] = "reason"; constexpr char redKey[] = "red"; constexpr char referencesKey[] = "references"; constexpr char referencesProviderKey[] = "referencesProvider"; +constexpr char refreshSupportKey[] = "refreshSupport"; constexpr char registerOptionsKey[] = "registerOptions"; constexpr char registrationsKey[] = "registrations"; constexpr char removedKey[] = "removed"; diff --git a/src/libs/languageserverprotocol/semantictokens.cpp b/src/libs/languageserverprotocol/semantictokens.cpp index d827136a414..fb8cc4247be 100644 --- a/src/libs/languageserverprotocol/semantictokens.cpp +++ b/src/libs/languageserverprotocol/semantictokens.cpp @@ -156,4 +156,8 @@ SemanticTokensDeltaResult::SemanticTokensDeltaResult(const QJsonValue &value) } } +SemanticTokensRefreshRequest::SemanticTokensRefreshRequest() + : Request(methodName, nullptr) +{} + } // namespace LanguageServerProtocol diff --git a/src/libs/languageserverprotocol/semantictokens.h b/src/libs/languageserverprotocol/semantictokens.h index fccfd29dcb4..cc561ec670b 100644 --- a/src/libs/languageserverprotocol/semantictokens.h +++ b/src/libs/languageserverprotocol/semantictokens.h @@ -240,4 +240,13 @@ public: constexpr static const char methodName[] = "textDocument/semanticTokens/range"; }; +class LANGUAGESERVERPROTOCOL_EXPORT SemanticTokensRefreshRequest + : public Request +{ +public: + explicit SemanticTokensRefreshRequest(); + using Request::Request; + constexpr static const char methodName[] = "workspace/semanticTokens/refresh"; +}; + } // namespace LanguageServerProtocol diff --git a/src/plugins/clangcodemodel/test/clangdtests.cpp b/src/plugins/clangcodemodel/test/clangdtests.cpp index ff69d650f39..22fd7a20c66 100644 --- a/src/plugins/clangcodemodel/test/clangdtests.cpp +++ b/src/plugins/clangcodemodel/test/clangdtests.cpp @@ -674,7 +674,7 @@ void ClangdTestHighlighting::initTestCase() m_results = results; loop.quit(); }; - connect(client(), &ClangdClient::highlightingResultsReady, handler); + connect(client(), &ClangdClient::highlightingResultsReady, &loop, handler); timer.start(10000); loop.exec(); QVERIFY(timer.isActive()); diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index 29afb0e85a0..03b75680abd 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -170,6 +170,9 @@ static ClientCapabilities generateClientCapabilities() workspaceCapabilities.setDidChangeConfiguration(allowDynamicRegistration); workspaceCapabilities.setExecuteCommand(allowDynamicRegistration); workspaceCapabilities.setConfiguration(true); + SemanticTokensWorkspaceClientCapabilities semanticTokensWorkspaceClientCapabilities; + semanticTokensWorkspaceClientCapabilities.setRefreshSupport(true); + workspaceCapabilities.setSemanticTokens(semanticTokensWorkspaceClientCapabilities); capabilities.setWorkspace(workspaceCapabilities); TextDocumentClientCapabilities documentCapabilities; @@ -1363,6 +1366,11 @@ void Client::handleMethod(const QString &method, const MessageId &id, const ICon dynamic_cast(content)->id()); response.setResult(nullptr); sendContent(response); + } else if (method == SemanticTokensRefreshRequest::methodName) { + m_tokenSupport.refresh(); + Response response(id); + response.setResult(nullptr); + sendContent(response); } else if (method == ProgressNotification::methodName) { if (Utils::optional params = dynamic_cast(content)->params()) { diff --git a/src/plugins/languageclient/languageclientmanager.cpp b/src/plugins/languageclient/languageclientmanager.cpp index c05f8df459f..63a4f1c9da5 100644 --- a/src/plugins/languageclient/languageclientmanager.cpp +++ b/src/plugins/languageclient/languageclientmanager.cpp @@ -71,6 +71,7 @@ LanguageClientManager::LanguageClientManager(QObject *parent) JsonRpcMessageHandler::registerMessageProvider(); JsonRpcMessageHandler::registerMessageProvider(); JsonRpcMessageHandler::registerMessageProvider(); + JsonRpcMessageHandler::registerMessageProvider(); connect(EditorManager::instance(), &EditorManager::editorOpened, this, &LanguageClientManager::editorOpened); connect(EditorManager::instance(), &EditorManager::documentOpened, diff --git a/src/plugins/languageclient/semantichighlightsupport.cpp b/src/plugins/languageclient/semantichighlightsupport.cpp index 11365566bac..5132cd9326a 100644 --- a/src/plugins/languageclient/semantichighlightsupport.cpp +++ b/src/plugins/languageclient/semantichighlightsupport.cpp @@ -183,6 +183,17 @@ SemanticTokenSupport::SemanticTokenSupport(Client *client) &TextEditorSettings::fontSettingsChanged, client, [this]() { updateFormatHash(); }); + QObject::connect(Core::EditorManager::instance(), + &Core::EditorManager::currentEditorChanged, + this, + &SemanticTokenSupport::onCurrentEditorChanged); +} + +void SemanticTokenSupport::refresh() +{ + m_tokens.clear(); + for (Core::IEditor *editor : Core::EditorManager::visibleEditors()) + onCurrentEditorChanged(editor); } void SemanticTokenSupport::reloadSemanticTokens(TextDocument *textDocument) @@ -224,8 +235,11 @@ void SemanticTokenSupport::updateSemanticTokens(TextDocument *textDocument) const SemanticRequestTypes supportedRequests = supportedSemanticRequests(textDocument); if (supportedRequests.testFlag(SemanticRequestType::FullDelta)) { const Utils::FilePath filePath = textDocument->filePath(); - const QString &previousResultId = m_tokens.value(filePath).tokens.resultId().value_or(QString()); + const VersionedTokens versionedToken = m_tokens.value(filePath); + const QString &previousResultId = versionedToken.tokens.resultId().value_or(QString()); if (!previousResultId.isEmpty()) { + if (m_client->documentVersion(filePath) == versionedToken.version) + return; SemanticTokensDeltaParams params; params.setTextDocument(TextDocumentIdentifier(DocumentUri::fromFilePath(filePath))); params.setPreviousResultId(previousResultId); @@ -325,6 +339,12 @@ void SemanticTokenSupport::updateFormatHash() rehighlight(); } +void SemanticTokenSupport::onCurrentEditorChanged(Core::IEditor *editor) +{ + if (auto textEditor = qobject_cast(editor)) + updateSemanticTokens(textEditor->textDocument()); +} + void SemanticTokenSupport::setTokenTypesMap(const QMap &tokenTypesMap) { m_tokenTypesMap = tokenTypesMap; diff --git a/src/plugins/languageclient/semantichighlightsupport.h b/src/plugins/languageclient/semantichighlightsupport.h index 1a90101b3e8..084b3c1058a 100644 --- a/src/plugins/languageclient/semantichighlightsupport.h +++ b/src/plugins/languageclient/semantichighlightsupport.h @@ -36,6 +36,8 @@ #include +namespace Core { class IEditor; } + namespace LanguageClient { class Client; @@ -62,11 +64,12 @@ void applyHighlight(TextEditor::TextDocument *doc, } // namespace SemanticHighligtingSupport -class SemanticTokenSupport +class SemanticTokenSupport : public QObject { public: explicit SemanticTokenSupport(Client *client); + void refresh(); void reloadSemanticTokens(TextEditor::TextDocument *doc); void updateSemanticTokens(TextEditor::TextDocument *doc); void rehighlight(); @@ -94,6 +97,7 @@ private: void highlight(const Utils::FilePath &filePath); void updateFormatHash(); void currentEditorChanged(); + void onCurrentEditorChanged(Core::IEditor *editor); Client *m_client = nullptr; From c13d828c991349842bc4d2544585196edb684421 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Mon, 1 Nov 2021 23:42:55 +0100 Subject: [PATCH 29/48] Remove unneeded includes of QProcess Change-Id: I017e020c8b2a53d6f4a2422a0a0856044e768247 Reviewed-by: Qt CI Bot Reviewed-by: hjk --- src/plugins/android/androidrunner.h | 3 +-- src/plugins/cppeditor/generatedcodemodelsupport.h | 1 - src/plugins/ios/iostoolhandler.h | 1 - src/plugins/languageclient/client.h | 1 - src/plugins/qbsprojectmanager/qbssession.h | 2 +- .../qmldesigner/designercore/instances/baseconnectionmanager.h | 2 -- .../designercore/instances/nodeinstanceserverproxy.h | 3 +-- src/plugins/qtsupport/qscxmlcgenerator.h | 2 -- src/plugins/qtsupport/uicgenerator.h | 2 -- 9 files changed, 3 insertions(+), 14 deletions(-) diff --git a/src/plugins/android/androidrunner.h b/src/plugins/android/androidrunner.h index 2dd8e9e4553..f2ae4c5ca04 100644 --- a/src/plugins/android/androidrunner.h +++ b/src/plugins/android/androidrunner.h @@ -32,10 +32,9 @@ #include #include -#include #include #include -#include +#include namespace Android { namespace Internal { diff --git a/src/plugins/cppeditor/generatedcodemodelsupport.h b/src/plugins/cppeditor/generatedcodemodelsupport.h index f4e94acbf20..918b017a340 100644 --- a/src/plugins/cppeditor/generatedcodemodelsupport.h +++ b/src/plugins/cppeditor/generatedcodemodelsupport.h @@ -33,7 +33,6 @@ #include #include -#include #include namespace Core { class IEditor; } diff --git a/src/plugins/ios/iostoolhandler.h b/src/plugins/ios/iostoolhandler.h index cc17b526a29..5860f5333e6 100644 --- a/src/plugins/ios/iostoolhandler.h +++ b/src/plugins/ios/iostoolhandler.h @@ -31,7 +31,6 @@ #include #include #include -#include namespace Ios { namespace Internal { diff --git a/src/plugins/languageclient/client.h b/src/plugins/languageclient/client.h index 7d433ee828b..1465dabad8b 100644 --- a/src/plugins/languageclient/client.h +++ b/src/plugins/languageclient/client.h @@ -58,7 +58,6 @@ #include #include -#include #include #include diff --git a/src/plugins/qbsprojectmanager/qbssession.h b/src/plugins/qbsprojectmanager/qbssession.h index d9775b6f0bf..8829085f9df 100644 --- a/src/plugins/qbsprojectmanager/qbssession.h +++ b/src/plugins/qbsprojectmanager/qbssession.h @@ -31,7 +31,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/plugins/qmldesigner/designercore/instances/baseconnectionmanager.h b/src/plugins/qmldesigner/designercore/instances/baseconnectionmanager.h index 58588542f7f..2d144777a5e 100644 --- a/src/plugins/qmldesigner/designercore/instances/baseconnectionmanager.h +++ b/src/plugins/qmldesigner/designercore/instances/baseconnectionmanager.h @@ -27,8 +27,6 @@ #include "connectionmanagerinterface.h" -#include - #include QT_BEGIN_NAMESPACE diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h index 7233038b8e2..566c201c9b4 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceserverproxy.h @@ -27,10 +27,9 @@ #include "nodeinstanceserverinterface.h" -#include -#include #include #include +#include #include QT_BEGIN_NAMESPACE diff --git a/src/plugins/qtsupport/qscxmlcgenerator.h b/src/plugins/qtsupport/qscxmlcgenerator.h index 99f7234af33..7ab98b3ad74 100644 --- a/src/plugins/qtsupport/qscxmlcgenerator.h +++ b/src/plugins/qtsupport/qscxmlcgenerator.h @@ -29,8 +29,6 @@ #include #include -#include - namespace QtSupport { class QScxmlcGenerator : public ProjectExplorer::ProcessExtraCompiler diff --git a/src/plugins/qtsupport/uicgenerator.h b/src/plugins/qtsupport/uicgenerator.h index 37c3a273b0c..b879e3d3267 100644 --- a/src/plugins/qtsupport/uicgenerator.h +++ b/src/plugins/qtsupport/uicgenerator.h @@ -28,8 +28,6 @@ #include #include -#include - namespace QtSupport { class UicGenerator : public ProjectExplorer::ProcessExtraCompiler From 7e614b599e017a8200b7a78df93eb0500cc599a4 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 2 Nov 2021 13:23:20 +0100 Subject: [PATCH 30/48] CppEditor: Transform deprecated -gcc-toolchain option See https://reviews.llvm.org/D108494. Change-Id: I85b2a0ea077d2a622fac16bda009a7ee71da0e90 Reviewed-by: Christian Stenger --- src/plugins/cppeditor/compileroptionsbuilder.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/plugins/cppeditor/compileroptionsbuilder.cpp b/src/plugins/cppeditor/compileroptionsbuilder.cpp index 09f71fa93fd..e80de33f2b4 100644 --- a/src/plugins/cppeditor/compileroptionsbuilder.cpp +++ b/src/plugins/cppeditor/compileroptionsbuilder.cpp @@ -791,6 +791,7 @@ void CompilerOptionsBuilder::evaluateCompilerFlags() bool containsDriverMode = false; bool skipNext = false; bool nextIsTarget = false; + bool nextIsGccToolchain = false; const QStringList allFlags = m_projectPart.extraCodeModelFlags + m_projectPart.compilerFlags; for (const QString &option : allFlags) { if (skipNext) { @@ -802,6 +803,11 @@ void CompilerOptionsBuilder::evaluateCompilerFlags() m_explicitTarget = option; continue; } + if (nextIsGccToolchain) { + nextIsGccToolchain = false; + m_compilerFlags.flags.append("--gcc-toolchain=" + option); + continue; + } if (userBlackList.contains(option)) continue; @@ -833,6 +839,11 @@ void CompilerOptionsBuilder::evaluateCompilerFlags() continue; } + if (option == "-gcc-toolchain") { + nextIsGccToolchain = true; + continue; + } + if (option == includeUserPathOption || option == includeSystemPathOption || option == includeUserPathOptionWindows) { skipNext = true; From ad8a04f410e7293bba80c9c02640739f92588deb Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 3 Nov 2021 09:43:17 +0100 Subject: [PATCH 31/48] Add changes file for 5.0.3 Change-Id: I3fb115586f2207840da2f884c6451101190078e7 Reviewed-by: Leena Miettinen --- dist/changes-5.0.3.md | 56 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 dist/changes-5.0.3.md diff --git a/dist/changes-5.0.3.md b/dist/changes-5.0.3.md new file mode 100644 index 00000000000..2c8f9d5bd14 --- /dev/null +++ b/dist/changes-5.0.3.md @@ -0,0 +1,56 @@ +Qt Creator 5.0.3 +================ + +Qt Creator version 5.0.3 contains bug fixes. + +The most important changes are listed in this document. For a complete list of +changes, see the Git log for the Qt Creator sources that you can check out from +the public Git repository. For example: + + git clone git://code.qt.io/qt-creator/qt-creator.git + git log --cherry-pick --pretty=oneline origin/v5.0.2..v5.0.3 + +Editing +------- + +### QML + +* Fixed possible crash on shutdown + +### Image Viewer + +* Fixed crash when opening invalid movie (QTCREATORBUG-26377) + +Projects +-------- + +### qmake + +* Fixed handling of `QMAKE_EXTRA_COMPILERS` (QTCREATORBUG-26323) + +Platforms +--------- + +### macOS + +* Fixed crash when opening qmake projects on ARM Macs (QTBUG-97085) + +### Android + +* Fixed issue in installation step with qmake projects (QTCREATORBUG-26357) + +Credits for these changes go to: +-------------------------------- +Assam Boudjelthia +Christian Kandeler +Eike Ziller +Henning Gruendl +Jaroslaw Kobus +Johanna Vanhatapio +Jörg Bornemann +Kai Köhne +Kaj Grönholm +Leena Miettinen +Robert Löhning +Thomas Hartmann +Tim Jenssen From f4701d2bd44e8f4095a375e81848e5e920128514 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Wed, 13 Oct 2021 10:53:58 +0300 Subject: [PATCH 32/48] EditorManager: Remove outdated TODO Change-Id: I8c4632985ba9ec9bc2a4efa3754d50035e6b29d3 Reviewed-by: Eike Ziller --- src/plugins/coreplugin/editormanager/editormanager.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index 7944c882853..df1cc400931 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -2268,7 +2268,6 @@ void EditorManagerPrivate::vcsOpenCurrentEditor() return; if (!versionControl->vcsOpen(document->filePath())) { - // TODO: wrong dialog parent QMessageBox::warning(ICore::dialogParent(), tr("Cannot Open File"), tr("Cannot open the file for editing with VCS.")); } From b6228eb182a083685601658a1d585f363e52d3e6 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 3 Nov 2021 14:33:54 +0100 Subject: [PATCH 33/48] Fix signal slot connection QtcProcess isn't derived from QProcess anymore. Change-Id: I6c92163cc0bb73dc8e350ffa05ecbb5a25a88f9a Reviewed-by: Orgad Shaneh --- src/plugins/git/gitclient.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index f12eb5915b1..1e4ed5346ea 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -2598,7 +2598,7 @@ bool GitClient::tryLauchingGitK(const Environment &env, process->start(); success = process->waitForStarted(); if (success) - connect(process, &QtcProcess::finished, process, &QProcess::deleteLater); + connect(process, &QtcProcess::finished, process, &QObject::deleteLater); else delete process; } else { From 0de09fe3a3da4a0a74788644c66f8a41a252c07f Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Mon, 1 Nov 2021 17:19:43 +0100 Subject: [PATCH 34/48] Android: Enable manual adding of NDKs v22+ Don't enforce the presence of a "platforms" subdirectory if the NDK is of version 22 or higher. The last NDK version with that directory is 21. Change-Id: Ib431e7db4521533206304d252dcf93b7ea6169e5 Reviewed-by: Assam Boudjelthia --- src/plugins/android/androidconfigurations.cpp | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp index 6377ee73ee1..25862d4fc1f 100644 --- a/src/plugins/android/androidconfigurations.cpp +++ b/src/plugins/android/androidconfigurations.cpp @@ -840,11 +840,23 @@ QStringList AndroidConfig::getAbis(const QString &device) bool AndroidConfig::isValidNdk(const QString &ndkLocation) const { auto ndkPath = Utils::FilePath::fromUserInput(ndkLocation); - const FilePath ndkPlatformsDir = ndkPath.pathAppended("platforms"); - return ndkPath.exists() && ndkPath.pathAppended("toolchains").exists() - && ndkPlatformsDir.exists() && !ndkPlatformsDir.toString().contains(' ') - && !ndkVersion(ndkPath).isNull(); + if (!ndkPath.exists()) + return false; + + if (!ndkPath.pathAppended("toolchains").exists()) + return false; + + const QVersionNumber version = ndkVersion(ndkPath); + if (ndkVersion(ndkPath).isNull()) + return false; + + const FilePath ndkPlatformsDir = ndkPath.pathAppended("platforms"); + if (version.majorVersion() <= 22 + && (!ndkPlatformsDir.exists() || ndkPlatformsDir.toString().contains(' '))) + return false; // TODO: Adapt code that assumes the presence of a "platforms" folder + + return true; } QString AndroidConfig::bestNdkPlatformMatch(int target, const BaseQtVersion *qtVersion) const From a759a4e8da06e466baeeed633396850352dd7099 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 3 Nov 2021 15:07:16 +0100 Subject: [PATCH 35/48] Plugin wizard: Make github workflow work with Qt 5 and 6 The new default build of Qt Creator is Qt 6 based, so we need to make sure that that actually works. Change-Id: I6195f9d46cd020175daf8bc4caaa003fa7ae2b52 Reviewed-by: Cristian Adam --- .../github_workflows_build_cmake.yml | 39 ++++++++++++++----- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/share/qtcreator/templates/wizards/qtcreatorplugin/github_workflows_build_cmake.yml b/share/qtcreator/templates/wizards/qtcreatorplugin/github_workflows_build_cmake.yml index 18ba6416392..b50b67e9250 100644 --- a/share/qtcreator/templates/wizards/qtcreatorplugin/github_workflows_build_cmake.yml +++ b/share/qtcreator/templates/wizards/qtcreatorplugin/github_workflows_build_cmake.yml @@ -102,6 +102,7 @@ jobs: run: | set(qt_version "$ENV{QT_VERSION}") + string(REGEX MATCH "^[0-9]+" qt_version_major "${qt_version}") string(REPLACE "." "" qt_version_dotless "${qt_version}") if ("${{ runner.os }}" STREQUAL "Windows") set(url_os "windows_x86") @@ -112,45 +113,63 @@ jobs: set(url_os "linux_x64") set(qt_package_arch_suffix "gcc_64") set(qt_dir_prefix "${qt_version}/gcc_64") - set(qt_package_suffix "-Linux-RHEL_7_6-GCC-Linux-RHEL_7_6-X86_64") + if("${qt_version_major}" STREQUAL "5") + set(qt_package_suffix "-Linux-RHEL_7_6-GCC-Linux-RHEL_7_6-X86_64") + else() + set(qt_package_suffix "-Linux-RHEL_8_2-GCC-Linux-RHEL_8_2-X86_64") + endif() elseif ("${{ runner.os }}" STREQUAL "macOS") set(url_os "mac_x64") set(qt_package_arch_suffix "clang_64") - set(qt_dir_prefix "${qt_version}/clang_64") - set(qt_package_suffix "-MacOS-MacOS_10_13-Clang-MacOS-MacOS_10_13-X86_64") + if("${qt_version_major}" STREQUAL "5") + set(qt_dir_prefix "${qt_version}/clang_64") + set(qt_package_suffix "-MacOS-MacOS_10_13-Clang-MacOS-MacOS_10_13-X86_64") + else() + set(qt_dir_prefix "${qt_version}/macos") + set(qt_package_suffix "-MacOS-MacOS_11_00-Clang-MacOS-MacOS_11_00-X86_64-ARM64") + endif() endif() - set(qt_base_url "https://download.qt.io/online/qtsdkrepository/${url_os}/desktop/qt5_${qt_version_dotless}") + set(qt_base_url "https://download.qt.io/online/qtsdkrepository/${url_os}/desktop/qt${qt_version_major}_${qt_version_dotless}") file(DOWNLOAD "${qt_base_url}/Updates.xml" ./Updates.xml SHOW_PROGRESS) file(READ ./Updates.xml updates_xml) - string(REGEX MATCH "qt.qt5.*([0-9+-.]+)" updates_xml_output "${updates_xml}") + string(REGEX MATCH "qt.qt${qt_version_major}.*([0-9+-.]+)" updates_xml_output "${updates_xml}") set(qt_package_version ${CMAKE_MATCH_1}) - file(MAKE_DIRECTORY qt5) + file(MAKE_DIRECTORY qt) # Save the path for other steps - file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/qt5/${qt_dir_prefix}" qt_dir) + file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/qt/${qt_dir_prefix}" qt_dir) message("::set-output name=qt_dir::${qt_dir}") message("Downloading Qt to ${qt_dir}") function(downloadAndExtract url archive) message("Downloading ${url}") file(DOWNLOAD "${url}" ./${archive} SHOW_PROGRESS) - execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ../${archive} WORKING_DIRECTORY qt5) + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ../${archive} WORKING_DIRECTORY qt) endfunction() foreach(package qtbase qtdeclarative) downloadAndExtract( - "${qt_base_url}/qt.qt5.${qt_version_dotless}.${qt_package_arch_suffix}/${qt_package_version}${package}${qt_package_suffix}.7z" + "${qt_base_url}/qt.qt${qt_version_major}.${qt_version_dotless}.${qt_package_arch_suffix}/${qt_package_version}${package}${qt_package_suffix}.7z" ${package}.7z ) endforeach() + if("${qt_version_major}" STREQUAL "6") + foreach(package qt5compat qtshadertools) + downloadAndExtract( + "${qt_base_url}/qt.qt6.${qt_version_dotless}.${package}.${qt_package_arch_suffix}/${qt_package_version}${package}${qt_package_suffix}.7z" + ${package}.7z + ) + endforeach() + endif() + # uic depends on libicu56.so if ("${{ runner.os }}" STREQUAL "Linux") downloadAndExtract( - "${qt_base_url}/qt.qt5.${qt_version_dotless}.${qt_package_arch_suffix}/${qt_package_version}icu-linux-Rhel7.2-x64.7z" + "${qt_base_url}/qt.qt${qt_version_major}.${qt_version_dotless}.${qt_package_arch_suffix}/${qt_package_version}icu-linux-Rhel7.2-x64.7z" icu.7z ) endif() From dbd5a4fe1b1a015b7de87c06e56db35cc6f8aa91 Mon Sep 17 00:00:00 2001 From: Ivan Komissarov Date: Wed, 3 Nov 2021 17:13:23 +0300 Subject: [PATCH 36/48] Update Qbs submodule to the top of 1.21 branch Change-Id: I3620f8d950c24e664df0cef424e65ba195b3336d Reviewed-by: Qt CI Bot Reviewed-by: Christian Kandeler --- src/shared/qbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/qbs b/src/shared/qbs index 38f233502e3..ae937f07673 160000 --- a/src/shared/qbs +++ b/src/shared/qbs @@ -1 +1 @@ -Subproject commit 38f233502e32112e15179420da86d6e6afb79b24 +Subproject commit ae937f07673aa95b67218e4be36a38e4438c0171 From 14c4f257fe7e9ef5953e60dacca36b7140454328 Mon Sep 17 00:00:00 2001 From: Henning Gruendl Date: Mon, 11 Oct 2021 09:46:21 +0200 Subject: [PATCH 37/48] QmlDesigner: Allow inserting SVG snippets Allows to paste SVG clipboard content into the Form Editor. It will create a Group item which acts as the SVGs view box and groups multiple items together. All SVG items will be transformed into SvgPathItem. * Supports all basic SVG shapes path, rect, polygon, circle, ellipse * Supports the following SVG presentation attributes as CSS-inline definition, XML-attribute, style element: fill, stroke, stroke-width, opacity, fill-opacity, stroke-opacity * Supports all transform operations Task-number: QDS-5259 Change-Id: I9b7027992de60e5c87f2031251348dbb31fe03fe Reviewed-by: Qt CI Bot Reviewed-by: Thomas Hartmann --- src/plugins/qmldesigner/CMakeLists.txt | 3 +- .../componentcore/componentcore.pri | 2 + .../componentcore/svgpasteaction.cpp | 1232 +++++++++++++++++ .../components/componentcore/svgpasteaction.h | 56 + .../components/integration/designdocument.cpp | 46 +- .../components/integration/designdocument.h | 2 + src/plugins/qmldesigner/qmldesignerplugin.pro | 2 +- src/plugins/qmldesigner/qmldesignerplugin.qbs | 4 +- 8 files changed, 1342 insertions(+), 5 deletions(-) create mode 100644 src/plugins/qmldesigner/components/componentcore/svgpasteaction.cpp create mode 100644 src/plugins/qmldesigner/components/componentcore/svgpasteaction.h diff --git a/src/plugins/qmldesigner/CMakeLists.txt b/src/plugins/qmldesigner/CMakeLists.txt index 1aac7a17cd8..48cdb6f123d 100644 --- a/src/plugins/qmldesigner/CMakeLists.txt +++ b/src/plugins/qmldesigner/CMakeLists.txt @@ -7,7 +7,7 @@ add_qtc_plugin(QmlDesigner CONDITION TARGET Qt5::QuickWidgets DEPENDS QmlJS LanguageUtils QmlEditorWidgets AdvancedDockingSystem - Qt5::QuickWidgets Qt5::CorePrivate Sqlite + Qt5::QuickWidgets Qt5::CorePrivate Sqlite Qt5::Xml Qt5::Svg DEFINES DESIGNER_CORE_LIBRARY IDE_LIBRARY_BASENAME=\"${IDE_LIBRARY_BASE_PATH}\" @@ -139,6 +139,7 @@ extend_qtc_plugin(QmlDesigner theme.cpp theme.h zoomaction.cpp zoomaction.h hdrimage.cpp hdrimage.h + svgpasteaction.cpp svgpasteaction.h ) extend_qtc_plugin(QmlDesigner diff --git a/src/plugins/qmldesigner/components/componentcore/componentcore.pri b/src/plugins/qmldesigner/components/componentcore/componentcore.pri index 49d646d4627..d47c4cf8a4b 100644 --- a/src/plugins/qmldesigner/components/componentcore/componentcore.pri +++ b/src/plugins/qmldesigner/components/componentcore/componentcore.pri @@ -20,6 +20,7 @@ SOURCES += crumblebar.cpp SOURCES += qmldesignericonprovider.cpp SOURCES += zoomaction.cpp SOURCES += hdrimage.cpp +SOURCES += svgpasteaction.cpp HEADERS += modelnodecontextmenu.h HEADERS += addimagesdialog.h @@ -43,6 +44,7 @@ HEADERS += crumblebar.h HEADERS += qmldesignericonprovider.h HEADERS += zoomaction.h HEADERS += hdrimage.h +HEADERS += svgpasteaction.h FORMS += \ $$PWD/addsignalhandlerdialog.ui diff --git a/src/plugins/qmldesigner/components/componentcore/svgpasteaction.cpp b/src/plugins/qmldesigner/components/componentcore/svgpasteaction.cpp new file mode 100644 index 00000000000..1d39d1458b9 --- /dev/null +++ b/src/plugins/qmldesigner/components/componentcore/svgpasteaction.cpp @@ -0,0 +1,1232 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +#include "svgpasteaction.h" + +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include + +namespace QmlDesigner { + +namespace { + +/* Copied from qquicksvgparser.cpp 3e783b26a8fb41e3f5a53b883735f5d10fbbd98a */ + +// '0' is 0x30 and '9' is 0x39 +static inline bool isDigit(ushort ch) +{ + static quint16 magic = 0x3ff; + return ((ch >> 4) == 3) && (magic >> (ch & 15)); +} + +static qreal toDouble(const QChar *&str) +{ + const int maxLen = 255;//technically doubles can go til 308+ but whatever + char temp[maxLen+1]; + int pos = 0; + + if (*str == QLatin1Char('-')) { + temp[pos++] = '-'; + ++str; + } else if (*str == QLatin1Char('+')) { + ++str; + } + while (isDigit(str->unicode()) && pos < maxLen) { + temp[pos++] = str->toLatin1(); + ++str; + } + if (*str == QLatin1Char('.') && pos < maxLen) { + temp[pos++] = '.'; + ++str; + } + while (isDigit(str->unicode()) && pos < maxLen) { + temp[pos++] = str->toLatin1(); + ++str; + } + bool exponent = false; + if ((*str == QLatin1Char('e') || *str == QLatin1Char('E')) && pos < maxLen) { + exponent = true; + temp[pos++] = 'e'; + ++str; + if ((*str == QLatin1Char('-') || *str == QLatin1Char('+')) && pos < maxLen) { + temp[pos++] = str->toLatin1(); + ++str; + } + while (isDigit(str->unicode()) && pos < maxLen) { + temp[pos++] = str->toLatin1(); + ++str; + } + } + + temp[pos] = '\0'; + + qreal val; + if (!exponent && pos < 10) { + int ival = 0; + const char *t = temp; + bool neg = false; + if (*t == '-') { + neg = true; + ++t; + } + while (*t && *t != '.') { + ival *= 10; + ival += (*t) - '0'; + ++t; + } + if (*t == '.') { + ++t; + int div = 1; + while (*t) { + ival *= 10; + ival += (*t) - '0'; + div *= 10; + ++t; + } + val = ((qreal)ival)/((qreal)div); + } else { + val = ival; + } + if (neg) + val = -val; + } else { + bool ok = false; + val = qstrtod(temp, nullptr, &ok); + } + return val; +} + +static inline void parseNumbersArray(const QChar *&str, QVarLengthArray &points) +{ + while (str->isSpace()) + ++str; + while (isDigit(str->unicode()) || + *str == QLatin1Char('-') || *str == QLatin1Char('+') || + *str == QLatin1Char('.')) { + + points.append(toDouble(str)); + + while (str->isSpace()) + ++str; + if (*str == QLatin1Char(',')) + ++str; + + //eat the rest of space + while (str->isSpace()) + ++str; + } +} + +static void pathArcSegment(QPainterPath &path, + qreal xc, qreal yc, + qreal th0, qreal th1, + qreal rx, qreal ry, qreal xAxisRotation) +{ + qreal sinTh, cosTh; + qreal a00, a01, a10, a11; + qreal x1, y1, x2, y2, x3, y3; + qreal t; + qreal thHalf; + + sinTh = qSin(qDegreesToRadians(xAxisRotation)); + cosTh = qCos(qDegreesToRadians(xAxisRotation)); + + a00 = cosTh * rx; + a01 = -sinTh * ry; + a10 = sinTh * rx; + a11 = cosTh * ry; + + thHalf = 0.5 * (th1 - th0); + t = (8.0 / 3.0) * qSin(thHalf * 0.5) * qSin(thHalf * 0.5) / qSin(thHalf); + x1 = xc + qCos(th0) - t * qSin(th0); + y1 = yc + qSin(th0) + t * qCos(th0); + x3 = xc + qCos(th1); + y3 = yc + qSin(th1); + x2 = x3 + t * qSin(th1); + y2 = y3 - t * qCos(th1); + + path.cubicTo(a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, + a00 * x2 + a01 * y2, a10 * x2 + a11 * y2, + a00 * x3 + a01 * y3, a10 * x3 + a11 * y3); +} + +void pathArc(QPainterPath &path, + qreal rx, qreal ry, + qreal x_axis_rotation, + int large_arc_flag, + int sweep_flag, + qreal x, qreal y, + qreal curx, qreal cury) +{ + qreal sin_th, cos_th; + qreal a00, a01, a10, a11; + qreal x0, y0, x1, y1, xc, yc; + qreal d, sfactor, sfactor_sq; + qreal th0, th1, th_arc; + int i, n_segs; + qreal dx, dy, dx1, dy1, Pr1, Pr2, Px, Py, check; + + rx = qAbs(rx); + ry = qAbs(ry); + + sin_th = qSin(qDegreesToRadians(x_axis_rotation)); + cos_th = qCos(qDegreesToRadians(x_axis_rotation)); + + dx = (curx - x) / 2.0; + dy = (cury - y) / 2.0; + dx1 = cos_th * dx + sin_th * dy; + dy1 = -sin_th * dx + cos_th * dy; + Pr1 = rx * rx; + Pr2 = ry * ry; + Px = dx1 * dx1; + Py = dy1 * dy1; + /* Spec : check if radii are large enough */ + check = Px / Pr1 + Py / Pr2; + if (check > 1) { + rx = rx * qSqrt(check); + ry = ry * qSqrt(check); + } + + a00 = cos_th / rx; + a01 = sin_th / rx; + a10 = -sin_th / ry; + a11 = cos_th / ry; + x0 = a00 * curx + a01 * cury; + y0 = a10 * curx + a11 * cury; + x1 = a00 * x + a01 * y; + y1 = a10 * x + a11 * y; + /* (x0, y0) is current point in transformed coordinate space. + (x1, y1) is new point in transformed coordinate space. + The arc fits a unit-radius circle in this space. + */ + d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0); + sfactor_sq = 1.0 / d - 0.25; + if (sfactor_sq < 0) sfactor_sq = 0; + sfactor = qSqrt(sfactor_sq); + if (sweep_flag == large_arc_flag) sfactor = -sfactor; + xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0); + yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0); + /* (xc, yc) is center of the circle. */ + + th0 = qAtan2(y0 - yc, x0 - xc); + th1 = qAtan2(y1 - yc, x1 - xc); + + th_arc = th1 - th0; + if (th_arc < 0 && sweep_flag) + th_arc += 2 * M_PI; + else if (th_arc > 0 && !sweep_flag) + th_arc -= 2 * M_PI; + + n_segs = qCeil(qAbs(th_arc / (M_PI * 0.5 + 0.001))); + + for (i = 0; i < n_segs; i++) { + pathArcSegment(path, xc, yc, + th0 + i * th_arc / n_segs, + th0 + (i + 1) * th_arc / n_segs, + rx, ry, x_axis_rotation); + } +} + + +bool parsePathDataFast(const QString &dataStr, QPainterPath &path) +{ + qreal x0 = 0, y0 = 0; // starting point + qreal x = 0, y = 0; // current point + char lastMode = 0; + QPointF ctrlPt; + const QChar *str = dataStr.constData(); + const QChar *end = str + dataStr.size(); + + while (str != end) { + while (str->isSpace()) + ++str; + QChar pathElem = *str; + ++str; + QVarLengthArray arg; + parseNumbersArray(str, arg); + if (pathElem == QLatin1Char('z') || pathElem == QLatin1Char('Z')) + arg.append(0);//dummy + const qreal *num = arg.constData(); + int count = arg.count(); + while (count > 0) { + qreal offsetX = x; // correction offsets + qreal offsetY = y; // for relative commands + switch (pathElem.unicode()) { + case 'm': { + if (count < 2) { + num++; + count--; + break; + } + x = x0 = num[0] + offsetX; + y = y0 = num[1] + offsetY; + num += 2; + count -= 2; + path.moveTo(x0, y0); + + // As per 1.2 spec 8.3.2 The "moveto" commands + // If a 'moveto' is followed by multiple pairs of coordinates without explicit commands, + // the subsequent pairs shall be treated as implicit 'lineto' commands. + pathElem = QLatin1Char('l'); + } + break; + case 'M': { + if (count < 2) { + num++; + count--; + break; + } + x = x0 = num[0]; + y = y0 = num[1]; + num += 2; + count -= 2; + path.moveTo(x0, y0); + + // As per 1.2 spec 8.3.2 The "moveto" commands + // If a 'moveto' is followed by multiple pairs of coordinates without explicit commands, + // the subsequent pairs shall be treated as implicit 'lineto' commands. + pathElem = QLatin1Char('L'); + } + break; + case 'z': + case 'Z': { + x = x0; + y = y0; + count--; // skip dummy + num++; + path.closeSubpath(); + } + break; + case 'l': { + if (count < 2) { + num++; + count--; + break; + } + x = num[0] + offsetX; + y = num[1] + offsetY; + num += 2; + count -= 2; + path.lineTo(x, y); + + } + break; + case 'L': { + if (count < 2) { + num++; + count--; + break; + } + x = num[0]; + y = num[1]; + num += 2; + count -= 2; + path.lineTo(x, y); + } + break; + case 'h': { + x = num[0] + offsetX; + num++; + count--; + path.lineTo(x, y); + } + break; + case 'H': { + x = num[0]; + num++; + count--; + path.lineTo(x, y); + } + break; + case 'v': { + y = num[0] + offsetY; + num++; + count--; + path.lineTo(x, y); + } + break; + case 'V': { + y = num[0]; + num++; + count--; + path.lineTo(x, y); + } + break; + case 'c': { + if (count < 6) { + num += count; + count = 0; + break; + } + QPointF c1(num[0] + offsetX, num[1] + offsetY); + QPointF c2(num[2] + offsetX, num[3] + offsetY); + QPointF e(num[4] + offsetX, num[5] + offsetY); + num += 6; + count -= 6; + path.cubicTo(c1, c2, e); + ctrlPt = c2; + x = e.x(); + y = e.y(); + break; + } + case 'C': { + if (count < 6) { + num += count; + count = 0; + break; + } + QPointF c1(num[0], num[1]); + QPointF c2(num[2], num[3]); + QPointF e(num[4], num[5]); + num += 6; + count -= 6; + path.cubicTo(c1, c2, e); + ctrlPt = c2; + x = e.x(); + y = e.y(); + break; + } + case 's': { + if (count < 4) { + num += count; + count = 0; + break; + } + QPointF c1; + if (lastMode == 'c' || lastMode == 'C' || + lastMode == 's' || lastMode == 'S') + c1 = QPointF(2*x-ctrlPt.x(), 2*y-ctrlPt.y()); + else + c1 = QPointF(x, y); + QPointF c2(num[0] + offsetX, num[1] + offsetY); + QPointF e(num[2] + offsetX, num[3] + offsetY); + num += 4; + count -= 4; + path.cubicTo(c1, c2, e); + ctrlPt = c2; + x = e.x(); + y = e.y(); + break; + } + case 'S': { + if (count < 4) { + num += count; + count = 0; + break; + } + QPointF c1; + if (lastMode == 'c' || lastMode == 'C' || + lastMode == 's' || lastMode == 'S') + c1 = QPointF(2*x-ctrlPt.x(), 2*y-ctrlPt.y()); + else + c1 = QPointF(x, y); + QPointF c2(num[0], num[1]); + QPointF e(num[2], num[3]); + num += 4; + count -= 4; + path.cubicTo(c1, c2, e); + ctrlPt = c2; + x = e.x(); + y = e.y(); + break; + } + case 'q': { + if (count < 4) { + num += count; + count = 0; + break; + } + QPointF c(num[0] + offsetX, num[1] + offsetY); + QPointF e(num[2] + offsetX, num[3] + offsetY); + num += 4; + count -= 4; + path.quadTo(c, e); + ctrlPt = c; + x = e.x(); + y = e.y(); + break; + } + case 'Q': { + if (count < 4) { + num += count; + count = 0; + break; + } + QPointF c(num[0], num[1]); + QPointF e(num[2], num[3]); + num += 4; + count -= 4; + path.quadTo(c, e); + ctrlPt = c; + x = e.x(); + y = e.y(); + break; + } + case 't': { + if (count < 2) { + num += count; + count = 0; + break; + } + QPointF e(num[0] + offsetX, num[1] + offsetY); + num += 2; + count -= 2; + QPointF c; + if (lastMode == 'q' || lastMode == 'Q' || + lastMode == 't' || lastMode == 'T') + c = QPointF(2*x-ctrlPt.x(), 2*y-ctrlPt.y()); + else + c = QPointF(x, y); + path.quadTo(c, e); + ctrlPt = c; + x = e.x(); + y = e.y(); + break; + } + case 'T': { + if (count < 2) { + num += count; + count = 0; + break; + } + QPointF e(num[0], num[1]); + num += 2; + count -= 2; + QPointF c; + if (lastMode == 'q' || lastMode == 'Q' || + lastMode == 't' || lastMode == 'T') + c = QPointF(2*x-ctrlPt.x(), 2*y-ctrlPt.y()); + else + c = QPointF(x, y); + path.quadTo(c, e); + ctrlPt = c; + x = e.x(); + y = e.y(); + break; + } + case 'a': { + if (count < 7) { + num += count; + count = 0; + break; + } + qreal rx = (*num++); + qreal ry = (*num++); + qreal xAxisRotation = (*num++); + qreal largeArcFlag = (*num++); + qreal sweepFlag = (*num++); + qreal ex = (*num++) + offsetX; + qreal ey = (*num++) + offsetY; + count -= 7; + qreal curx = x; + qreal cury = y; + pathArc(path, rx, ry, xAxisRotation, int(largeArcFlag), + int(sweepFlag), ex, ey, curx, cury); + + x = ex; + y = ey; + } + break; + case 'A': { + if (count < 7) { + num += count; + count = 0; + break; + } + qreal rx = (*num++); + qreal ry = (*num++); + qreal xAxisRotation = (*num++); + qreal largeArcFlag = (*num++); + qreal sweepFlag = (*num++); + qreal ex = (*num++); + qreal ey = (*num++); + count -= 7; + qreal curx = x; + qreal cury = y; + pathArc(path, rx, ry, xAxisRotation, int(largeArcFlag), + int(sweepFlag), ex, ey, curx, cury); + + x = ex; + y = ey; + } + break; + default: + return false; + } + lastMode = pathElem.toLatin1(); + } + } + return true; +} + +/* Copied from qquicksvgparser.cpp 3e783b26a8fb41e3f5a53b883735f5d10fbbd98a */ + +double round(double value, int decimal_places) { + const double multiplier = std::pow(10.0, decimal_places); + return std::round(value * multiplier) / multiplier; +} + +static const std::initializer_list tagAllowList{ + u"path", u"rect", u"polygon", u"circle", u"ellipse" +}; + +// fillOpacity and strokeOpacity aren't actual QML properties, but get mapped anyways +// for completeness. +static const std::initializer_list> mapping{ + {u"fill", "fillColor"}, + {u"stroke", "strokeColor"}, + {u"stroke-width", "strokeWidth"}, + {u"opacity", "opacity"}, + {u"fill-opacity", "fillOpacity"}, + {u"stroke-opacity", "strokeOpacity"} +}; + +template +bool contains(const Container &c, const QStringView &stringView) { + return std::find(std::begin(c), std::end(c), stringView) != std::end(c); +} + +template +auto findKey(const Container &c, const QStringView &key) { + return std::find_if(std::begin(c), std::end(c), [&](const auto &pair){ + return pair.first == key; + }); +} + +template +void depthFirstTraversal(const QDomNode &node, + const Callable &action) +{ + QDomNode currentNode = node; + + while (!currentNode.isNull()) { + action(currentNode); + depthFirstTraversal(currentNode.firstChild(), action); + currentNode = currentNode.nextSibling(); + } +} + +template +void topToBottomTraversal(const QDomNode &node, + const Callable &action) +{ + if (node.isNull()) + return; + + topToBottomTraversal(node.parentNode(), action); + action(node); +} + +QTransform parseMatrix(const QString &values) +{ + // matrix( ) + // [a c e] [m11 m21 m31] + // SVG [b d f] Qt [m12 m22 m32] + // [0 0 1] [m13 m23 m33] + static const QRegularExpression re("([0-9-.]+)"); + QRegularExpressionMatchIterator iter = re.globalMatch(values.simplified()); + + std::array arr = {1, 0, 0, 1, 0, 0}; + int i = 0; + while (iter.hasNext()) { + QRegularExpressionMatch match = iter.next(); + arr[i] = match.captured(1).toFloat(); + ++i; + } + + if (i != 6) + return QTransform(); + + return QTransform(arr[0], arr[1], 0, arr[2], arr[3], 0, arr[4], arr[5], 1); +} + +QTransform parseTranslate(const QString &values) +{ + // translate( []) translate([,]) + static const QRegularExpression re(R"(^([\d.-]+)(?:(?:\s*,\s*|\s+)([\d.-]+))?$)"); + QRegularExpressionMatch m = re.match(values.simplified()); + + if (!m.hasMatch()) + return QTransform(); + + return QTransform().translate(m.captured(1).toFloat(), m.captured(2).toFloat()); +} + +QTransform parseScale(const QString &values) +{ + // scale( []) scale([,]) + static const QRegularExpression re(R"(^([\d.-]+)(?:(?:\s*,\s*|\s+)([\d.-]+))?$)"); + QRegularExpressionMatch m = re.match(values.simplified()); + + if (!m.hasMatch()) + return QTransform(); + + float x = m.captured(1).toFloat(); + // If y is not provided, it is assumed to be equal to x. + float y = (m.captured(2).isEmpty()) ? x : m.captured(2).toFloat(); + + return QTransform().scale(x, y); +} + +QTransform parseRotate(const QString &values) +{ + // rotate( [ ]) rotate([,,]) + static const QRegularExpression re(R"(^([\d.-]+)(?:(?:\s*,\s*|\s+)([\d.-]+)(?:\s*,\s*|\s+)([\d.-]+))?$)"); + QRegularExpressionMatch m = re.match(values.simplified()); + + if (!m.hasMatch()) + return QTransform(); + + float a = m.captured(1).toFloat(); + + QTransform transform; + + if (m.captured(2).isEmpty() || m.captured(3).isEmpty()) { + transform.rotate(a); + } else { + float x = m.captured(2).toFloat(); + float y = m.captured(3).toFloat(); + transform.translate(x, y); + transform.rotate(a); + transform.translate(-x, -y); + } + + return transform; +} + +QTransform parseSkewX(const QString &values) +{ + // skewX() + static const QRegularExpression re(R"(^([\d.-]+)$)"); + QRegularExpressionMatch m = re.match(values.simplified()); + + if (!m.hasMatch()) + return QTransform(); + + float a = m.captured(1).toFloat(); + + return QTransform(1, 0, 0, std::tan(a * M_PI / 180.0), 1, 0, 0, 0, 1); +} + +QTransform parseSkewY(const QString &values) +{ + // skewY() + static const QRegularExpression re(R"(^([\d.-]+)$)"); + QRegularExpressionMatch m = re.match(values.simplified()); + + if (!m.hasMatch()) + return QTransform(); + + float a = m.captured(1).toFloat(); + + return QTransform(1, std::tan(a * M_PI / 180.0), 0, 0, 1, 0, 0, 0, 1); +} + +QTransform parseTransform(const QString &transformStr) +{ + if (transformStr.isEmpty()) + return QTransform(); + + std::vector transforms; + + static const QRegularExpression reTransform(R"(([\w]+)\(([\s\S]*?)\))"); + QRegularExpressionMatchIterator i = reTransform.globalMatch(transformStr.simplified()); + + while (i.hasNext()) { + QRegularExpressionMatch match = i.next(); + + const QString function = match.captured(1).simplified(); + const QString values = match.captured(2).simplified(); + + if (function == "matrix") + transforms.push_back(parseMatrix(values)); + else if (function == "translate") + transforms.push_back(parseTranslate(values)); + else if (function == "scale") + transforms.push_back(parseScale(values)); + else if (function == "rotate") + transforms.push_back(parseRotate(values)); + else if (function == "skewX") + transforms.push_back(parseSkewX(values)); + else if (function == "skewY") + transforms.push_back(parseSkewY(values)); + } + + QTransform transform; + std::for_each(transforms.rbegin(), transforms.rend(), [&](const QTransform &t) + { + transform *= t; + }); + + return transform; +} + +QString convertQPainterPathtoSVGPath(const QPainterPath &path) +{ + QByteArray byteArray; + QBuffer buffer(&byteArray); + + QSvgGenerator generator; + generator.setOutputDevice(&buffer); + + QPainter p; + p.begin(&generator); + p.drawPath(path); + p.end(); + + QDomDocument tmpDomDocument; + if (!tmpDomDocument.setContent(byteArray)) + return QString(); + + QDomElement pathElement; + + auto extractPathElement = [&pathElement](const QDomNode &node) { + QDomElement element = node.toElement(); + if (!element.isNull()) { + if (element.tagName() == "path") + pathElement = element; + } + }; + + depthFirstTraversal(tmpDomDocument.firstChild(), extractPathElement); + + return pathElement.attribute("d"); +} + +QVariant convertValue(const QByteArray &key, const QString &value) +{ + if (key == "fillOpacity" || key == "strokeOpacity") { + if (value.contains("%")) + return QString(value).replace("%", "").toFloat() / 100.0f; + + return value.toFloat(); + } else if (key == "strokeWidth") { + return value.toInt(); + } else if (key == "opacity") { + return value.toFloat(); + } + + return value; +} + +CSSRule parseCSSRule(const QString &ruleStr) +{ + static const QRegularExpression reRules(R"(([\s\S]*?):([\s\S]*?)(?:;|;?$))"); + + CSSRule rule; + QRegularExpressionMatchIterator i = reRules.globalMatch(ruleStr); + while (i.hasNext()) { + QRegularExpressionMatch match = i.next(); + + if (match.lastCapturedIndex() != 2) + continue; + + CSSProperty property; + property.directive = match.captured(1).trimmed(); + property.value = match.captured(2).trimmed(); + + rule.push_back(property); + } + + return rule; +} + +CSSRules parseCSS(const QDomElement &styleElement) +{ + static const QRegularExpression reCSS(R"(([\s\S]*?){([\s\S]*?)})"); + + CSSRules cssRules; + QRegularExpressionMatchIterator i = reCSS.globalMatch(styleElement.text().simplified()); + while (i.hasNext()) { + QRegularExpressionMatch match = i.next(); + + if (match.lastCapturedIndex() != 2) + continue; + + cssRules.insert(match.captured(1).trimmed(), + parseCSSRule(match.captured(2).trimmed())); + } + + return cssRules; +} + +void applyCSSRules(const CSSRule &cssRule, PropertyMap &properties) +{ + for (const CSSProperty &property : cssRule) { + const QString directive = property.directive; + if (auto iter = findKey(mapping, directive); iter != mapping.end()) { + const QByteArray directive = iter->second.toByteArray(); + properties.insert(directive, convertValue(directive, property.value)); + } + } +} + +// This merges potential fill and/or stroke opacity with fill and/or stroke color +void mergeOpacity(PropertyMap &properties) +{ + auto merge = [&](const QByteArray &opacityKey, const QByteArray &colorKey) { + + if (!properties.contains(opacityKey)) + return; + + QColor color; // By default black same as SVG + + if (properties.contains(colorKey)) + color = QColor(properties[colorKey].toString()); + + color.setAlphaF(properties[opacityKey].toFloat()); + // Insert/replace merged color and remove opacity + properties.insert(colorKey, color.name(QColor::HexArgb)); + properties.remove(opacityKey); + }; + + merge("fillOpacity", "fillColor"); + merge("strokeOpacity", "strokeColor"); +} + +void flattenTransformsAndStyles(const QDomElement &element, + const CSSRules &cssRules, + QTransform &transform, + PropertyMap &properties) +{ + properties.insert("fillColor", "black"); // overwrite default fillColor + properties.insert("strokeWidth", -1); // overwrite default strokeWidth of 4 + + auto collectTransformAndStyle = [&](const QDomNode &node) { + QDomElement e = node.toElement(); + transform *= parseTransform(e.attribute("transform")); + + // Parse and assign presentation attributes contained in mapping + for (const auto &p : mapping) { + const QString attributeValue = e.attribute(p.first.toString()).trimmed(); + if (attributeValue.isEmpty()) + continue; + + const QByteArray directive = p.second.toByteArray(); + properties.insert(directive, convertValue(directive, attributeValue)); + } + + // Parse and assign css styles + if (e.hasAttribute("class")) { + // Replace all commas with whitespaces, if there are commas contained + const QString classStr = e.attribute("class").replace(",", " ").simplified(); + const QStringList classes = classStr.split(" ", Qt::SkipEmptyParts); + + for (const auto &c : classes) + applyCSSRules(cssRules["." + e.attribute("class")], properties); + } + + if (e.hasAttribute("id")) { + const QString id = e.attribute("id").simplified(); + applyCSSRules(cssRules["#" + id], properties); + } + + // Parse and assign inline style + if (e.hasAttribute("style")) { + const QString rule = e.attribute("style").simplified(); + applyCSSRules(parseCSSRule(rule), properties); + } + }; + + topToBottomTraversal(element, collectTransformAndStyle); + + mergeOpacity(properties); +} + +bool applyMinimumBoundingBox(QPainterPath &path, PropertyMap &properties) +{ + const QRectF boundingRect = path.boundingRect(); + + path.translate(-boundingRect.topLeft()); + + properties.insert("x", round(boundingRect.x(), 2)); + properties.insert("y", round(boundingRect.y(), 2)); + properties.insert("width", round(boundingRect.width(), 2)); + properties.insert("height", round(boundingRect.height(), 2)); + + const QString svgPath = convertQPainterPathtoSVGPath(path); + + if (svgPath.isEmpty()) + return false; + + properties.insert("path", svgPath); + + return true; +} + +PropertyMap generateRectProperties(const QDomElement &e, const CSSRules &cssRules) +{ + QRectF rect(e.attribute("x").toFloat(), + e.attribute("y").toFloat(), + e.attribute("width").toFloat(), + e.attribute("height").toFloat()); + + if (!rect.isValid()) + return {}; + + QPainterPath path; + path.addRect(rect); + + PropertyMap properties; + QTransform transform; + flattenTransformsAndStyles(e, cssRules, transform, properties); + + path = transform.map(path); + + if (!applyMinimumBoundingBox(path, properties)) + return {}; + + return properties; +} + +PropertyMap generateEllipseProperties(const QDomElement &e, const CSSRules &cssRules) +{ + const QPointF center(e.attribute("cx").toFloat(), e.attribute("cy").toFloat()); + qreal radiusX = 0; + qreal radiusY = 0; + + if (e.tagName() == "circle") + radiusX = radiusY = e.attribute("r").toFloat(); + else if (e.tagName() == "ellipse") { + radiusX = e.attribute("rx").toFloat(); + radiusY = e.attribute("ry").toFloat(); + } + + if (radiusX <= 0 || radiusY <= 0) + return {}; + + QPainterPath path; + path.addEllipse(center, radiusX, radiusY); + + PropertyMap properties; + QTransform transform; + flattenTransformsAndStyles(e, cssRules, transform, properties); + + path = transform.map(path); + + if (!applyMinimumBoundingBox(path, properties)) + return {}; + + return properties; +} + +PropertyMap generatePathProperties(const QDomElement &e, const CSSRules &cssRules) +{ + if (!e.hasAttribute("d")) + return {}; + + QPainterPath path; + + if (!parsePathDataFast(e.attribute("d"), path)) + return {}; + + PropertyMap properties; + QTransform transform; + flattenTransformsAndStyles(e, cssRules, transform, properties); + + path = transform.map(path); + + if (!applyMinimumBoundingBox(path, properties)) + return {}; + + return properties; +} + +PropertyMap generatePolygonProperties(const QDomElement &e, const CSSRules &cssRules) +{ + if (!e.hasAttribute("points")) + return {}; + + // Replace all commas with whitespaces, if there are commas contained + const QString pointsStr = e.attribute("points").replace(",", " ").simplified(); + const QStringList pointList = pointsStr.split(" ", Qt::SkipEmptyParts); + + if (pointList.isEmpty() || pointList.length() < 4) + return {}; + + QPolygonF polygon; + + for (int i = 0; i < pointList.length(); i += 2) + polygon.emplace_back(pointList[i].toFloat(), pointList[i + 1].toFloat()); + + if (!polygon.isClosed() && polygon.size()) + polygon.push_back(polygon.front()); + + QPainterPath path; + path.addPolygon(polygon); + + PropertyMap properties; + QTransform transform; + flattenTransformsAndStyles(e, cssRules, transform, properties); + + path = transform.map(path); + + if (!applyMinimumBoundingBox(path, properties)) + return {}; + + return properties; +} + +ModelNode createPathNode(ModelNode parent, const PropertyMap &properties) +{ + ItemLibraryEntry itemLibraryEntry; + itemLibraryEntry.setName("SVG Path Item"); + itemLibraryEntry.setType("QtQuick.Studio.Components.SvgPathItem", 1, 0); + + ModelNode node = QmlItemNode::createQmlObjectNode( + parent.view(), itemLibraryEntry, {}, parent.defaultNodeAbstractProperty(), false); + + PropertyMap::const_iterator i = properties.constBegin(); + while (i != properties.constEnd()) { + node.variantProperty(i.key()).setValue(i.value()); + ++i; + } + + return node; +} + +ModelNode createGroupNode(ModelNode parent, const PropertyMap &properties) +{ + ItemLibraryEntry itemLibraryEntry; + itemLibraryEntry.setName("Group"); + itemLibraryEntry.setType("QtQuick.Studio.Components.GroupItem", 1, 0); + + ModelNode node = QmlItemNode::createQmlObjectNode( + parent.view(), itemLibraryEntry, {}, parent.defaultNodeAbstractProperty(), false); + + PropertyMap::const_iterator i = properties.constBegin(); + while (i != properties.constEnd()) { + node.variantProperty(i.key()).setValue(i.value()); + ++i; + } + + return node; +} + +} // namespace + +SVGPasteAction::SVGPasteAction() + : m_domDocument() +{} + +bool SVGPasteAction::containsSVG(const QString &str) +{ + if (!m_domDocument.setContent(str, true)) + return false; // TODO error reporting + + if (m_domDocument.documentElement().namespaceURI() == "http://www.w3.org/2000/svg") + return true; + + return false; +} + +QmlObjectNode SVGPasteAction::createQmlObjectNode(QmlDesigner::ModelNode &targetNode) +{ + const QDomElement rootElement = m_domDocument.documentElement(); + if (rootElement.isNull()) { + qWarning() << Q_FUNC_INFO << "Couldn't create a root element."; + return {}; + } + + PropertyMap viewBoxProperties; + QRectF viewBox(0, 0, 100, 100); + + if (rootElement.hasAttribute("viewBox")) { + // Replace all commas with whitespaces, if there are commas contained + const QString viewBoxStr = rootElement.attribute("viewBox").replace(",", " ").simplified(); + const QStringList tmp = viewBoxStr.split(" ", Qt::SkipEmptyParts); + + if (tmp.size() == 4) { + viewBox = QRectF(round(tmp[0].toFloat(), 2), + round(tmp[1].toFloat(), 2), + round(tmp[2].toFloat(), 2), + round(tmp[3].toFloat(), 2)); + } + } + + viewBoxProperties.insert("x", viewBox.x()); + viewBoxProperties.insert("y", viewBox.y()); + viewBoxProperties.insert("width", viewBox.width()); + viewBoxProperties.insert("height", viewBox.height()); + + const QDomNode node = rootElement.firstChild(); + std::vector shapeElements; + CSSRules cssRules; + + auto processStyleAndCollectShapes = [&](const QDomNode &node) { + QDomElement element = node.toElement(); + if (!element.isNull()) { + if (element.tagName() == "style"/* && element.attribute("type") == "text/css"*/) + cssRules = parseCSS(element); + + if (contains(tagAllowList, element.tagName())) + shapeElements.push_back(element); + } + }; + + depthFirstTraversal(node, processStyleAndCollectShapes); + + viewBoxProperties.insert("clip", true); + + ModelNode groupNode = createGroupNode(targetNode, viewBoxProperties); + + for (const QDomElement &e : shapeElements) { + PropertyMap pathProperties; + + if (e.tagName() == "path") + pathProperties = generatePathProperties(e, cssRules); + else if (e.tagName() == "rect") + pathProperties = generateRectProperties(e, cssRules); + else if (e.tagName() == "polygon") + pathProperties = generatePolygonProperties(e, cssRules); + else if (e.tagName() == "circle" || e.tagName() == "ellipse") + pathProperties = generateEllipseProperties(e, cssRules); + + if (pathProperties.empty()) + continue; + + const QPointF topLeft = -viewBox.topLeft(); + + pathProperties["x"] = pathProperties["x"].toDouble() + topLeft.x(); + pathProperties["y"] = pathProperties["y"].toDouble() + topLeft.y(); + + createPathNode(groupNode, pathProperties); + } + + return groupNode; +} + +} // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/componentcore/svgpasteaction.h b/src/plugins/qmldesigner/components/componentcore/svgpasteaction.h new file mode 100644 index 00000000000..0fc144369d7 --- /dev/null +++ b/src/plugins/qmldesigner/components/componentcore/svgpasteaction.h @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ +#pragma once + +#include + +#include + +namespace QmlDesigner { + +struct CSSProperty +{ + QString directive; + QString value; +}; + +using CSSRule = std::vector; +using CSSRules = QHash; +using PropertyMap = QHash; + +class SVGPasteAction +{ +public: + SVGPasteAction(); + + bool containsSVG(const QString &str); + + QmlObjectNode createQmlObjectNode(QmlDesigner::ModelNode &targetNode); + +private: + QDomDocument m_domDocument; +}; + +} // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/integration/designdocument.cpp b/src/plugins/qmldesigner/components/integration/designdocument.cpp index b2610b0982a..4b5e2170972 100644 --- a/src/plugins/qmldesigner/components/integration/designdocument.cpp +++ b/src/plugins/qmldesigner/components/integration/designdocument.cpp @@ -51,9 +51,12 @@ #include #include #include +#include #include +#include + #include #include #include @@ -62,6 +65,7 @@ #include #include #include +#include using namespace ProjectExplorer; @@ -171,6 +175,41 @@ Model* DesignDocument::createInFileComponentModel() return model; } +bool DesignDocument::pasteSVG() +{ + SVGPasteAction svgPasteAction; + + if (!svgPasteAction.containsSVG(QApplication::clipboard()->text())) + return false; + + rewriterView()->executeInTransaction("DesignDocument::paste1", [&]() { + ModelNode targetNode; + + // If nodes are currently selected make the first node in selection the target + if (!view()->selectedModelNodes().isEmpty()) + targetNode = view()->firstSelectedModelNode(); + + // If target is still invalid make the root node the target + if (!targetNode.isValid()) + targetNode = view()->rootModelNode(); + + // Check if document has studio components import, if not create it + QmlDesigner::Import import = QmlDesigner::Import::createLibraryImport("QtQuick.Studio.Components", "1.0"); + if (!currentModel()->hasImport(import, true, true)) { + QmlDesigner::Import studioComponentsImport = QmlDesigner::Import::createLibraryImport("QtQuick.Studio.Components", "1.0"); + try { + currentModel()->changeImports({studioComponentsImport}, {}); + } catch (const QmlDesigner::Exception &) { + QTC_ASSERT(false, return); + } + } + + svgPasteAction.createQmlObjectNode(targetNode); + }); + + return true; +} + QList DesignDocument::qmlParseWarnings() const { return m_rewriterView->warnings(); @@ -495,6 +534,9 @@ static void scatterItem(const ModelNode &pastedNode, const ModelNode &targetNode void DesignDocument::paste() { + if (pasteSVG()) + return; + if (TimelineActions::clipboardContainsKeyframes()) // pasting keyframes is handled in TimelineView return; @@ -518,7 +560,7 @@ void DesignDocument::paste() ModelNode targetNode; if (!view.selectedModelNodes().isEmpty()) - targetNode = view.selectedModelNodes().constFirst(); + targetNode = view.firstSelectedModelNode(); // in case we copy and paste a selection we paste in the parent item if ((view.selectedModelNodes().count() == selectedNodes.count()) && targetNode.isValid() && targetNode.hasParentProperty()) { @@ -572,7 +614,7 @@ void DesignDocument::paste() ModelNode targetNode; if (!view.selectedModelNodes().isEmpty()) { - targetNode = view.selectedModelNodes().constFirst(); + targetNode = view.firstSelectedModelNode(); } else { // if selection is empty and this is a 3D Node, paste it under the active scene if (pastedNode.isSubclassOf("QtQuick3D.Node")) { diff --git a/src/plugins/qmldesigner/components/integration/designdocument.h b/src/plugins/qmldesigner/components/integration/designdocument.h index 0d80f344de1..ed2ef9ed112 100644 --- a/src/plugins/qmldesigner/components/integration/designdocument.h +++ b/src/plugins/qmldesigner/components/integration/designdocument.h @@ -145,6 +145,8 @@ private: // functions Model *createInFileComponentModel(); + bool pasteSVG(); + private: // variables QScopedPointer m_documentModel; QScopedPointer m_inFileComponentModel; diff --git a/src/plugins/qmldesigner/qmldesignerplugin.pro b/src/plugins/qmldesigner/qmldesignerplugin.pro index 41e7568ff7e..78fe856fb0d 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.pro +++ b/src/plugins/qmldesigner/qmldesignerplugin.pro @@ -1,4 +1,4 @@ -QT += quickwidgets core-private +QT += quickwidgets core-private xml svg CONFIG += exceptions INCLUDEPATH += $$PWD diff --git a/src/plugins/qmldesigner/qmldesignerplugin.qbs b/src/plugins/qmldesigner/qmldesignerplugin.qbs index 2ff2d3cb2bb..80b54747a6e 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.qbs +++ b/src/plugins/qmldesigner/qmldesignerplugin.qbs @@ -10,7 +10,7 @@ Project { Depends { name: "Qt"; submodules: [ - "core-private", "quickwidgets" + "core-private", "quickwidgets", "xml", "svg" ] } Depends { name: "AdvancedDockingSystem" } @@ -482,6 +482,8 @@ Project { "componentcore/zoomaction.h", "componentcore/hdrimage.cpp", "componentcore/hdrimage.h", + "componentcore/svgpasteaction.cpp", + "componentcore/svgpasteaction.h", "texteditor/texteditorstatusbar.cpp", "texteditor/texteditorstatusbar.h", "componentcore/changestyleaction.cpp", From 0484d574d6530d03cb533131009d3a84d6817704 Mon Sep 17 00:00:00 2001 From: Henning Gruendl Date: Wed, 3 Nov 2021 12:16:42 +0100 Subject: [PATCH 38/48] QmlDesigner: Add QtMultimedia Add property editor sheets and item library entries for QtMultimedia. Task-number: QDS-5147 Change-Id: Ic4fc2926e7bf5aa5376f3fd7b6b5e452034e4001 Reviewed-by: Qt CI Bot Reviewed-by: Thomas Hartmann --- .../QtMultimedia/AudioOutputSpecifics.qml | 37 ++++++ .../QtMultimedia/AudioSection.qml | 67 +++++++++++ .../QtMultimedia/MediaPlayerSection.qml | 56 ++++++++++ .../QtMultimedia/MediaPlayerSpecifics.qml | 37 ++++++ .../QtMultimedia/VideoSection.qml | 105 ++++++++++++++++++ .../QtMultimedia/VideoSpecifics.qml | 41 +++++++ .../qtquickplugin/images/audio-16px.png | Bin 0 -> 267 bytes .../qtquickplugin/images/audio-24px.png | Bin 0 -> 521 bytes .../qtquickplugin/images/audio-24px@2x.png | Bin 0 -> 1026 bytes .../images/audio-output-16px.png | Bin 0 -> 359 bytes .../images/audio-output-24px.png | Bin 0 -> 595 bytes .../images/audio-output-24px@2x.png | Bin 0 -> 1129 bytes .../images/media-player-16px.png | Bin 0 -> 148 bytes .../images/media-player-24px.png | Bin 0 -> 179 bytes .../images/media-player-24px@2x.png | Bin 0 -> 260 bytes .../qtquickplugin/images/video-16px.png | Bin 0 -> 216 bytes .../qtquickplugin/images/video-24px.png | Bin 0 -> 286 bytes .../qtquickplugin/images/video-24px@2x.png | Bin 0 -> 399 bytes .../images/video-output-16px.png | Bin 0 -> 289 bytes .../images/video-output-24px.png | Bin 0 -> 387 bytes .../images/video-output-24px@2x.png | Bin 0 -> 610 bytes .../qtquickplugin/qtquickplugin.qrc | 16 +++ .../qmldesigner/qtquickplugin/quick.metainfo | 85 ++++++++++++++ .../qtquickplugin/source/audio.qml | 35 ++++++ 24 files changed, 479 insertions(+) create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtMultimedia/AudioOutputSpecifics.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtMultimedia/AudioSection.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtMultimedia/MediaPlayerSection.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtMultimedia/MediaPlayerSpecifics.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtMultimedia/VideoSection.qml create mode 100644 share/qtcreator/qmldesigner/propertyEditorQmlSources/QtMultimedia/VideoSpecifics.qml create mode 100644 src/plugins/qmldesigner/qtquickplugin/images/audio-16px.png create mode 100644 src/plugins/qmldesigner/qtquickplugin/images/audio-24px.png create mode 100644 src/plugins/qmldesigner/qtquickplugin/images/audio-24px@2x.png create mode 100644 src/plugins/qmldesigner/qtquickplugin/images/audio-output-16px.png create mode 100644 src/plugins/qmldesigner/qtquickplugin/images/audio-output-24px.png create mode 100644 src/plugins/qmldesigner/qtquickplugin/images/audio-output-24px@2x.png create mode 100644 src/plugins/qmldesigner/qtquickplugin/images/media-player-16px.png create mode 100644 src/plugins/qmldesigner/qtquickplugin/images/media-player-24px.png create mode 100644 src/plugins/qmldesigner/qtquickplugin/images/media-player-24px@2x.png create mode 100644 src/plugins/qmldesigner/qtquickplugin/images/video-16px.png create mode 100644 src/plugins/qmldesigner/qtquickplugin/images/video-24px.png create mode 100644 src/plugins/qmldesigner/qtquickplugin/images/video-24px@2x.png create mode 100644 src/plugins/qmldesigner/qtquickplugin/images/video-output-16px.png create mode 100644 src/plugins/qmldesigner/qtquickplugin/images/video-output-24px.png create mode 100644 src/plugins/qmldesigner/qtquickplugin/images/video-output-24px@2x.png create mode 100644 src/plugins/qmldesigner/qtquickplugin/source/audio.qml diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtMultimedia/AudioOutputSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtMultimedia/AudioOutputSpecifics.qml new file mode 100644 index 00000000000..ab5860ec02a --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtMultimedia/AudioOutputSpecifics.qml @@ -0,0 +1,37 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioControls 1.0 as StudioControls +import StudioTheme 1.0 as StudioTheme + +Column { + anchors.left: parent.left + anchors.right: parent.right + + AudioSection {} +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtMultimedia/AudioSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtMultimedia/AudioSection.qml new file mode 100644 index 00000000000..db226e755a9 --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtMultimedia/AudioSection.qml @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioControls 1.0 as StudioControls +import StudioTheme 1.0 as StudioTheme + +Section { + caption: qsTr("Audio") + + anchors.left: parent.left + anchors.right: parent.right + + SectionLayout { + PropertyLabel { text: qsTr("Volume") } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + backendValue: backendValues.volume + decimals: 1 + minimumValue: 0.0 + maximumValue: 1.0 + } + + ExpandingSpacer {} + } + + PropertyLabel { text: qsTr("Muted") } + + SecondColumnLayout { + CheckBox { + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + backendValue: backendValues.muted + text: backendValues.muted.valueToString + } + + ExpandingSpacer {} + } + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtMultimedia/MediaPlayerSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtMultimedia/MediaPlayerSection.qml new file mode 100644 index 00000000000..b76a1bd0fb5 --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtMultimedia/MediaPlayerSection.qml @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioControls 1.0 as StudioControls +import StudioTheme 1.0 as StudioTheme + +Section { + caption: qsTr("Media Player") + + anchors.left: parent.left + anchors.right: parent.right + + // TODO position property, what should be the range?! + + SectionLayout { + PropertyLabel { text: qsTr("Playback rate") } + + SecondColumnLayout { + SpinBox { + implicitWidth: StudioTheme.Values.twoControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + backendValue: backendValues.playbackRate + decimals: 1 + minimumValue: -1000 // TODO correct range + maximumValue: 1000 + } + + ExpandingSpacer {} + } + } +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtMultimedia/MediaPlayerSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtMultimedia/MediaPlayerSpecifics.qml new file mode 100644 index 00000000000..1a6c41ecf88 --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtMultimedia/MediaPlayerSpecifics.qml @@ -0,0 +1,37 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioControls 1.0 as StudioControls +import StudioTheme 1.0 as StudioTheme + +Column { + anchors.left: parent.left + anchors.right: parent.right + + MediaPlayerSection {} +} diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtMultimedia/VideoSection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtMultimedia/VideoSection.qml new file mode 100644 index 00000000000..d5a87af559a --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtMultimedia/VideoSection.qml @@ -0,0 +1,105 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioControls 1.0 as StudioControls +import StudioTheme 1.0 as StudioTheme + +Section { + caption: qsTr("Video") + + anchors.left: parent.left + anchors.right: parent.right + + SectionLayout { + PropertyLabel { text: qsTr("Source") } + + SecondColumnLayout { + UrlChooser { + backendValue: backendValues.source + filter: "*.mp4" + } + + ExpandingSpacer {} + } + + PropertyLabel { text: qsTr("Fill mode") } + + SecondColumnLayout { + ComboBox { + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + width: implicitWidth + scope: "VideoOutput" + model: ["Stretch", "PreserveAspectFit", "PreserveAspectCrop"] + backendValue: backendValues.fillMode + } + + ExpandingSpacer {} + } + + PropertyLabel { text: qsTr("Orientation") } + + SecondColumnLayout { + ComboBox { + id: orientationComboBox + implicitWidth: StudioTheme.Values.singleControlColumnWidth + + StudioTheme.Values.actionIndicatorWidth + width: implicitWidth + model: [0, 90, 180, 270, 360] + backendValue: backendValues.orientation + manualMapping: true + + onValueFromBackendChanged: { + if (!orientationComboBox.__isCompleted) + return + + orientationComboBox.syncIndexToBackendValue() + } + onCompressedActivated: { + if (!orientationComboBox.__isCompleted) + return + + if (orientationComboBox.block) + return + + backendValues.orientation.value = orientationComboBox.model[orientationComboBox.currentIndex] + } + Component.onCompleted: orientationComboBox.syncIndexToBackendValue() + + function syncIndexToBackendValue() { + orientationComboBox.block = true + orientationComboBox.currentIndex = orientationComboBox.model.indexOf(backendValues.orientation.value) + orientationComboBox.block = false + } + } + + ExpandingSpacer {} + } + } +} + diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtMultimedia/VideoSpecifics.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtMultimedia/VideoSpecifics.qml new file mode 100644 index 00000000000..45c8cce6290 --- /dev/null +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtMultimedia/VideoSpecifics.qml @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import HelperWidgets 2.0 +import StudioControls 1.0 as StudioControls +import StudioTheme 1.0 as StudioTheme + +Column { + anchors.left: parent.left + anchors.right: parent.right + + MediaPlayerSection {} + + VideoSection {} + + AudioSection {} +} diff --git a/src/plugins/qmldesigner/qtquickplugin/images/audio-16px.png b/src/plugins/qmldesigner/qtquickplugin/images/audio-16px.png new file mode 100644 index 0000000000000000000000000000000000000000..d9fd2f57bf4498e4abbbbfd4645bfa62e272bdbd GIT binary patch literal 267 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4i*LmhONKMUokK+T=H~r4AD5>I&nX@W1z@! zeL+_Zv%$%fP@7I6)bCt#Yr*nS) zy>rg?`KsB!bb}upS-y`w^V*mBmDA?@%$qsegZn7N%u0I8OQzxj}t_grVr$ zdEb~<6sfwpt(sIN>85aGnqgVk79B=MsYyFu8vbN6*?D3!JI~taBbJwss`dt4S<(GW z-l0|5kSplvSHrzg;j#rMCkUG9e3S^E`ZysXq+M9^^Qy&X;vD9*T+P2xFr)8Z?RVJ= YF%LrTFVdQ&MBb@0DvcRdjJ3c literal 0 HcmV?d00001 diff --git a/src/plugins/qmldesigner/qtquickplugin/images/audio-24px.png b/src/plugins/qmldesigner/qtquickplugin/images/audio-24px.png new file mode 100644 index 0000000000000000000000000000000000000000..9e477c806db00f9ddc7552df5db78f6d551c6887 GIT binary patch literal 521 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoFL=5*hIn*dy=I*)8Ysg0 z;Qc)guNnuIgKBOY1%!@>BXX~w>>MYv9Qm!UP#RNriL~6D+nJM15 zv0{Nxi-{7)v1~(iA-$PT+OoOKd7huK%f2@2c-(KF#aFW;PiL&tw3b@Un4TtFJEObf z{@j?$AB9t%2`u}_>z-xscjnE_S&e6G+OJFKtemH6@c2i^@|ibpPjpDjJ9kFYXHmJO zj@h(AmhVQJH?DC=<9n>@x6WaY!1al#bt2*mCeD1lVI^-3*Yyqi+TKLC*qk|IcjtKe zoN&>z(mW5f%S=Bq73Us5V)UdtS)#o_DqQ)I`noAw-&))`a*eO!)gw{4=|7*Ixznru zBcMn*R&s4cqRjq~siihbQ5BI2&9T;&O8Zv)as2x3VX)-(zpukC-n$VM%boI!?~V5I z_or^eAG^7Z#VdNp(odIdbP0l+XkKxDV|Q literal 0 HcmV?d00001 diff --git a/src/plugins/qmldesigner/qtquickplugin/images/audio-24px@2x.png b/src/plugins/qmldesigner/qtquickplugin/images/audio-24px@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..41948718fd106fedca16814c3235746ecd293604 GIT binary patch literal 1026 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4rT@hhJ-tuTNxM_%L9BuTp1V`{{R2KVieFf z1o~zc|6yQYs3{5Z3ua(oWMXDvW9Q=K;};MV5*87YkdakTR?*PZ($P0CF|)L?v9ot{ zcJuJ|^$Q3NNk~jiOV7wFC@QP0u4!m&YH9E2>gk;@anj@|Q)kSbw|MD_HETC*-o9h! zu08t>96ojC{N*b*Zr;B0;Nhbu&tJTJ{pQ`L&tJZN`~KtC?>~S4O?+#$oq>UIpQnps zh{y4#*KP)14iGv1aem-ME-sBN57>en*DUH#;NU7{6c=+{yXac4YtF&F0vY@3_wbv{ z%-lA6-=oS?KIhVl{EOaOUTm~-{>|9pa{bi$xTE~pSK40w_<45y0Y{!{O7AK)*MZgASH|Mx;jtHOe62Aj{%=AUvl zxS+!@J?pdn{{#F+-JfMAN!c;gY*1OfcCQrw0sdXuANB@cnkm~*_tG@c@a?qSvkJtv zY6$YOF;pn6+{<*MS1rMo{f4h+6?4H=mXarvi)~p9l38|f1Z-I%a=_a7f_Q`9$zRMO zNe%4`*HvoSybKR;9N4hL#(~Fxt6(#q0kc6s?4|b-3A_(Vw!T=OHi7X*NnG|h4xwy@ z{<-|+_gSRwF-^I<_F_KMb;gQUIr}aJ?(JX`W;p%sTik?_HJSQ-_chrYHk*kAzhm^e zUe=T3a8X!yBM{Kjab=A@$vVwb*V7w~#rUpD2x!%Y{-8&8g_bax(Hk&?JEa;m&!j8g33 zozKhO6?XX7PCx(s^B(`_mHYfxMd;kJw>Xg?E4E+&`ul2Ny25y)dt!^InC8ths@{M6mg?k3GImE`Ahu&^@=I zO*n-mSlxo&XsbK(=$E>~jpp*H z>o>B>M~MCL`m?g#H1)u`_oqu*f=w1^Gj5P(eG(Y5^W0Sl4-K95#x;yxMwb7@mfcNd QU|?YIboFyt=akR{00@nq3jhEB literal 0 HcmV?d00001 diff --git a/src/plugins/qmldesigner/qtquickplugin/images/audio-output-24px.png b/src/plugins/qmldesigner/qtquickplugin/images/audio-output-24px.png new file mode 100644 index 0000000000000000000000000000000000000000..f2133ca716739f83e9fe9284fdec8086317dc87b GIT binary patch literal 595 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuL8q&!_5Lp(a?UiI$qEtFyZ zaQ>^;ArV7Qvne*-L6=e#v%EGe}+@nXHSl= zZi^RQ?(u2<0@>2E(Fwud4F^g|IELmS-PS@UiFUe&iR(QM*|$@9pt>@ z>-6KU&N4&2~;Y7m3lf=R*y#hj!1zCAY+h_D)(LGJTRjoTJp^nm5N)*XRkg zE?gM3z4(GllS=PL?pG0=m7y)6%(Eh9)ldCs&uE|e`7fvS#;si|ZY!C84BeLMe=_gN z+Z_?E5v45CKYv@B^W5f0+|65SG=;-t4;tTW-KO!LKZ!H0OgN19MuYp0so&?TDb`Gz z+k1-fvg)4AKRUi{T6uHoF^i^N)mbmUHAFb5RNJT-G@aeio~`<4f8E;d8o#o?VtY^5 zTHHLkrSs&S_xCv_3A~b+uy=E?XzwkvWmKfmad+mshNeP zjjg?dle3Gfn}?^jk6%b=WOQs?LQ+b4c1~V?K~YIrc~y0NLt{((go%?TPn$7w&isXo zmaSZ~cKwEpo3?D-v2*v{{YQ=+KX>uk&D(eHJ$mx=+4C1~-+lW0`#5HKQM2yfnj>J!ov6)Gj`tDobO+5v^h*wNbW?|^5xbyd$w)i z+a#y4V*CD!E~;(QLjpcDSUs6i{r*R18ADb0)x>HC%kL}+3hGLqbg#0^36>A!-j~lT zSFzUo>;ZP=9egn>P2!o3`y9w@+$Os8c%ec*!{!6JZ=IPknJZX*Rz6TKxXN&>K|gBU zwgZ*S9?X_o|I0sUV)S8ttTiKa|0aG7*8~Sv^RF&fo;_4CSp1~Wdds@m2UG;+evdkB zd%!k%S*k!rM`fSeZtG1C~oK^hnr1~e*Wq2 z^<4{+Ek$OuOuVmDB>t|QDZO)-@s|0_3mw=!zdsOM)57@nUcNowQiFt!=66e^7n(kp z`o;67OkQ_KigL`VRYi5Iu1jhpe$BV@cDeD_nVt3jBvtPAJ4fFBQejlp4xIbSx;oK4 z%dx2|Dfi~x2%R<3r}7TB?)|vd`SI+@Y}@SX8M7+93$Gk+4q#wlVDNPHb6Mw<&;$Ud C+eYI6 literal 0 HcmV?d00001 diff --git a/src/plugins/qmldesigner/qtquickplugin/images/media-player-16px.png b/src/plugins/qmldesigner/qtquickplugin/images/media-player-16px.png new file mode 100644 index 0000000000000000000000000000000000000000..515287a8462d07725fdef587a5888d8718e99cbc GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd7G?$phPQVgfdnK1d_r6q7#RNl|GxqQBu}aN z$H2hAUJ~RN%)lU5(X{+Ki{Q!a3=9k^o-U3d9MQ=FElg}aZk8em={pWe_&f|?V>aH! i5#wvg$JVx#;mH$6>t_%ze|NsAAK?wBv zx9?zJVBjeU@(X5QU=g#=$(wWO{fB?`oHI%p7#Q?DT^vIsrX~xxF!8t)ol{`kWa(Ws z!GinBGlfElGv5^oC6WqGD7{Z$>D9*-kfByW(&x$nz7#J8BJYD@<);T3K0RWaI BK{fyY literal 0 HcmV?d00001 diff --git a/src/plugins/qmldesigner/qtquickplugin/images/media-player-24px@2x.png b/src/plugins/qmldesigner/qtquickplugin/images/media-player-24px@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..86ae5914acab5d2860d9bf6f9115c757a9923d8a GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4rT@hhJ-tuTNxM_oC178Tp1V`{{R2Kf&$RP zeW;p&fkCt+$S;_IfsIRANy{UoqIvnIJ+~h`{PN@1Z#8$9p9~BPF`h1tAs)xyUUlbd zFyLXmxUk%5@BdKC!#We1HhlN*daK{=B(|Sr`x=IwO`j(zZ0%;bkS`R_+s=I9jF7{2 zF9*vvd=9pIx!+7qxm>iStk6ixtj6kIq3J%xNAu4y*(^TM@c$A|=w}871_n=8KbLh* G2~7Y@?Q(Sh literal 0 HcmV?d00001 diff --git a/src/plugins/qmldesigner/qtquickplugin/images/video-16px.png b/src/plugins/qmldesigner/qtquickplugin/images/video-16px.png new file mode 100644 index 0000000000000000000000000000000000000000..caf9c16a61d38d4b72497d7637832381762b8d77 GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7=6kw0hFJ7ooovX(u_!Ry;B#2M@VnYe*Zd8!4Au!37%Ui*J*#gECouXnzZJ4b&)dV~cHqs-@4GzR z($2hYy&wPZbpvm~8s>ElQ#m6(?Kot0R#o|HqvHFsA&l&vw?j6>dhKfYU%$-SHC!`$ UW9FV-1_lNOPgg&ebxsLQ0J)`A*Z=?k literal 0 HcmV?d00001 diff --git a/src/plugins/qmldesigner/qtquickplugin/images/video-24px.png b/src/plugins/qmldesigner/qtquickplugin/images/video-24px.png new file mode 100644 index 0000000000000000000000000000000000000000..df1b84e5c99654bc885875e39a7db24db89f20b0 GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoo_e}ChIn+oy}HoL#ZjdF zaUTMeiw<@guf*YG-ZN3QK>DBb;=+M4q4;Wsz?Y=0jr~GKq q^^T76IjL#v+yQ6zop~up{WcE3=E#GelF{r5}E*sDSRFP literal 0 HcmV?d00001 diff --git a/src/plugins/qmldesigner/qtquickplugin/images/video-24px@2x.png b/src/plugins/qmldesigner/qtquickplugin/images/video-24px@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4b9f31faf390bcf63565bd4405cf088cd9c26c70 GIT binary patch literal 399 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4rT@hhJ-tuTNxM_8UuVnTp1V`{{R2KV&H&& zMK&h`1A|sckY6wZ0}BVAps1LHl(ek2jh$y|c0pn3#7UE<&D_4@>Vt=mpFDs4_TBpr zfBycP8pD5yfq`MNr;B5V$MLsQJ^7m)B%HOm@*cEVE9kAb@&7-wt%sAr#D(gfGs=HY z+LxmDc7ZyR_7-Obx7kmQ%Fo%BTqArZ!re@Jar4nrM^%z-zh?@TPYeIlA?qt+_p{Px zl4a210!9XVExijq^7sCEI!dgQe|phn#hzWA4%!h9;}1oOKCugtRxgi=<1L)7RQS^= i{C?Q))KZrU=A+`5reqtLeqdl=VDNPHb6Mw<&;$SyR=YU> literal 0 HcmV?d00001 diff --git a/src/plugins/qmldesigner/qtquickplugin/images/video-output-16px.png b/src/plugins/qmldesigner/qtquickplugin/images/video-output-16px.png new file mode 100644 index 0000000000000000000000000000000000000000..f00afc52e97f09e6d4991e73c286c72b4d83cb95 GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7UU<4VhFJ7oy=>^k;waGi zFn^k0t8J@7hr+xAK0Q97yZRFrt=!nDAhBkm`HQ#@T+7m)P;wlDn_ z-l1soNW?t0Vbe>4r#Ai0Ic1%*%`}3~vG2$dyf4lEm-$1?>)$sH=bS#!qMDrj;o{+Q tEKAnv8FVP#IVP}eL)YI&|Ld3evujyz=kgPp%fP_E;OXk;vd$@?2>=Z4d#V5c literal 0 HcmV?d00001 diff --git a/src/plugins/qmldesigner/qtquickplugin/images/video-output-24px.png b/src/plugins/qmldesigner/qtquickplugin/images/video-output-24px.png new file mode 100644 index 0000000000000000000000000000000000000000..fd3c89c08177c783140aa57f295011e9b1be878f GIT binary patch literal 387 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoy*ynULp(a)Ufq}#;waMo z@qVm0^Fb#jE+v()rq;X1+%COl)<{=SWYN)aHCW=Kwed42%jG+f9@MhfM?3-!KzHG&+Q>n{}SANNMoLo}8zg~R)hdoO_uvk~j zRr)tae~RV(gEd_@-aay(7yG1uL+0UC0h{jfh~qgkix(Vn{J_}}8K z(s!kP={GJnbs8kqCSeGZd$EWg!e^qfimBO`b2gJ9OwbG9`{E^m7f_$taI{Mnw~c-{y9 zeIy$Aj@5GXZ@l!R{Qv)d`HB_8 z5?SYn&Sqd>@GJ@P3ua(oWMbjq&svlDTeg)SH<)lp`iDHj z1HC%!N1b(EayD8v!d0`}LteXoy3F@J=0*0y-M7xZTq%${rPXI^x4oT(ID5~M13z;3 zOV)|D#E4mFRWD@BiMrKbygQ^jI-&E11NV;CzvLP$O{aeO&cLwkP#-fx{bZJgjQK1H zUVau2Ow8h=`52631l|Pc?tH~n%;ueU^v)zh!zK3=uPk;ud^=!9images/text-edit-icon16.png images/text-input-icon16.png images/webview-icon16.png + source/audio.qml source/listview.qml source/listviewv2.qml source/gridview.qml @@ -83,5 +84,20 @@ images/loader-icon.png images/loader-icon@2x.png images/loader-icon16.png + images/audio-16px.png + images/audio-24px.png + images/audio-24px@2x.png + images/audio-output-16px.png + images/audio-output-24px.png + images/audio-output-24px@2x.png + images/media-player-16px.png + images/media-player-24px.png + images/media-player-24px@2x.png + images/video-16px.png + images/video-24px.png + images/video-24px@2x.png + images/video-output-16px.png + images/video-output-24px.png + images/video-output-24px@2x.png diff --git a/src/plugins/qmldesigner/qtquickplugin/quick.metainfo b/src/plugins/qmldesigner/qtquickplugin/quick.metainfo index 5ad17c372e2..7858ca08ea1 100644 --- a/src/plugins/qmldesigner/qtquickplugin/quick.metainfo +++ b/src/plugins/qmldesigner/qtquickplugin/quick.metainfo @@ -501,4 +501,89 @@ MetaInfo { version: "2.0" } } + + Type { + name: "QtMultimedia.MediaPlayer" + icon: ":/qtquickplugin/images/media-player-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeContainer: false + } + + ItemLibraryEntry { + name: "Media Player" + category: "f.Qt Quick - Multimedia" + libraryIcon: ":/qtquickplugin/images/media-player-24px.png" + version: "6.0" + requiredImport: "QtMultimedia" + } + } + + Type { + name: "QtMultimedia.MediaPlayer" + icon: ":/qtquickplugin/images/audio-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeContainer: false + } + + ItemLibraryEntry { + name: "Audio" + category: "f.Qt Quick - Multimedia" + libraryIcon: ":/qtquickplugin/images/audio-24px.png" + version: "6.0" + requiredImport: "QtMultimedia" + + QmlSource { source: ":/qtquickplugin/source/audio.qml" } + } + } + + Type { + name: "QtMultimedia.AudioOutput" + icon: ":/qtquickplugin/images/audio-output-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: false + canBeContainer: false + } + + ItemLibraryEntry { + name: "Audio Output" + category: "f.Qt Quick - Multimedia" + libraryIcon: ":/qtquickplugin/images/audio-output-24px.png" + version: "6.0" + requiredImport: "QtMultimedia" + } + } + + Type { + name: "QtMultimedia.Video" + icon: ":/qtquickplugin/images/video-16px.png" + + Hints { + visibleInNavigator: true + canBeDroppedInNavigator: true + canBeDroppedInFormEditor: true + canBeContainer: false + } + + ItemLibraryEntry { + name: "Video" + category: "f.Qt Quick - Multimedia" + libraryIcon: ":/qtquickplugin/images/video-24px.png" + version: "6.0" + requiredImport: "QtMultimedia" + + Property { name: "width"; type: "int"; value: 200; } + Property { name: "height"; type: "int"; value: 200; } + } + } } diff --git a/src/plugins/qmldesigner/qtquickplugin/source/audio.qml b/src/plugins/qmldesigner/qtquickplugin/source/audio.qml new file mode 100644 index 00000000000..b3d1347e85e --- /dev/null +++ b/src/plugins/qmldesigner/qtquickplugin/source/audio.qml @@ -0,0 +1,35 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +import QtQuick 2.0 +import QtMultimedia 6.0 + +MediaPlayer { + audioOutput: output + + AudioOutput { + id: output + } +} From 1c526c827dca019fae833f50c74af53e747fdf9f Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Tue, 2 Nov 2021 17:21:00 +0200 Subject: [PATCH 39/48] QmlDesigner: Improve error message on trying to edit empty component Task-number: QDS-5308 Change-Id: I401a375443e2df52a2656a34ab4c650664b0df97 Reviewed-by: Thomas Hartmann Reviewed-by: Qt CI Bot --- .../designercore/model/componenttextmodifier.cpp | 3 +++ .../qmldesigner/designercore/model/texttomodelmerger.cpp | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/src/plugins/qmldesigner/designercore/model/componenttextmodifier.cpp b/src/plugins/qmldesigner/designercore/model/componenttextmodifier.cpp index 42dbbdd2a0e..f9255225058 100644 --- a/src/plugins/qmldesigner/designercore/model/componenttextmodifier.cpp +++ b/src/plugins/qmldesigner/designercore/model/componenttextmodifier.cpp @@ -123,6 +123,9 @@ QTextDocument *ComponentTextModifier::textDocument() const QString ComponentTextModifier::text() const { + if (m_componentStartOffset == -1) + return {}; + QString txt(m_originalModifier->text()); const int leader = m_componentStartOffset - m_rootStartOffset; diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp index b8b2c427692..49845ab13fd 100644 --- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp +++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp @@ -1044,6 +1044,15 @@ void TextToModelMerger::setupUsedImports() Document::MutablePtr TextToModelMerger::createParsedDocument(const QUrl &url, const QString &data, QList *errors) { + if (data.isEmpty()) { + if (errors) { + QmlJS::DiagnosticMessage msg; + msg.message = QObject::tr("Empty document"); + errors->append(DocumentMessage(msg, url)); + } + return {}; + } + const QString fileName = url.toLocalFile(); Dialect dialect = ModelManagerInterface::guessLanguageOfFile(fileName); From 416cd69a5e7ab9e900320181a637ce30a40b9c4d Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 1 Nov 2021 11:02:58 +0100 Subject: [PATCH 40/48] Editor: unselect text on mouse release event Update the main cursor after calling QPlainTextEdit::mouseReleaseEvent. Calling that function might change the selection without changing the position, so it wont emit cursor position changed, and the multi cursor does not get updated properly. Task-number: QTCREATORBUG-26493 Change-Id: Ie310ee9a4c66897766af87065ee42fcd01302854 Reviewed-by: Christian Stenger --- src/plugins/texteditor/texteditor.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index a54732ec39f..59ac0bba32c 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -5245,6 +5245,14 @@ void TextEditorWidget::mouseReleaseEvent(QMouseEvent *e) return; QPlainTextEdit::mouseReleaseEvent(e); + + d->setClipboardSelection(); + const QTextCursor plainTextEditCursor = textCursor(); + const QTextCursor multiMainCursor = multiTextCursor().mainCursor(); + if (multiMainCursor.position() != plainTextEditCursor.position() + || multiMainCursor.anchor() != plainTextEditCursor.anchor()) { + doSetTextCursor(plainTextEditCursor, true); + } } void TextEditorWidget::mouseDoubleClickEvent(QMouseEvent *e) From 33b5fa25a8458fcf0f39a2a3b292dc6039a7248c Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 3 Nov 2021 18:20:13 +0100 Subject: [PATCH 41/48] ClangCodeModel: Do not mark the LHS of assignments as output parameters ... when using clangd. Amends a1f088376a. Change-Id: Ief442d978e1cf3027dcba5a3c75b66c0f4ae8809 Reviewed-by: David Schulz --- src/plugins/clangcodemodel/clangdclient.cpp | 25 +++++++++++++++++-- .../clangcodemodel/test/clangdtests.cpp | 5 +++- .../test/data/highlighting/highlighting.cpp | 5 ++++ 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index fd1b9b87472..f7a55a099a5 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -2404,16 +2404,37 @@ static void semanticHighlighter(QFutureInterface &future, return true; if (token.type != "variable" && token.type != "property" && token.type != "parameter") return false; - const QList path = getAstPath(ast, tokenRange(token)); + const Range range = tokenRange(token); + const QList path = getAstPath(ast, range); if (path.size() < 2) return false; if (path.last().hasConstType()) return false; for (auto it = path.rbegin() + 1; it != path.rend(); ++it) { if (it->kind() == "Call" || it->kind() == "CXXConstruct" - || it->kind() == "MemberInitializer" || it->kind() == "CXXOperatorCall") { + || it->kind() == "MemberInitializer") { return true; } + + // The token should get marked for e.g. lambdas, but not for assignment operators, + // where the user sees that it's being written. + if (it->kind() == "CXXOperatorCall") { + const QList children = it->children().value_or(QList()); + if (children.size() < 2) + return false; + if (!children.last().range().contains(range)) + return false; + QList firstChildTree{children.first()}; + while (!firstChildTree.isEmpty()) { + const AstNode n = firstChildTree.takeFirst(); + const QString detail = n.detail().value_or(QString()); + if (detail.startsWith("operator")) + return !detail.contains('='); + firstChildTree << n.children().value_or(QList()); + } + return true; + } + if (it->kind().endsWith("Cast") && it->hasConstType()) return false; if (it->kind() == "Member" && it->arcanaContains("(") diff --git a/src/plugins/clangcodemodel/test/clangdtests.cpp b/src/plugins/clangcodemodel/test/clangdtests.cpp index 22fd7a20c66..927728d8754 100644 --- a/src/plugins/clangcodemodel/test/clangdtests.cpp +++ b/src/plugins/clangcodemodel/test/clangdtests.cpp @@ -1040,7 +1040,9 @@ void ClangdTestHighlighting::test_data() << QList{C_PARAMETER, C_OUTPUT_ARGUMENT} << 0; QTest::newRow("typedef as underlying type in enum declaration") << 424 << 21 << 424 << 39 << QList{C_TYPE} << 0; - QTest::newRow("argument to user-defined subscript operator") << 434 << 12 << 434 << 17 + QTest::newRow("argument 1 to user-defined subscript operator") << 434 << 5 << 434 << 11 + << QList{C_PARAMETER} << 0; + QTest::newRow("argument 2 to user-defined subscript operator") << 434 << 12 << 434 << 17 << QList{C_PARAMETER, C_OUTPUT_ARGUMENT} << 0; QTest::newRow("partial class template specialization") << 553 << 25 << 553 << 28 << QList{C_TYPE, C_DECLARATION} << 0; @@ -1246,6 +1248,7 @@ void ClangdTestHighlighting::test_data() << QList{C_LOCAL, C_OUTPUT_ARGUMENT} << 0; QTest::newRow("const argument to unnamed lambda") << 830 << 16 << 830 << 19 << QList{C_LOCAL} << 0; + QTest::newRow("simple assignment") << 835 << 5 << 835 << 6 << QList{C_LOCAL} << 0; } void ClangdTestHighlighting::test() diff --git a/src/plugins/clangcodemodel/test/data/highlighting/highlighting.cpp b/src/plugins/clangcodemodel/test/data/highlighting/highlighting.cpp index 6e0ed1c8ec8..652d9540c80 100644 --- a/src/plugins/clangcodemodel/test/data/highlighting/highlighting.cpp +++ b/src/plugins/clangcodemodel/test/data/highlighting/highlighting.cpp @@ -829,3 +829,8 @@ void lambdaArgTest() [](int &) {}(val); [](int) {}(val); } + +void assignmentTest() { + struct S {} s; + s = {}; +} From 98e5639f78302d16b4d93b3f20dd2f546ab25074 Mon Sep 17 00:00:00 2001 From: Samuel Ghinet Date: Wed, 13 Oct 2021 09:04:16 +0300 Subject: [PATCH 42/48] Make use of font icons for the wizards Qt Design Studio will be using font icons to display project types (wizards) in the New Project dialog box, rather than .png icons. The unicode values will be saved in the wizard.json files as "fontIconCode". We need a way to access that value in code. Task-number: QDS-4490 Change-Id: I5dbcc522a707c288ee1f05ab6ec1cb24bcd75025 Reviewed-by: Eike Ziller --- src/plugins/coreplugin/iwizardfactory.h | 3 +++ src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/src/plugins/coreplugin/iwizardfactory.h b/src/plugins/coreplugin/iwizardfactory.h index 1e27ec6c900..0cb1b96d43b 100644 --- a/src/plugins/coreplugin/iwizardfactory.h +++ b/src/plugins/coreplugin/iwizardfactory.h @@ -64,6 +64,7 @@ public: Utils::Id id() const { return m_id; } WizardKind kind() const { return m_supportedProjectTypes.isEmpty() ? FileWizard : ProjectWizard; } QIcon icon() const { return m_icon; } + QString fontIcondCode() const { return m_fontIconCode; } QString description() const { return m_description; } QString displayName() const { return m_displayName; } QString category() const { return m_category; } @@ -78,6 +79,7 @@ public: void setId(const Utils::Id id) { m_id = id; } void setSupportedProjectTypes(const QSet &projectTypes) { m_supportedProjectTypes = projectTypes; } void setIcon(const QIcon &icon, const QString &iconText = {}); + void setFontIconCode(const QString &code) { m_fontIconCode = code; } void setDescription(const QString &description) { m_description = description; } void setDisplayName(const QString &displayName) { m_displayName = displayName; } void setCategory(const QString &category) { m_category = category; } @@ -135,6 +137,7 @@ private: QAction *m_action = nullptr; QIcon m_icon; + QString m_fontIconCode; QString m_description; QString m_displayName; QString m_category; diff --git a/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp b/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp index 1c8c710743c..31155c276c0 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp +++ b/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp @@ -72,6 +72,7 @@ const char CATEGORY_NAME_KEY[] = "trDisplayCategory"; const char DISPLAY_NAME_KEY[] = "trDisplayName"; const char ICON_KEY[] = "icon"; const char ICON_TEXT_KEY[] = "iconText"; +const char FONT_ICON_CODE_KEY[] = "fontIconCode"; const char IMAGE_KEY[] = "image"; const char ICON_KIND_KEY[] = "iconKind"; const char DESCRIPTION_KEY[] = "trDescription"; @@ -737,6 +738,9 @@ bool JsonWizardFactory::initialize(const QVariantMap &data, const FilePath &base : QIcon(iconPath.toString()), iconText); + const QString fontIconCode = data.value(QLatin1String(FONT_ICON_CODE_KEY)).toString(); + setFontIconCode(fontIconCode); + strVal = data.value(QLatin1String(IMAGE_KEY)).toString(); if (!strVal.isEmpty()) { const FilePath imagePath = baseDir.resolvePath(strVal); From 4022043792686cd87e92372b40b873af4cbd36eb Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 3 Nov 2021 15:30:57 +0100 Subject: [PATCH 43/48] ClangCodeModel: Ignore redundant semantic tokens This can now happen due to the newly implemented refresh support. Change-Id: If64feede84b044140f7ec04e317289d3f493aa53 Reviewed-by: David Schulz --- src/plugins/clangcodemodel/clangdclient.cpp | 14 ++++++++++++++ .../languageclient/semantichighlightsupport.h | 5 +++++ 2 files changed, 19 insertions(+) diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index f7a55a099a5..0f9acb58c1c 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -1065,6 +1065,8 @@ public: // The highlighters are owned by their respective documents. std::unordered_map highlighters; + QHash, int>> previousTokens; + // The ranges of symbols referring to virtual functions, with document version, // as extracted by the highlighting procedure. QHash, int>> virtualRanges; @@ -1385,6 +1387,7 @@ void ClangdClient::handleDocumentClosed(TextDocument *doc) { d->highlighters.erase(doc); d->astCache.remove(doc); + d->previousTokens.remove(doc); d->virtualRanges.remove(doc); } @@ -2582,6 +2585,17 @@ void ClangdClient::Private::handleSemanticTokens(TextDocument *doc, << version << q->documentVersion(doc->filePath()); return; } + const auto previous = previousTokens.find(doc); + if (previous != previousTokens.end()) { + if (previous->first == tokens && previous->second == version) { + qCDebug(clangdLogHighlight) << "tokens and version same as last time; nothing to do"; + return; + } + previous->first = tokens; + previous->second = version; + } else { + previousTokens.insert(doc, qMakePair(tokens, version)); + } for (const ExpandedSemanticToken &t : tokens) qCDebug(clangdLogHighlight()) << '\t' << t.line << t.column << t.length << t.type << t.modifiers; diff --git a/src/plugins/languageclient/semantichighlightsupport.h b/src/plugins/languageclient/semantichighlightsupport.h index 084b3c1058a..110b14f23b0 100644 --- a/src/plugins/languageclient/semantichighlightsupport.h +++ b/src/plugins/languageclient/semantichighlightsupport.h @@ -50,6 +50,11 @@ public: QString type; QStringList modifiers; }; +inline bool operator==(const ExpandedSemanticToken &t1, const ExpandedSemanticToken &t2) +{ + return t1.line == t2.line && t1.column == t2.column && t1.length == t2.length + && t1.type == t2.type && t1.modifiers == t2.modifiers; +} using SemanticTokensHandler = std::function &, int)>; From 662d9a9564f2df720c9570190f4ae2af97d8af0d Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Thu, 4 Nov 2021 07:21:03 +0100 Subject: [PATCH 44/48] QmlDesigner: Fix compile with Qt5 Change-Id: I366290900fa7198648ca1c6163a35140e0f0a3a9 Reviewed-by: Eike Ziller --- .../components/componentcore/svgpasteaction.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/plugins/qmldesigner/components/componentcore/svgpasteaction.cpp b/src/plugins/qmldesigner/components/componentcore/svgpasteaction.cpp index 1d39d1458b9..dac06f73e69 100644 --- a/src/plugins/qmldesigner/components/componentcore/svgpasteaction.cpp +++ b/src/plugins/qmldesigner/components/componentcore/svgpasteaction.cpp @@ -38,6 +38,9 @@ #include #include #include +#include + +#include namespace QmlDesigner { @@ -605,7 +608,7 @@ static const std::initializer_list tagAllowList{ // fillOpacity and strokeOpacity aren't actual QML properties, but get mapped anyways // for completeness. -static const std::initializer_list> mapping{ +static const std::initializer_list> mapping{ {u"fill", "fillColor"}, {u"stroke", "strokeColor"}, {u"stroke-width", "strokeWidth"}, @@ -888,7 +891,7 @@ void applyCSSRules(const CSSRule &cssRule, PropertyMap &properties) for (const CSSProperty &property : cssRule) { const QString directive = property.directive; if (auto iter = findKey(mapping, directive); iter != mapping.end()) { - const QByteArray directive = iter->second.toByteArray(); + const QByteArray directive = iter->second.toUtf8(); properties.insert(directive, convertValue(directive, property.value)); } } @@ -935,7 +938,7 @@ void flattenTransformsAndStyles(const QDomElement &element, if (attributeValue.isEmpty()) continue; - const QByteArray directive = p.second.toByteArray(); + const QByteArray directive = p.second.toUtf8(); properties.insert(directive, convertValue(directive, attributeValue)); } @@ -1080,7 +1083,7 @@ PropertyMap generatePolygonProperties(const QDomElement &e, const CSSRules &cssR QPolygonF polygon; for (int i = 0; i < pointList.length(); i += 2) - polygon.emplace_back(pointList[i].toFloat(), pointList[i + 1].toFloat()); + polygon.push_back({pointList[i].toFloat(), pointList[i + 1].toFloat()}); if (!polygon.isClosed() && polygon.size()) polygon.push_back(polygon.front()); From b7d0902257e12b9d8ad651ad6389a70ea4ef8907 Mon Sep 17 00:00:00 2001 From: Samuel Ghinet Date: Wed, 13 Oct 2021 09:20:01 +0300 Subject: [PATCH 45/48] Add new theme colors necessary for New Project Dialog on QDS We need colors for the dialog box background, and for warning text messages. Note: We currently don't have carefully picked colors for warning, so I used standard yellow (ffff00). The values, for each theme, will need to be adjusted later on. Task-number: QDS-4490 Change-Id: I257522216b03610d9f12951e7cb6f7cfa182489f Reviewed-by: Alessandro Portale --- .../propertyEditorQmlSources/imports/StudioTheme/Values.qml | 5 +++++ share/qtcreator/themes/dark.creatortheme | 4 ++++ share/qtcreator/themes/default.creatortheme | 4 ++++ share/qtcreator/themes/design-light.creatortheme | 4 ++++ share/qtcreator/themes/design.creatortheme | 4 ++++ share/qtcreator/themes/flat-dark.creatortheme | 4 ++++ share/qtcreator/themes/flat-light.creatortheme | 4 ++++ share/qtcreator/themes/flat.creatortheme | 4 ++++ src/libs/utils/theme/theme.h | 4 ++++ 9 files changed, 37 insertions(+) diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/Values.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/Values.qml index 9e72fea4153..031921c8ba0 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/Values.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/Values.qml @@ -205,6 +205,7 @@ QtObject { property string themeInteraction: Theme.color(Theme.DSinteraction) property string themeError: Theme.color(Theme.DSerrorColor) + property string themeWarning: Theme.color(Theme.DSwarningColor) property string themeDisabled: Theme.color(Theme.DSdisabledColor) property string themeAliasIconChecked: Theme.color(Theme.DSnavigatorAliasIconChecked) @@ -220,6 +221,10 @@ QtObject { property string themeControlOutlineInteraction: Theme.color(Theme.DScontrolOutlineInteraction) property string themeControlOutlineDisabled: Theme.color(Theme.DScontrolOutlineDisabled) + // Panels & Panes + property string themeBackgroundColorNormal: Theme.color(Theme.DSBackgroundColorNormal) + property string themeBackgroundColorAlternate: Theme.color(Theme.DSBackgroundColorAlternate) + // Text colors property string themeTextColor: Theme.color(Theme.DStextColor) property string themeTextColorDisabled: Theme.color(Theme.DStextColorDisabled) diff --git a/share/qtcreator/themes/dark.creatortheme b/share/qtcreator/themes/dark.creatortheme index 4f92228aa36..e0e02c6d49d 100644 --- a/share/qtcreator/themes/dark.creatortheme +++ b/share/qtcreator/themes/dark.creatortheme @@ -27,6 +27,7 @@ DSpanelBackground=ff323232 DSinteraction=ff2aafd3 DSerrorColor=ffdf3a3a +DSwarningColor=warning DSdisabledColor=ff707070 DScontrolBackground=ff323232 @@ -154,6 +155,9 @@ DStoolTipText=ffdadada DSUnimportedModuleColor=ffe33c2e +DSBackgroundColorAlternate=alternateBackground +DSBackgroundColorNormal=normalBackground + ;DS controls theme END BackgroundColorAlternate=alternateBackground diff --git a/share/qtcreator/themes/default.creatortheme b/share/qtcreator/themes/default.creatortheme index aeabe826906..9a7729b9cf0 100644 --- a/share/qtcreator/themes/default.creatortheme +++ b/share/qtcreator/themes/default.creatortheme @@ -18,6 +18,7 @@ DSpanelBackground=ffeaeaea DSinteraction=ff2aafd3 DSerrorColor=ffdf3a3a +DSwarningColor=warning DSdisabledColor=ff8e8e8e DScontrolBackground=ffeaeaea @@ -145,6 +146,9 @@ DStoolTipText=ffdadada DSUnimportedModuleColor=ffe33c2e +DSBackgroundColorAlternate=alternateBackground +DSBackgroundColorNormal=normalBackground + ;DS controls theme END BackgroundColorAlternate=ff3d3d3d diff --git a/share/qtcreator/themes/design-light.creatortheme b/share/qtcreator/themes/design-light.creatortheme index 70ee4462cb6..9f5dae6d574 100644 --- a/share/qtcreator/themes/design-light.creatortheme +++ b/share/qtcreator/themes/design-light.creatortheme @@ -32,6 +32,7 @@ DSpanelBackground=ffeaeaea DSinteraction=ff2aafd3 DSerrorColor=ffdf3a3a +DSwarningColor=warning DSdisabledColor=ff8e8e8e DScontrolBackground=ffeaeaea @@ -159,6 +160,9 @@ DStoolTipText=ffdadada DSUnimportedModuleColor=ffe33c2e +DSBackgroundColorAlternate=alternateBackground +DSBackgroundColorNormal=normalBackground + ;DS controls theme END BackgroundColorAlternate=alternateBackground diff --git a/share/qtcreator/themes/design.creatortheme b/share/qtcreator/themes/design.creatortheme index daffe924a6a..8fe6d59b5d8 100644 --- a/share/qtcreator/themes/design.creatortheme +++ b/share/qtcreator/themes/design.creatortheme @@ -29,6 +29,7 @@ DSpanelBackground=ff323232 DSinteraction=ff2aafd3 DSerrorColor=ffdf3a3a +DSwarningColor=warning DSdisabledColor=ff707070 DScontrolBackground=ff323232 @@ -156,6 +157,9 @@ DStoolTipText=ffdadada DSUnimportedModuleColor=ffe33c2e +DSBackgroundColorAlternate=alternateBackground +DSBackgroundColorNormal=normalBackground + ;DS controls theme END BackgroundColorAlternate=alternateBackground diff --git a/share/qtcreator/themes/flat-dark.creatortheme b/share/qtcreator/themes/flat-dark.creatortheme index 6265003f1df..a09df062adb 100644 --- a/share/qtcreator/themes/flat-dark.creatortheme +++ b/share/qtcreator/themes/flat-dark.creatortheme @@ -31,6 +31,7 @@ DSpanelBackground=ff323232 DSinteraction=ff2aafd3 DSerrorColor=ffdf3a3a +DSwarningColor=warning DSdisabledColor=ff707070 DScontrolBackground=ff323232 @@ -158,6 +159,9 @@ DStoolTipText=ffdadada DSUnimportedModuleColor=ffe33c2e +DSBackgroundColorAlternate=alternateBackground +DSBackgroundColorNormal=normalBackground + ;DS controls theme END BackgroundColorAlternate=alternateBackground diff --git a/share/qtcreator/themes/flat-light.creatortheme b/share/qtcreator/themes/flat-light.creatortheme index b98478d134d..c7704cfb783 100644 --- a/share/qtcreator/themes/flat-light.creatortheme +++ b/share/qtcreator/themes/flat-light.creatortheme @@ -27,6 +27,7 @@ DSpanelBackground=ffeaeaea DSinteraction=ff2aafd3 DSerrorColor=ffdf3a3a +DSwarningColor=warning DSdisabledColor=ff8e8e8e DScontrolBackground=ffeaeaea @@ -154,6 +155,9 @@ DStoolTipText=ffdadada DSUnimportedModuleColor=ffe33c2e +DSBackgroundColorAlternate=alternateBackground +DSBackgroundColorNormal=normalBackground + ;DS controls theme END BackgroundColorAlternate=alternateBackground diff --git a/share/qtcreator/themes/flat.creatortheme b/share/qtcreator/themes/flat.creatortheme index b6c8f09d9e4..17e3b1aafd0 100644 --- a/share/qtcreator/themes/flat.creatortheme +++ b/share/qtcreator/themes/flat.creatortheme @@ -25,6 +25,7 @@ DSpanelBackground=ff323232 DSinteraction=ff2aafd3 DSerrorColor=ffdf3a3a +DSwarningColor=warning DSdisabledColor=ff707070 DScontrolBackground=ff323232 @@ -152,6 +153,9 @@ DStoolTipText=ffdadada DSUnimportedModuleColor=ffe33c2e +DSBackgroundColorAlternate=alternateBackground +DSBackgroundColorNormal=normalBackground + ;DS controls theme END BackgroundColorAlternate=alternateBackground diff --git a/src/libs/utils/theme/theme.h b/src/libs/utils/theme/theme.h index 3af43ed6f9e..3f3249d71ea 100644 --- a/src/libs/utils/theme/theme.h +++ b/src/libs/utils/theme/theme.h @@ -309,6 +309,7 @@ public: DSpanelBackground, DSinteraction, DSerrorColor, + DSwarningColor, DSdisabledColor, DScontrolBackground, DScontrolBackgroundInteraction, @@ -422,6 +423,9 @@ public: DStoolTipOutline, DStoolTipText, + DSBackgroundColorNormal, + DSBackgroundColorAlternate, + DSUnimportedModuleColor }; From 08b6e0239fbaea5e1e83f95442636d97d4708c9f Mon Sep 17 00:00:00 2001 From: Oliver Wolff Date: Wed, 3 Nov 2021 13:34:47 +0100 Subject: [PATCH 46/48] Add support for MSVC2022 (Preview) 2022 should be binary compatibility with previous versions (see https://docs.microsoft.com/en-us/cpp/porting/binary-compat-2015-2017?view=msvc-160). Change-Id: I4200f0c7d78adb0d1f352cd527c0f6041a1f5283 Reviewed-by: Qt CI Bot Reviewed-by: David Schulz --- src/plugins/mcusupport/mcusupportoptions.cpp | 1 + src/plugins/projectexplorer/abi.cpp | 16 ++++++++++++---- src/plugins/projectexplorer/abi.h | 3 ++- src/plugins/projectexplorer/msvctoolchain.cpp | 16 +++++++++++++++- src/plugins/qtsupport/baseqtversion.cpp | 2 ++ 5 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index 6ac2e30fd13..75f829b5308 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -381,6 +381,7 @@ static ToolChain *msvcToolChain(Id language) { ToolChain *toolChain = ToolChainManager::toolChain([language](const ToolChain *t) { const Abi abi = t->targetAbi(); + // TODO: Should Abi::WindowsMsvc2022Flavor be added too? return (abi.osFlavor() == Abi::WindowsMsvc2017Flavor || abi.osFlavor() == Abi::WindowsMsvc2019Flavor) && abi.architecture() == Abi::X86Architecture && abi.wordWidth() == 64 diff --git a/src/plugins/projectexplorer/abi.cpp b/src/plugins/projectexplorer/abi.cpp index 10134096d9c..62fd00b7457 100644 --- a/src/plugins/projectexplorer/abi.cpp +++ b/src/plugins/projectexplorer/abi.cpp @@ -111,6 +111,7 @@ static void setupPreregisteredOsFlavors() { registerOsFlavor(Abi::WindowsMsvc2015Flavor, "msvc2015", {Abi::OS::WindowsOS}); registerOsFlavor(Abi::WindowsMsvc2017Flavor, "msvc2017", {Abi::OS::WindowsOS}); registerOsFlavor(Abi::WindowsMsvc2019Flavor, "msvc2019", {Abi::OS::WindowsOS}); + registerOsFlavor(Abi::WindowsMsvc2022Flavor, "msvc2022", {Abi::OS::WindowsOS}); registerOsFlavor(Abi::WindowsMSysFlavor, "msys", {Abi::OS::WindowsOS}); registerOsFlavor(Abi::WindowsCEFlavor, "ce", {Abi::OS::WindowsOS}); registerOsFlavor(Abi::VxWorksFlavor, "vxworks", {Abi::OS::VxWorks}); @@ -285,7 +286,9 @@ static Abis parseCoffHeader(const QByteArray &data) flavor = Abi::WindowsMsvc2013Flavor; break; case 14: - if (minorLinker >= quint8(20)) + if (minorLinker >= quint8(30)) + flavor = Abi::WindowsMsvc2022Flavor; + else if (minorLinker >= quint8(20)) flavor = Abi::WindowsMsvc2019Flavor; else if (minorLinker >= quint8(10)) flavor = Abi::WindowsMsvc2017Flavor; @@ -295,6 +298,9 @@ static Abis parseCoffHeader(const QByteArray &data) case 15: flavor = Abi::WindowsMsvc2019Flavor; break; + case 16: + flavor = Abi::WindowsMsvc2022Flavor; + break; default: // Keep unknown flavor if (minorLinker != 0) flavor = Abi::WindowsMSysFlavor; // MSVC seems to avoid using minor numbers @@ -690,9 +696,9 @@ bool Abi::operator == (const Abi &other) const static bool compatibleMSVCFlavors(const Abi::OSFlavor &left, const Abi ::OSFlavor &right) { - // MSVC 2019, 2017 and 2015 are compatible - return left >= Abi::WindowsMsvc2015Flavor && left <= Abi::WindowsMsvc2019Flavor - && right >= Abi::WindowsMsvc2015Flavor && right <= Abi::WindowsMsvc2019Flavor; + // MSVC 2022, 2019, 2017 and 2015 are compatible + return left >= Abi::WindowsMsvc2015Flavor && left <= Abi::WindowsMsvc2022Flavor + && right >= Abi::WindowsMsvc2015Flavor && right <= Abi::WindowsMsvc2022Flavor; } bool Abi::isCompatibleWith(const Abi &other) const @@ -1089,6 +1095,8 @@ bool Abi::osSupportsFlavor(const Abi::OS &os, const Abi::OSFlavor &flavor) Abi::OSFlavor Abi::flavorForMsvcVersion(int version) { + if (version >= 1930) + return WindowsMsvc2022Flavor; if (version >= 1920) return WindowsMsvc2019Flavor; if (version >= 1910) diff --git a/src/plugins/projectexplorer/abi.h b/src/plugins/projectexplorer/abi.h index 2ddfdfa8817..56272baced3 100644 --- a/src/plugins/projectexplorer/abi.h +++ b/src/plugins/projectexplorer/abi.h @@ -112,7 +112,8 @@ public: WindowsMsvc2015Flavor, WindowsMsvc2017Flavor, WindowsMsvc2019Flavor, - WindowsLastMsvcFlavor = WindowsMsvc2019Flavor, + WindowsMsvc2022Flavor, + WindowsLastMsvcFlavor = WindowsMsvc2022Flavor, WindowsMSysFlavor, WindowsCEFlavor, diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp index 80b7ae637db..56b7431073c 100644 --- a/src/plugins/projectexplorer/msvctoolchain.cpp +++ b/src/plugins/projectexplorer/msvctoolchain.cpp @@ -429,7 +429,9 @@ static Abi findAbiOfMsvc(MsvcToolChain::Type type, else if (version == QLatin1String("v7.0A") || version == QLatin1String("v7.1")) msvcVersionString = QLatin1String("10.0"); } - if (msvcVersionString.startsWith(QLatin1String("16."))) + if (msvcVersionString.startsWith(QLatin1String("17."))) + flavor = Abi::WindowsMsvc2022Flavor; + else if (msvcVersionString.startsWith(QLatin1String("16."))) flavor = Abi::WindowsMsvc2019Flavor; else if (msvcVersionString.startsWith(QLatin1String("15."))) flavor = Abi::WindowsMsvc2017Flavor; @@ -926,6 +928,10 @@ QStringList MsvcToolChain::suggestedMkspecList() const "winrt-arm-msvc2019", "winrt-x86-msvc2019", "winrt-x64-msvc2019"}; + case Abi::WindowsMsvc2022Flavor: + return {"win32-msvc", + "win32-msvc2022", + "win32-arm64-msvc"}; default: break; } @@ -937,6 +943,14 @@ Abis MsvcToolChain::supportedAbis() const Abi abi = targetAbi(); Abis abis = {abi}; switch (abi.osFlavor()) { + case Abi::WindowsMsvc2022Flavor: + abis << Abi(abi.architecture(), + abi.os(), + Abi::WindowsMsvc2019Flavor, + abi.binaryFormat(), + abi.wordWidth(), + abi.param()); + Q_FALLTHROUGH(); case Abi::WindowsMsvc2019Flavor: abis << Abi(abi.architecture(), abi.os(), diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp index 4275f4e3412..61e943824ae 100644 --- a/src/plugins/qtsupport/baseqtversion.cpp +++ b/src/plugins/qtsupport/baseqtversion.cpp @@ -2274,6 +2274,8 @@ static Abi refineAbiFromBuildString(const QByteArray &buildString, const Abi &pr flavor = Abi::WindowsMsvc2017Flavor; } else if (compiler.startsWith("MSVC 2019") && os == Abi::WindowsOS) { flavor = Abi::WindowsMsvc2019Flavor; + } else if (compiler.startsWith("MSVC 2022") && os == Abi::WindowsOS) { + flavor = Abi::WindowsMsvc2022Flavor; } return Abi(arch, os, flavor, format, wordWidth); From 4d55fc911d08436a35b6e240fb6f9d8742a44512 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Wed, 3 Nov 2021 15:08:38 +0100 Subject: [PATCH 47/48] clangd: disable lsp snippets We have some additional handling with the completion items that might interfere with the snippets. Change-Id: I86405ec67af189d01c8a4dfa468f56035e6e69c4 Reviewed-by: David Schulz Reviewed-by: Christian Kandeler --- src/plugins/clangcodemodel/clangdclient.cpp | 26 +++++++++++++++------ 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index 0f9acb58c1c..7efc37a5728 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -1086,6 +1086,10 @@ public: : TextDocumentClientCapabilities::CompletionCapabilities(object) { insert("editsNearCursor", true); // For dot-to-arrow correction. + if (Utils::optional completionItemCaps = completionItem()) { + completionItemCaps->setSnippetSupport(false); + setCompletionItem(*completionItemCaps); + } } }; @@ -2864,7 +2868,21 @@ void ClangdCompletionItem::apply(TextDocumentManipulatorInterface &manipulator, if (!edit) return; - const QString rawInsertText = edit->newText(); + const auto kind = static_cast( + item.kind().value_or(CompletionItemKind::Text)); + const bool isFunctionLike = kind == CompletionItemKind::Function + || kind == CompletionItemKind::Method || kind == CompletionItemKind::Constructor; + QString rawInsertText = edit->newText(); + + // Some preparation for our magic involving (non-)insertion of parentheses and + // cursor placement. + if (isFunctionLike && !rawInsertText.contains('(')) { + if (item.label().contains("()")) // function takes no arguments + rawInsertText += "()"; + else if (item.label().contains('(')) // function takes arguments + rawInsertText += "( )"; + } + const int firstParenOffset = rawInsertText.indexOf('('); const int lastParenOffset = rawInsertText.lastIndexOf(')'); const QString detail = item.detail().value_or(QString()); @@ -2878,12 +2896,6 @@ void ClangdCompletionItem::apply(TextDocumentManipulatorInterface &manipulator, const QTextDocument * const doc = manipulator.textCursorAt(currentPos).document(); const Range range = edit->range(); const int rangeStart = range.start().toPositionInDocument(doc); - - const auto kind = static_cast( - item.kind().value_or(CompletionItemKind::Text)); - const bool isFunctionLike = kind == CompletionItemKind::Function - || kind == CompletionItemKind::Method || kind == CompletionItemKind::Constructor - || (firstParenOffset != -1 && lastParenOffset != -1); if (isFunctionLike && completionSettings.m_autoInsertBrackets) { // If the user typed the opening parenthesis, they'll likely also type the closing one, // in which case it would be annoying if we put the cursor after the already automatically From acfe22428199afea13554e7c1293e56ac76e325a Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Thu, 4 Nov 2021 10:27:08 +0100 Subject: [PATCH 48/48] Flush finished() signal when waitForReadyRead() was called Apparently the QProcess behaves like that. Change-Id: Idb1993b8abccbd7943582d41bd456eacc9a1c185 Reviewed-by: hjk Reviewed-by: Alessandro Portale --- src/libs/utils/launchersocket.cpp | 7 ++-- .../auto/utils/qtcprocess/tst_qtcprocess.cpp | 34 ++++++++++++++++++- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/libs/utils/launchersocket.cpp b/src/libs/utils/launchersocket.cpp index 28dfee23469..fc7b865e676 100644 --- a/src/libs/utils/launchersocket.cpp +++ b/src/libs/utils/launchersocket.cpp @@ -141,10 +141,8 @@ QList CallerHandle::flushFor(CallerHandle::SignalType { // 1. If signalType is no signal - flush all // 2. Flush all if we have any error - // 3. If we are flushing for Finished, flush Started / ReadyRead, too - // 4. If we are flushing for ReadyRead, flush Started, too - // 5. (?) If we have collected Finished, flush it only when flushing - // for ReadyRead / Finished (not for Started) + // 3. If we are flushing for Finished or ReadyRead, flush all, too + // 4. If we are flushing for Started, flush Started only QMutexLocker locker(&m_mutex); @@ -154,6 +152,7 @@ QList CallerHandle::flushFor(CallerHandle::SignalType }); const bool flushAll = (signalType == CallerHandle::SignalType::NoSignal) + || (signalType == CallerHandle::SignalType::ReadyRead) || (signalType == CallerHandle::SignalType::Finished) || storedSignals.contains(CallerHandle::SignalType::Error); if (flushAll) { diff --git a/tests/auto/utils/qtcprocess/tst_qtcprocess.cpp b/tests/auto/utils/qtcprocess/tst_qtcprocess.cpp index 2ad9eba89d1..ac0bf2f862a 100644 --- a/tests/auto/utils/qtcprocess/tst_qtcprocess.cpp +++ b/tests/auto/utils/qtcprocess/tst_qtcprocess.cpp @@ -65,6 +65,7 @@ const char kBlockingProcess[] = "QTC_TST_BLOCKING_PROCESS"; // the recursion, as from the test point of view we meant to execute only our custom code // without further execution of the test itself. +const char testProcessData[] = "Test process successfully executed."; const char forwardedOutputData[] = "This is the output message."; const char forwardedErrorData[] = "This is the error message."; const char runBlockingStdOutSubProcessMagicWord[] = "42"; @@ -108,7 +109,7 @@ static void lineCallbackMain() static void testProcessSubProcessMain() { - std::cout << "Test process successfully executed." << std::endl; + std::cout << testProcessData << std::endl; exit(0); } @@ -207,6 +208,7 @@ private slots: void processChannelForwarding_data(); void processChannelForwarding(); void killBlockingProcess(); + void flushFinishedWhileWaitingForReadyRead(); void cleanupTestCase(); @@ -1175,6 +1177,36 @@ void tst_QtcProcess::killBlockingProcess() QVERIFY(msgHandler.testPassed()); } +void tst_QtcProcess::flushFinishedWhileWaitingForReadyRead() +{ + Environment env = Environment::systemEnvironment(); + env.set(kTestProcess, {}); + QStringList args = QCoreApplication::arguments(); + const QString binary = args.takeFirst(); + const CommandLine command(FilePath::fromString(binary), args); + + QtcProcess process; + process.setCommand(command); + process.setEnvironment(env); + process.start(); + + QVERIFY(process.waitForStarted()); + QCOMPARE(process.state(), QProcess::Running); + + QDeadlineTimer timer(1000); + QByteArray reply; + while (process.state() == QProcess::Running) { + process.waitForReadyRead(500); + reply += process.readAllStandardOutput(); + if (timer.hasExpired()) + break; + } + + QCOMPARE(process.state(), QProcess::NotRunning); + QVERIFY(!timer.hasExpired()); + QVERIFY(reply.contains(testProcessData)); +} + QTEST_MAIN(tst_QtcProcess) #include "tst_qtcprocess.moc"