From e919e235b702efbf3563b84ac2ef780e297e6606 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 13 Dec 2023 20:47:06 +0100 Subject: [PATCH 01/24] ShortCutManager: Fix the disconnect condition The intention was to check the passed arg, not a static state. Amends 8d9710c0747a68f9938c8e7d32110f67ba64cc1e Change-Id: I5215c67c533c399694883b83ea7ea66da8387342 Reviewed-by: Tim Jenssen Reviewed-by: Qt CI Patch Build Bot --- src/plugins/qmldesigner/shortcutmanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/qmldesigner/shortcutmanager.cpp b/src/plugins/qmldesigner/shortcutmanager.cpp index 87a873339df..b7d15c36066 100644 --- a/src/plugins/qmldesigner/shortcutmanager.cpp +++ b/src/plugins/qmldesigner/shortcutmanager.cpp @@ -334,7 +334,7 @@ void ShortCutManager::connectUndoActions(DesignDocument *designDocument) void ShortCutManager::disconnectUndoActions(DesignDocument *designDocument) { - if (currentDesignDocument()) { + if (designDocument) { disconnect(designDocument, &DesignDocument::undoAvailable, this, &ShortCutManager::undoAvailable); disconnect(designDocument, &DesignDocument::redoAvailable, this, &ShortCutManager::redoAvailable); } From 80b3c9c35f72a7369a2a1dac9b56171cf86ec97c Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 13 Dec 2023 21:05:22 +0100 Subject: [PATCH 02/24] QmlDesignerPlugin: Make code less verbose Replace some emit helpers with direct emission. Change-Id: I832fc942234424f96da8516a18bd4b9e0c66c71a Reviewed-by: Tim Jenssen --- .../assetslibrary/assetslibrarywidget.cpp | 5 ++- src/plugins/qmldesigner/qmldesignerplugin.cpp | 34 +++---------------- src/plugins/qmldesigner/qmldesignerplugin.h | 4 --- 3 files changed, 7 insertions(+), 36 deletions(-) diff --git a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp index 5c6ebf07c5d..13178c6dd2e 100644 --- a/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp +++ b/src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp @@ -115,9 +115,8 @@ AssetsLibraryWidget::AssetsLibraryWidget(AsynchronousImageCache &asynchronousFon m_assetsWidget->setClearColor(Theme::getColor(Theme::Color::QmlDesigner_BackgroundColorDarkAlternate)); m_assetsWidget->engine()->addImageProvider("qmldesigner_assets", m_assetsIconProvider); - connect(m_assetsModel, &AssetsLibraryModel::fileChanged, [](const QString &changeFilePath) { - QmlDesignerPlugin::instance()->emitAssetChanged(changeFilePath); - }); + connect(m_assetsModel, &AssetsLibraryModel::fileChanged, + QmlDesignerPlugin::instance(), &QmlDesignerPlugin::assetChanged); auto layout = new QVBoxLayout(this); layout->setContentsMargins({}); diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp index 6e1aa10584f..93e698065c1 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.cpp +++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp @@ -665,18 +665,12 @@ void QmlDesignerPlugin::enforceDelayedInitialize() DesignDocument *QmlDesignerPlugin::currentDesignDocument() const { - if (d) - return d->documentManager.currentDesignDocument(); - - return nullptr; + return d ? d->documentManager.currentDesignDocument() : nullptr; } Internal::DesignModeWidget *QmlDesignerPlugin::mainWidget() const { - if (d) - return &d->mainWidget; - - return nullptr; + return d ? &d->mainWidget : nullptr; } QWidget *QmlDesignerPlugin::createProjectExplorerWidget(QWidget *parent) const @@ -686,7 +680,7 @@ QWidget *QmlDesignerPlugin::createProjectExplorerWidget(QWidget *parent) const void QmlDesignerPlugin::switchToTextModeDeferred() { - QTimer::singleShot(0, this, [] () { + QTimer::singleShot(0, this, [] { Core::ModeManager::activateMode(Core::Constants::MODE_EDIT); }); } @@ -698,11 +692,6 @@ void QmlDesignerPlugin::emitCurrentTextEditorChanged(Core::IEditor *editor) d->blockEditorChange = false; } -void QmlDesignerPlugin::emitAssetChanged(const QString &assetPath) -{ - emit assetChanged(assetPath); -} - double QmlDesignerPlugin::formEditorDevicePixelRatio() { if (QmlDesignerPlugin::settings().value(DesignerSettingsKey::IGNORE_DEVICE_PIXEL_RATIO).toBool()) @@ -716,7 +705,7 @@ double QmlDesignerPlugin::formEditorDevicePixelRatio() void QmlDesignerPlugin::contextHelp(const Core::IContext::HelpCallback &callback, const QString &id) { - emitUsageStatisticsHelpRequested(id); + emitUsageStatistics(Constants::EVENT_HELP_REQUESTED + id); QmlDesignerPlugin::instance()->viewManager().qmlJSEditorContextHelp(callback); } @@ -732,7 +721,7 @@ void QmlDesignerPlugin::emitUsageStatistics(const QString &identifier) const int currentTime = privateInstance()->timer.elapsed(); const int currentDuration = (currentTime - activeData.time); if (currentDuration < activeData.maxDuration) - instance()->emitUsageStatisticsUsageDuration(activeData.newIdentifer, currentDuration); + emit instance()->usageStatisticsUsageDuration(activeData.newIdentifer, currentDuration); privateInstance()->m_activeTraceIdentifierDataHash.remove(identifier); } @@ -760,11 +749,6 @@ void QmlDesignerPlugin::emitUsageStatisticsContextAction(const QString &identifi emitUsageStatistics(Constants::EVENT_ACTION_EXECUTED + identifier); } -void QmlDesignerPlugin::emitUsageStatisticsHelpRequested(const QString &identifier) -{ - emitUsageStatistics(Constants::EVENT_HELP_REQUESTED + identifier); -} - AsynchronousImageCache &QmlDesignerPlugin::imageCache() { return m_instance->d->projectManager.asynchronousImageCache(); @@ -775,7 +759,6 @@ void QmlDesignerPlugin::registerPreviewImageProvider(QQmlEngine *engine) m_instance->d->projectManager.registerPreviewImageProvider(engine); } - bool isParent(QWidget *parent, QWidget *widget) { if (!widget) @@ -879,17 +862,10 @@ void QmlDesignerPlugin::closeFeedbackPopup() void QmlDesignerPlugin::emitUsageStatisticsTime(const QString &identifier, int elapsed) { - QTC_ASSERT(instance(), return); emit instance()->usageStatisticsUsageTimer(normalizeIdentifier(identifier), elapsed); } -void QmlDesignerPlugin::emitUsageStatisticsUsageDuration(const QString &identifier, int elapsed) -{ - QTC_ASSERT(instance(), return ); - emit instance()->usageStatisticsUsageDuration(identifier, elapsed); -} - QmlDesignerPlugin *QmlDesignerPlugin::instance() { return m_instance; diff --git a/src/plugins/qmldesigner/qmldesignerplugin.h b/src/plugins/qmldesigner/qmldesignerplugin.h index e9e8847fbe1..e18b502c584 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.h +++ b/src/plugins/qmldesigner/qmldesignerplugin.h @@ -66,17 +66,13 @@ public: void switchToTextModeDeferred(); void emitCurrentTextEditorChanged(Core::IEditor *editor); - void emitAssetChanged(const QString &assetPath); - static double formEditorDevicePixelRatio(); static void contextHelp(const Core::IContext::HelpCallback &callback, const QString &id); static void emitUsageStatistics(const QString &identifier); static void emitUsageStatisticsContextAction(const QString &identifier); - static void emitUsageStatisticsHelpRequested(const QString &identifier); static void emitUsageStatisticsTime(const QString &identifier, int elapsed); - static void emitUsageStatisticsUsageDuration(const QString &identifier, int elapsed); static AsynchronousImageCache &imageCache(); From d18ef94aaf7e102e28d48639599d85b5befd7ee4 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 13 Dec 2023 21:27:50 +0100 Subject: [PATCH 03/24] ShortCutManager: Hide currentDesignDocument() inside cpp Change-Id: I21bd2bbfd29de810715286402f6d261f49051297 Reviewed-by: Tim Jenssen --- src/plugins/qmldesigner/shortcutmanager.cpp | 14 ++++++-------- src/plugins/qmldesigner/shortcutmanager.h | 2 -- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/plugins/qmldesigner/shortcutmanager.cpp b/src/plugins/qmldesigner/shortcutmanager.cpp index b7d15c36066..157989ed200 100644 --- a/src/plugins/qmldesigner/shortcutmanager.cpp +++ b/src/plugins/qmldesigner/shortcutmanager.cpp @@ -45,6 +45,11 @@ namespace QmlDesigner { +static DesignDocument *currentDesignDocument() +{ + return QmlDesignerPlugin::instance()->currentDesignDocument(); +} + ShortCutManager::ShortCutManager() : QObject() , m_exportAsImageAction(tr("Export as &Image...")) @@ -58,9 +63,7 @@ ShortCutManager::ShortCutManager() , m_duplicateAction(tr("&Duplicate")) , m_selectAllAction(tr("Select &All")) , m_escapeAction(this) -{ - -} +{} void ShortCutManager::registerActions(const Core::Context &qmlDesignerMainContext, const Core::Context &qmlDesignerFormEditorContext, @@ -351,11 +354,6 @@ void ShortCutManager::updateUndoActions(DesignDocument *designDocument) } } -DesignDocument *ShortCutManager::currentDesignDocument() const -{ - return QmlDesignerPlugin::instance()->currentDesignDocument(); -} - void ShortCutManager::undoAvailable(bool isAvailable) { auto documentController = qobject_cast(sender()); diff --git a/src/plugins/qmldesigner/shortcutmanager.h b/src/plugins/qmldesigner/shortcutmanager.h index b97fd834ee7..ee2c12e212a 100644 --- a/src/plugins/qmldesigner/shortcutmanager.h +++ b/src/plugins/qmldesigner/shortcutmanager.h @@ -30,8 +30,6 @@ public: void connectUndoActions(DesignDocument *designDocument); void disconnectUndoActions(DesignDocument *designDocument); void updateUndoActions(DesignDocument *designDocument); - DesignDocument *currentDesignDocument() const; - void updateActions(Core::IEditor* editor); private: From ea0d814905d34a3f173a741e5bb36bd7679ebff3 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 13 Dec 2023 21:57:10 +0100 Subject: [PATCH 04/24] QmlDesignerPlugin: Use QWidget::isAncestorOf() Change-Id: I7896fe5907e3af932ad29e6577207ac803164330 Reviewed-by: Tim Jenssen --- src/plugins/qmldesigner/qmldesignerplugin.cpp | 41 +++++++------------ 1 file changed, 14 insertions(+), 27 deletions(-) diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp index 93e698065c1..c33aeeeea76 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.cpp +++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp @@ -759,35 +759,22 @@ void QmlDesignerPlugin::registerPreviewImageProvider(QQmlEngine *engine) m_instance->d->projectManager.registerPreviewImageProvider(engine); } -bool isParent(QWidget *parent, QWidget *widget) -{ - if (!widget) - return false; - - if (widget == parent) - return true; - - return isParent(parent, widget->parentWidget()); -} - void QmlDesignerPlugin::trackWidgetFocusTime(QWidget *widget, const QString &identifier) { - connect(qApp, - &QApplication::focusChanged, - widget, - [widget, identifier](QWidget *from, QWidget *to) { - static QElapsedTimer widgetUsageTimer; - static QString lastIdentifier; - if (isParent(widget, to)) { - if (!lastIdentifier.isEmpty()) - emitUsageStatisticsTime(lastIdentifier, widgetUsageTimer.elapsed()); - widgetUsageTimer.restart(); - lastIdentifier = identifier; - } else if (isParent(widget, from) && lastIdentifier == identifier) { - emitUsageStatisticsTime(identifier, widgetUsageTimer.elapsed()); - lastIdentifier.clear(); - } - }); + connect(qApp, &QApplication::focusChanged, + widget, [widget, identifier](QWidget *from, QWidget *to) { + static QElapsedTimer widgetUsageTimer; + static QString lastIdentifier; + if (widget->isAncestorOf(to)) { + if (!lastIdentifier.isEmpty()) + emitUsageStatisticsTime(lastIdentifier, widgetUsageTimer.elapsed()); + widgetUsageTimer.restart(); + lastIdentifier = identifier; + } else if (widget->isAncestorOf(from) && lastIdentifier == identifier) { + emitUsageStatisticsTime(identifier, widgetUsageTimer.elapsed()); + lastIdentifier.clear(); + } + }); } void QmlDesignerPlugin::registerCombinedTracedPoints(const QString &identifierFirst, From bc1f1c371984c2348db0958c0bc028119726bddc Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Fri, 15 Dec 2023 06:56:20 +0100 Subject: [PATCH 05/24] QmlDesignerPlugin: Restore emitUsageStatisticsUsageDuration It is still used in assetimporter.cpp. Amends 80b3c9c35f72a7369a2a1dac9b56171cf86ec97c Change-Id: I53aad38072d6b0ae1e120a539a1f2fc713f5730d Reviewed-by: Marco Bubke --- src/plugins/qmldesigner/qmldesignerplugin.cpp | 6 ++++++ src/plugins/qmldesigner/qmldesignerplugin.h | 1 + 2 files changed, 7 insertions(+) diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp index c33aeeeea76..4ce600a6a20 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.cpp +++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp @@ -853,6 +853,12 @@ void QmlDesignerPlugin::emitUsageStatisticsTime(const QString &identifier, int e emit instance()->usageStatisticsUsageTimer(normalizeIdentifier(identifier), elapsed); } +void QmlDesignerPlugin::emitUsageStatisticsUsageDuration(const QString &identifier, int elapsed) +{ + QTC_ASSERT(instance(), return); + emit instance()->usageStatisticsUsageDuration(identifier, elapsed); +} + QmlDesignerPlugin *QmlDesignerPlugin::instance() { return m_instance; diff --git a/src/plugins/qmldesigner/qmldesignerplugin.h b/src/plugins/qmldesigner/qmldesignerplugin.h index e18b502c584..ebb2e2bda9c 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.h +++ b/src/plugins/qmldesigner/qmldesignerplugin.h @@ -73,6 +73,7 @@ public: static void emitUsageStatistics(const QString &identifier); static void emitUsageStatisticsContextAction(const QString &identifier); static void emitUsageStatisticsTime(const QString &identifier, int elapsed); + static void emitUsageStatisticsUsageDuration(const QString &identifier, int elapsed); static AsynchronousImageCache &imageCache(); From 08d7dcc46b302eecf6379fc7c26c2c6566e4e135 Mon Sep 17 00:00:00 2001 From: Ali Kianian Date: Thu, 14 Dec 2023 16:55:06 +0200 Subject: [PATCH 06/24] QmlDesigner: Fix the bug for adding rows to a Collection After adding a row to the model, TableView reads the whole model except one cell. It also ignores all the further notifications for that cell even if we notify it explicitly. By notifying a model reset, this will be solved. Fixes: QDS-11248 Change-Id: I92cc7be5f82bc9acd2f9695f6f6a306ef003b78c Reviewed-by: Miikka Heikkinen Reviewed-by: Qt CI Patch Build Bot --- .../components/collectioneditor/collectiondetailsmodel.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectiondetailsmodel.cpp b/src/plugins/qmldesigner/components/collectioneditor/collectiondetailsmodel.cpp index 533c2d72b6c..2279b60d130 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/collectiondetailsmodel.cpp +++ b/src/plugins/qmldesigner/components/collectioneditor/collectiondetailsmodel.cpp @@ -179,15 +179,16 @@ bool CollectionDetailsModel::setHeaderData(int section, return headerChanged; } -bool CollectionDetailsModel::insertRows(int row, int count, const QModelIndex &parent) +bool CollectionDetailsModel::insertRows(int row, int count, [[maybe_unused]] const QModelIndex &parent) { if (count < 1) return false; row = qBound(0, row, rowCount()); - beginInsertRows(parent, row, row + count); + + beginResetModel(); m_currentCollection.insertEmptyElements(row, count); - endInsertRows(); + endResetModel(); selectRow(row); return true; From 0b32abdb310f08a7bf966bceade0b8c9d6ca327b Mon Sep 17 00:00:00 2001 From: Mats Honkamaa Date: Fri, 8 Dec 2023 09:54:45 +0200 Subject: [PATCH 07/24] Doc: Update Fire Particles tutorial Fixes and updates: - Added more screenshots - Improved descriptions of properties - Fixed errors - Improved text in general Task-number: QDS-11184 Change-Id: I8c6d26758e8e86512e736ecffd9e0a15c479e632 Reviewed-by: Johanna Vanhatapio Reviewed-by: Qt CI Patch Build Bot --- .../examples/doc/FireParticles.qdoc | 140 +++++++++++------- .../images/fire-particle-sprite-particle.png | Bin 0 -> 33180 bytes .../fire-particles-animated-sprite-comp.png | Bin 0 -> 23135 bytes .../doc/images/fire-particles-camera.png | Bin 0 -> 39060 bytes .../doc/images/fire-particles-components.png | Bin 0 -> 8373 bytes .../doc/images/fire-particles-direction.png | Bin 0 -> 10736 bytes .../images/fire-particles-drag-sprites.png | Bin 0 -> 18825 bytes .../images/fire-particles-drag-texture.png | Bin 0 -> 28897 bytes .../doc/images/fire-particles-navigator.png | Bin 8250 -> 10177 bytes .../fire-particles-particle-emitter.png | Bin 0 -> 30636 bytes .../images/icons/run_project.png | Bin 0 -> 1595 bytes 11 files changed, 88 insertions(+), 52 deletions(-) create mode 100644 doc/qtdesignstudio/examples/doc/images/fire-particle-sprite-particle.png create mode 100644 doc/qtdesignstudio/examples/doc/images/fire-particles-animated-sprite-comp.png create mode 100644 doc/qtdesignstudio/examples/doc/images/fire-particles-camera.png create mode 100644 doc/qtdesignstudio/examples/doc/images/fire-particles-components.png create mode 100644 doc/qtdesignstudio/examples/doc/images/fire-particles-direction.png create mode 100644 doc/qtdesignstudio/examples/doc/images/fire-particles-drag-sprites.png create mode 100644 doc/qtdesignstudio/examples/doc/images/fire-particles-drag-texture.png create mode 100644 doc/qtdesignstudio/examples/doc/images/fire-particles-particle-emitter.png create mode 100644 doc/qtdesignstudio/images/icons/run_project.png diff --git a/doc/qtdesignstudio/examples/doc/FireParticles.qdoc b/doc/qtdesignstudio/examples/doc/FireParticles.qdoc index f3603f08441..d198fbdf965 100644 --- a/doc/qtdesignstudio/examples/doc/FireParticles.qdoc +++ b/doc/qtdesignstudio/examples/doc/FireParticles.qdoc @@ -31,7 +31,7 @@ \li \e fire-color-table.png \endlist - You can download the assets from + Download the assets \l{https://git.qt.io/public-demos/qtdesign-studio/-/tree/master/tutorial%20projects/fire-particles/FireParticles/content/images} {here}. @@ -48,14 +48,14 @@ \li In the \uicontrol Presets section, select \uicontrol General > \uicontrol {3D}. \li In the \uicontrol Details section, set the name to \e FireParticles - and select the folder where you want to save the project. + , and select the folder where you want to save the project. \li Select \uicontrol {Create}. \endlist - Next, remove unwanted default components from the project: + Next, remove any unwanted default components from the project: \list 1 - \li In \uicontrol {Navigator}, select \e Text and select the \key Delete + \li In the \uicontrol {Navigator} view, select \e Text and then select the \key Delete key. \li In the same way, delete \e {cubeModel}. \endlist @@ -63,11 +63,10 @@ For a better visual effect, set the background color to black: \list - \li In \uicontrol {Navigator}, select \e Rectangle and in + \li In the \uicontrol {Navigator} view, select \e Rectangle and in \uicontrol {Properties}, set \uicontrol {Fill Color} to #000000. \endlist - \section2 Adding a Particle System to Your Scene To add a particle system, you first need to import the QtQuick3D.Particles3D @@ -79,16 +78,19 @@ \li Find QtQuick3D.Particles3D, and select it to add it to your project. \endlist + \image fire-particles-components.png + In this project, you use an animated sprite to simulate a fire. For - this, use the Animated Sprite particle system template: + this, use the \uicontrol {Animated Sprite} particle system template: \list \li From \uicontrol Components > \uicontrol{Qt Quick 3D Particle System Templates} drag an - \uicontrol {Animated Sprite} component to the \uicontrol{3D} view. You can - also drag it to \e scene in \uicontrol {Navigator}. + \uicontrol {Animated Sprite} component [1] to \e scene in \uicontrol {Navigator}. \endlist + \image fire-particles-animated-sprite-comp.png + \image fire-particles-navigator.png You now have the particle system in place. To preview it, select @@ -97,26 +99,33 @@ \section2 Adding Sprites and Sprite Animations - First, import the sprite to use for the fire: + In this project, you use a spritesheet with 3 sprites. + A spritesheet is a single image file that contains multiple sprites arranged + in a grid. You use these sprites to create a looping animation to add variation + to the movement of the flames. + + First, import the spritesheet you downloaded in the beginning of this tutorial + (\e{fire-sprites.png}) to use for the fire: \list 1 - \li In \uicontrol {Assets}, select \inlineimage icons/plus.png + \li In the \uicontrol {Assets} view, select \inlineimage icons/plus.png . - \li Select \e {fire-sprites.png}. + \li In the \uicontrol {Add Assets} dialog, find and select \e {fire-sprites.png}. \endlist \image fire-particles-assets.png - Next, add the sprite to the particle system and create the animation: + Next, add the spritesheet to the particle system, and create the animation: \list 1 - \li From \uicontrol{Assets}, drag \e {fire-sprites.png} to - \e animatedTexture in \uicontrol {Navigator}. - \li In \uicontrol{Navigator}, select \e{animatedSequence} and in - \uicontrol {Properties}, set: + \li From the \uicontrol{Assets} view, drag \e {fire-sprites.png} to + \e animatedTexture in the \uicontrol {Navigator} view. + \image fire-particles-drag-sprites.png + \li In the \uicontrol{Navigator} view, select \e{animatedSequence} and in + the \uicontrol {Properties} view, set: \list \li \uicontrol{Frame Count} to 3. - There are 3 sprites in \e {fire-sprites.png} so you want to + There are three sprites in \e {fire-sprites.png} so you want to divide the image into 3 different sprites for this animation. \li \uicontrol Interpolate to true. This makes the animation between the sprites smooth. @@ -132,21 +141,25 @@ change the color of a single sprite during its life span. In this project, you use a gradient color table ranging from yellow to dark orange. This results in the sprites being yellow when they are emitted and dark - orange at the end of the life span. + orange at the end of their life span. To set the color table: + \list 1 - \li Import \e{fire-color-table.png} to your project. - \li From \uicontrol{Components}, drag a \uicontrol Texture to + \li Go to the \uicontrol {Asstes} view and import \e{fire-color-table.png} to your project. + \li From the \uicontrol{Components} view, drag a \uicontrol Texture [1] to \e animatedSpriteParticle in \uicontrol{Navigator}. + \image fire-particles-drag-texture.png \li Rename the texture to \e {fireColorTable}. - \li In \uicontrol {Navigator}, select \e {fireColorTable} and in - \uicontrol {Properties}, set \uicontrol Source to + \li In the \uicontrol {Navigator} view, select \e {fireColorTable} and in + the \uicontrol {Properties} view, set \uicontrol Source to \e{fire-color-table.png}. - \li In \uicontrol {Navigator}, select \e {animatedSpriteParticle} and: + \li In the \uicontrol {Navigator} view, select \e {animatedSpriteParticle} and in the + \uicontrol Properties view: \list - \li Ensure that \uicontrol Sprite is set to \e {animatedTexture}. - \li Set \uicontrol {Particle Scale} to 5. + \li Ensure that \uicontrol Sprite is set to \e {animatedTexture}. This sets which image + to emit from the particle emitter, which in this case is the spritesheet added earlier. + \li Set \uicontrol {Particle Scale} to 5 to adjust the size of the flames. \li Set \uicontrol {Color Table} to \e{fireColorTable}. \endlist \endlist @@ -158,48 +171,71 @@ The next step is to adjust the particle emitter properties: \list 1 - \li In \uicontrol{Navigator}, select \e animatedSpriteEmitter and in - \uicontrol {Properties}, set: + \li First, in the \uicontrol{Navigator} view, select \e animatedSpriteEmitter and then, in + the \uicontrol {Properties} view, set: \list - \li \uicontrol {Emit Rate} to 300. - \li \uicontrol {Life Span} to 2500. - \li \uicontrol {Life Span Variation} to 100. - \li \uicontrol {Particle End Scale} to 1,50. + \li \uicontrol {Emit Rate} to 300 to emit 300 particles per second. + \li \uicontrol {Life Span} to 2500 to set the life span of each particle to + 2500 milliseconds (2.5 seconds). + \li \uicontrol {Life Span Variation} to 100 to set variation to the particle + life spans. The life span of each particle is now between 2.4 and 2.6 seconds to make + the fire look more realistic. + \li \uicontrol {Particle End Scale} to 1.50. When a particle is emitted, its + scale is 1.00 by default. By the end of its life span, it will grow to a scale of 1.50. \endlist - This sets the emitter to emit 300 particles per second. The life span of - each particle is ranging from 2.4 to 2.6 seconds. The size of each - particle is increasing slightly throughout its life span. - \li In \uicontrol{Navigator}, select \e animatedSpriteParticle and in - \uicontrol {Properties}, set: + + \image fire-particles-particle-emitter.png + + \li First, in the \uicontrol{Navigator} view, select \e animatedSpriteParticle and then, in + the \uicontrol {Properties} view, set: \list - \li \uicontrol {Blend Mode} to Screen. - \li \uicontrol {Max Amount} to 1000. - \li \uicontrol {Color Variation} > \uicontrol W to 0,50. This adds + \li \uicontrol {Blend Mode} to Screen to blend the fire nicely with the background. + \li \uicontrol {Max Amount} to 1000 to define the maximum amount of particles visible at the + same time. Setting a higher number allocates more memory. + \li \uicontrol {Color Variation} > \uicontrol W to 0.50. This adds randomness to the opacity of the sprites. \endlist - \li In \uicontrol{Navigator}, select \e animatedSpriteDirection and in - \uicontrol {Properties}, set: + + \image fire-particle-sprite-particle.png + + \li The \e animatedSpriteDirection component defines the direction and the velocity of + the particles emitted from the particle emitter. In this tutorial, you want the particles to + go straight up with a small variation. + + In the \uicontrol{Navigator} view, select \e animatedSpriteDirection and in the + \uicontrol {Properties} view, set: \list - \li \uicontrol Direction > \uicontrol Y to 20. - \li \uicontrol {Direction Variation} > \uicontrol X to 3. - \li \uicontrol {Direction Variation} > \uicontrol Y to 10. + \li \uicontrol Direction > \uicontrol X to 0 and \uicontrol Direction > \uicontrol Y + to 20. This makes the particles go straight up (along the Y axis) at the velocity of 20. + \li \uicontrol {Direction Variation} > \uicontrol X to 3. This adds small variation along + the X axis, making the flames a little bit wider. + \li \uicontrol {Direction Variation} > \uicontrol Y to 10. This adds variation to the + velocity of the particles along the Y axis. Because this makes some particles slower, + the flames appears thicker in the lower part. \endlist - This makes the particles go straight up with a small amount of randomness - to the direction. + + \image fire-particles-direction.png + \endlist - \section1 Previewing + \section1 Running the Project - Now, the fire effect is done. Before you preview it, adjust the camera: + Now, the fire effect is ready. Before you run it, position the camera to show the effect + from a suitable perspective: \list 1 - \li In \uicontrol {Navigator}, select \e sceneCamera and in - \uicontrol {Properties}, set: + \li In the \uicontrol {Navigator} view, select \e sceneCamera and in the + \uicontrol {Properties} view, set: \list \li \uicontrol {Field of View} to 20. \li \uicontrol {Translation} > \uicontrol Y to 35. + \li \uicontrol {Translation} > \uicontrol Z to 350. \endlist \endlist - Now, preview the fire effect by selecting \key Alt + \key{P}. + \image fire-particles-camera.png + + Now, run the project by selecting \key Ctrl + \key{R} or the + \inlineimage icons/run_project.png + button in the top toolbar. */ diff --git a/doc/qtdesignstudio/examples/doc/images/fire-particle-sprite-particle.png b/doc/qtdesignstudio/examples/doc/images/fire-particle-sprite-particle.png new file mode 100644 index 0000000000000000000000000000000000000000..6ea732ed9f0928ec852f8158fcf73ef9b5b34961 GIT binary patch literal 33180 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 literal 0 HcmV?d00001 diff --git a/doc/qtdesignstudio/examples/doc/images/fire-particles-animated-sprite-comp.png b/doc/qtdesignstudio/examples/doc/images/fire-particles-animated-sprite-comp.png new file mode 100644 index 0000000000000000000000000000000000000000..e6e7b93baf99783aecf221f1d09b73d7258c6fd0 GIT binary patch literal 23135 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 literal 0 HcmV?d00001 diff --git a/doc/qtdesignstudio/examples/doc/images/fire-particles-camera.png b/doc/qtdesignstudio/examples/doc/images/fire-particles-camera.png new file mode 100644 index 0000000000000000000000000000000000000000..c4bb401d7c9cfc343ca535e4b0b024cb905e369e GIT binary patch literal 39060 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 literal 0 HcmV?d00001 diff --git a/doc/qtdesignstudio/examples/doc/images/fire-particles-components.png b/doc/qtdesignstudio/examples/doc/images/fire-particles-components.png new file mode 100644 index 0000000000000000000000000000000000000000..cad61db3e801c728d884ea780b07e00b4e97ae64 GIT binary patch literal 8373 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 literal 0 HcmV?d00001 diff --git a/doc/qtdesignstudio/examples/doc/images/fire-particles-direction.png b/doc/qtdesignstudio/examples/doc/images/fire-particles-direction.png new file mode 100644 index 0000000000000000000000000000000000000000..ca73493312112e78496a86ce1f87a69edd36d42e GIT binary patch literal 10736 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%0DX@mT3 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 literal 0 HcmV?d00001 diff --git a/doc/qtdesignstudio/examples/doc/images/fire-particles-navigator.png b/doc/qtdesignstudio/examples/doc/images/fire-particles-navigator.png index 759cca99909bf1ea5a9aed6c9e2b3600223d37e6..fe99fb2e188e811a30af10132e0084d1febee8a1 100644 GIT binary patch literal 10177 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 Hl+XkK^FAO) literal 8250 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 literal 0 HcmV?d00001 diff --git a/doc/qtdesignstudio/images/icons/run_project.png b/doc/qtdesignstudio/images/icons/run_project.png new file mode 100644 index 0000000000000000000000000000000000000000..ab744888d43bc86bc437af49c2d1b5d242a00b1a GIT binary patch literal 1595 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7I14-?iy0WWg+Z8+Vb&Z8 z1_qXQnIRD+5xzcF$@#f@i7EL>sd^Q;1q>iyV_#8_n4FzjqL7rDo|$K>^nUk#C56ls zTcvPQUjyF)=hTc$kE){7;3~h6MhI|Z8xtBTx$+|-gpg^Jvqyke^gTP3i$ zR(Zu%AYpwa1+bEmY+EHqkcA2nz5xo(`9-M;mU@P|$p!|73g(u2h9+i47M7Me3PuJ- z#`*?k`bMU@Mg~>}hE}Gg3Q(YAr(jc*l4cd;;s&*>C?(BSDWjyMz)D}gyu4hm+*mKa zC|%#s($Z4jz)0W7NVg~@O}Dr*uOzWTH?LS3W`avc7m0xRdD)WnkfqLBRj99T>Rz?`gLWU6PRpb?&#my%yztcj!{)g`ec)m8}< zYr2L;x`u`!hNf0VrdGxl+6G2e1_ltNzWFJcX_Z)&T3DHypeRi(NlZyBNhGK^CD|%1 zzbH4c#8xRYH!(d`zaTGNNdX>=R?hi3`9;3@DXF$f#$Z?Y`dWGB6_+IDC8v72*eX@z z7U*SWrdTDKB&QmgrWolarzR!pT3DE*=q8$580w~&8CxV;q?x8zm?y&YyW}UAf?^h? zKZQj7{zaMTnR$shWSaxZaG)e%<&jxjl3!E_%@M(=g-}*brUEz>SS2QdQn#&AGALS8 zQnPi6m#MttT)I7Y=4N+E{pH@F~Q{vsI0M5KonxBc`3F^MN0N|+m__#FfcHD_H=O!u{gc-@_y~3filNF zUiU4Z6sg9hCcT@7E0QNj?P$xv^}D|B>VE9*u`5!7=Tw5hFJqs7tk;`@g6_D+PW!Cu zX?g#(=-j?C^C2UWE)o-n4&I%Kx1psgs*VOeI*LT2?F=ebX85!jw_I7hp| z=d{H?{shsjVGN&dI0zP3G8o@*w$8HfuzjRbcA>L4bP0l+XkK Dg%1`- literal 0 HcmV?d00001 From 53c4fb0243f2a6e3a9b834ac2ea82e8496eff5de Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 13 Dec 2023 22:58:58 +0100 Subject: [PATCH 08/24] EventListDelegate: Avoid using sender() Amends 1a402984dab1102221f702b21101e731c8d4e1d8 Change-Id: I635febfb3c9b3f51a8155491a2e3d8edeb3647c9 Reviewed-by: Qt CI Patch Build Bot Reviewed-by: Knud Dollereder --- .../eventlist/eventlistdelegate.cpp | 25 +++++++------------ .../components/eventlist/eventlistdelegate.h | 3 --- 2 files changed, 9 insertions(+), 19 deletions(-) diff --git a/src/plugins/qmldesigner/components/eventlist/eventlistdelegate.cpp b/src/plugins/qmldesigner/components/eventlist/eventlistdelegate.cpp index 939c36d338d..1db399b1539 100644 --- a/src/plugins/qmldesigner/components/eventlist/eventlistdelegate.cpp +++ b/src/plugins/qmldesigner/components/eventlist/eventlistdelegate.cpp @@ -27,8 +27,15 @@ QWidget *EventListDelegate::createEditor(QWidget *parent, { if (index.column() == EventListModel::shortcutColumn) { auto *editor = new ShortcutWidget(parent); - connect(editor, &ShortcutWidget::done, this, &EventListDelegate::commitAndClose); - connect(editor, &ShortcutWidget::cancel, this, &EventListDelegate::close); + connect(editor, &ShortcutWidget::done, this, [this, editor] { + auto that = const_cast(this); + emit that->commitData(editor); + emit that->closeEditor(editor); + }); + connect(editor, &ShortcutWidget::cancel, this, [this, editor] { + auto that = const_cast(this); + emit that->closeEditor(editor); + }); return editor; } else if (index.column() == EventListModel::connectColumn) { return nullptr; @@ -170,18 +177,4 @@ QSize EventListDelegate::sizeHint(const QStyleOptionViewItem &option, const QMod return QStyledItemDelegate::sizeHint(option, index); } -void EventListDelegate::commitAndClose() -{ - if (auto *editor = qobject_cast(sender())) { - emit commitData(editor); - emit closeEditor(editor); - } -} - -void EventListDelegate::close() -{ - if (auto *editor = qobject_cast(sender())) - emit closeEditor(editor); -} - } // namespace QmlDesigner. diff --git a/src/plugins/qmldesigner/components/eventlist/eventlistdelegate.h b/src/plugins/qmldesigner/components/eventlist/eventlistdelegate.h index 62ab74b617c..1589525df00 100644 --- a/src/plugins/qmldesigner/components/eventlist/eventlistdelegate.h +++ b/src/plugins/qmldesigner/components/eventlist/eventlistdelegate.h @@ -39,9 +39,6 @@ protected: QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override; private: - void close(); - void commitAndClose(); - static bool hasConnectionColumn(QObject *parent); static QRect connectButtonRect(const QStyleOptionViewItem &option); }; From efc63c8ffb1ff82c65a4324c24f8a2019ec41f86 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 13 Dec 2023 23:04:29 +0100 Subject: [PATCH 09/24] NodeListDelegate: Get rid of unused functions Amends 1a402984dab1102221f702b21101e731c8d4e1d8 Change-Id: I518c2bcc638f295b1540361c633af045c0caf524 Reviewed-by: Qt CI Patch Build Bot Reviewed-by: Knud Dollereder --- .../components/eventlist/nodelistdelegate.cpp | 14 -------------- .../components/eventlist/nodelistdelegate.h | 4 ---- 2 files changed, 18 deletions(-) diff --git a/src/plugins/qmldesigner/components/eventlist/nodelistdelegate.cpp b/src/plugins/qmldesigner/components/eventlist/nodelistdelegate.cpp index b56f57ef0fb..b36f9577d69 100644 --- a/src/plugins/qmldesigner/components/eventlist/nodelistdelegate.cpp +++ b/src/plugins/qmldesigner/components/eventlist/nodelistdelegate.cpp @@ -51,18 +51,4 @@ bool NodeListDelegate::eventFilter(QObject *editor, QEvent *event) return QStyledItemDelegate::eventFilter(editor, event); } -void NodeListDelegate::commitAndClose() -{ - if (auto *editor = qobject_cast(sender())) { - emit commitData(editor); - emit closeEditor(editor); - } -} - -void NodeListDelegate::close() -{ - if (auto *editor = qobject_cast(sender())) - emit closeEditor(editor); -} - } // namespace QmlDesigner. diff --git a/src/plugins/qmldesigner/components/eventlist/nodelistdelegate.h b/src/plugins/qmldesigner/components/eventlist/nodelistdelegate.h index 6bfb7a6bf28..31fbe465ee3 100644 --- a/src/plugins/qmldesigner/components/eventlist/nodelistdelegate.h +++ b/src/plugins/qmldesigner/components/eventlist/nodelistdelegate.h @@ -16,10 +16,6 @@ public: protected: bool eventFilter(QObject *editor, QEvent *event) override; - -private: - void close(); - void commitAndClose(); }; } // namespace QmlDesigner. From 1a07fa87fd01d81ac52a8cba5f6b243507394859 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 13 Dec 2023 22:18:49 +0100 Subject: [PATCH 10/24] CollectionSourceModel: Avoid using sender() Amends 6eb522f0cab48e9107c5c15bced80bd5c1c7193d Amends 01a4f087c6675e49306b21ea7f205e5a0f01837d Change-Id: Ifa1be7cd2a39e6910160a4383fd9a1c1ce743731 Reviewed-by: Qt CI Patch Build Bot Reviewed-by: Ali Kianian Reviewed-by: Miikka Heikkinen --- .../collectionsourcemodel.cpp | 51 +++++++++---------- .../collectioneditor/collectionsourcemodel.h | 8 +-- 2 files changed, 29 insertions(+), 30 deletions(-) diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.cpp b/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.cpp index 4d7773ade33..45e7127e8a1 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.cpp +++ b/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.cpp @@ -394,10 +394,10 @@ void CollectionSourceModel::updateNodeSource(const ModelNode &node) updateCollectionList(index); } -void CollectionSourceModel::onSelectedCollectionChanged(int collectionIndex) +void CollectionSourceModel::onSelectedCollectionChanged(CollectionListModel *collectionList, + int collectionIndex) { - CollectionListModel *collectionList = qobject_cast(sender()); - if (collectionIndex > -1 && collectionList) { + if (collectionIndex > -1) { if (m_previousSelectedList && m_previousSelectedList != collectionList) m_previousSelectedList->selectCollectionIndex(-1); @@ -410,11 +410,9 @@ void CollectionSourceModel::onSelectedCollectionChanged(int collectionIndex) } } -void CollectionSourceModel::onCollectionNameChanged(const QString &oldName, const QString &newName) +void CollectionSourceModel::onCollectionNameChanged(CollectionListModel *collectionList, + const QString &oldName, const QString &newName) { - CollectionListModel *collectionList = qobject_cast(sender()); - QTC_ASSERT(collectionList, return); - auto emitRenameWarning = [this](const QString &msg) -> void { emit this->warning(tr("Rename Model"), msg); }; @@ -500,11 +498,9 @@ void CollectionSourceModel::onCollectionNameChanged(const QString &oldName, cons } } -void CollectionSourceModel::onCollectionsRemoved(const QStringList &removedCollections) +void CollectionSourceModel::onCollectionsRemoved(CollectionListModel *collectionList, + const QStringList &removedCollections) { - CollectionListModel *collectionList = qobject_cast(sender()); - QTC_ASSERT(collectionList, return); - auto emitDeleteWarning = [this](const QString &msg) -> void { emit warning(tr("Delete Model"), msg); }; @@ -641,25 +637,26 @@ void CollectionSourceModel::updateCollectionList(QModelIndex index) void CollectionSourceModel::registerCollection(const QSharedPointer &collection) { - connect(collection.data(), - &CollectionListModel::selectedIndexChanged, - this, - &CollectionSourceModel::onSelectedCollectionChanged, - Qt::UniqueConnection); + CollectionListModel *collectionList = collection.data(); + if (collectionList == nullptr) + return; - connect(collection.data(), - &CollectionListModel::collectionNameChanged, - this, - &CollectionSourceModel::onCollectionNameChanged, - Qt::UniqueConnection); + connect(collectionList, &CollectionListModel::selectedIndexChanged, this, + [this, collectionList](int idx) { + onSelectedCollectionChanged(collectionList, idx); + }, Qt::UniqueConnection); - connect(collection.data(), - &CollectionListModel::collectionsRemoved, - this, - &CollectionSourceModel::onCollectionsRemoved, - Qt::UniqueConnection); + connect(collectionList, &CollectionListModel::collectionNameChanged, this, + [this, collectionList](const QString &oldName, const QString &newName) { + onCollectionNameChanged(collectionList, oldName, newName); + }, Qt::UniqueConnection); - if (collection.data() && collection->sourceNode()) + connect(collectionList, &CollectionListModel::collectionsRemoved, this, + [this, collectionList](const QStringList &removedCollections) { + onCollectionsRemoved(collectionList, removedCollections); + }, Qt::UniqueConnection); + + if (collection->sourceNode()) emit collectionNamesChanged(collection->sourceNode(), collection->stringList()); } diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.h b/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.h index 36226138c30..e08d426a48b 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.h +++ b/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.h @@ -76,9 +76,11 @@ signals: void warning(const QString &title, const QString &body); private slots: - void onSelectedCollectionChanged(int collectionIndex); - void onCollectionNameChanged(const QString &oldName, const QString &newName); - void onCollectionsRemoved(const QStringList &removedCollections); + void onSelectedCollectionChanged(CollectionListModel *collectionList, int collectionIndex); + void onCollectionNameChanged(CollectionListModel *collectionList, const QString &oldName, + const QString &newName); + void onCollectionsRemoved(CollectionListModel *collectionList, + const QStringList &removedCollections); private: void setSelectedIndex(int idx); From f41b69159b9c0bd66fb4de4920ae0695b927a52f Mon Sep 17 00:00:00 2001 From: Ali Kianian Date: Fri, 1 Dec 2023 12:42:58 +0200 Subject: [PATCH 11/24] QmlDesigner: Extract unique property name by collection name - The property names of the data store are defined after converting collection names to a proper unique property name. - Now, Spaces are supported in the collection names. - Collection property names will remain the same by collection renames, and only the modelName will change Task-number: QDS-11462 Change-Id: I2031c2e0a9afc5388386dc6e54c66e75f0d13ded Reviewed-by: Miikka Heikkinen Reviewed-by: Qt CI Patch Build Bot Reviewed-by: Shrief Gabr --- .../ImportDialog.qml | 2 +- .../NewCollectionDialog.qml | 2 +- .../collectioneditorutils.cpp | 31 +-- .../collectioneditor/collectioneditorutils.h | 5 - .../collectionsourcemodel.cpp | 23 ++- .../collectioneditor/collectionsourcemodel.h | 7 +- .../collectioneditor/collectionview.cpp | 31 ++- .../collectioneditor/collectionview.h | 2 + .../collectioneditor/collectionwidget.cpp | 12 +- .../collectioneditor/datastoremodelnode.cpp | 195 ++++++++++++++++-- .../collectioneditor/datastoremodelnode.h | 12 +- 11 files changed, 240 insertions(+), 82 deletions(-) diff --git a/share/qtcreator/qmldesigner/collectionEditorQmlSource/ImportDialog.qml b/share/qtcreator/qmldesigner/collectionEditorQmlSource/ImportDialog.qml index bf28695ec9b..e7bcefff776 100644 --- a/share/qtcreator/qmldesigner/collectionEditorQmlSource/ImportDialog.qml +++ b/share/qtcreator/qmldesigner/collectionEditorQmlSource/ImportDialog.qml @@ -120,7 +120,7 @@ StudioControls.Dialog { actionIndicator.visible: false translationIndicator.visible: false validator: RegularExpressionValidator { - regularExpression: /^\w+$/ + regularExpression: /^[\w ]+$/ } Keys.onEnterPressed: btnImport.onClicked() diff --git a/share/qtcreator/qmldesigner/collectionEditorQmlSource/NewCollectionDialog.qml b/share/qtcreator/qmldesigner/collectionEditorQmlSource/NewCollectionDialog.qml index 50ae55ab722..5cac7fd3fc0 100644 --- a/share/qtcreator/qmldesigner/collectionEditorQmlSource/NewCollectionDialog.qml +++ b/share/qtcreator/qmldesigner/collectionEditorQmlSource/NewCollectionDialog.qml @@ -87,7 +87,7 @@ StudioControls.Dialog { actionIndicator.visible: false translationIndicator.visible: false validator: RegularExpressionValidator { - regularExpression: /^\w+$/ + regularExpression: /^[\w ]+$/ } Keys.onEnterPressed: btnCreate.onClicked() diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectioneditorutils.cpp b/src/plugins/qmldesigner/components/collectioneditor/collectioneditorutils.cpp index 4eeca52964d..f48b6547aea 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/collectioneditorutils.cpp +++ b/src/plugins/qmldesigner/components/collectioneditor/collectioneditorutils.cpp @@ -3,11 +3,9 @@ #include "collectioneditorutils.h" -#include "abstractview.h" -#include "bindingproperty.h" +#include "model.h" #include "nodemetainfo.h" #include "propertymetainfo.h" -#include "variantproperty.h" #include @@ -137,33 +135,6 @@ QString getSourceCollectionType(const ModelNode &node) return {}; } -void assignCollectionToNode(AbstractView *view, - const ModelNode &modelNode, - const ModelNode &collectionSourceNode, - const QString &collectionName) -{ - QTC_ASSERT(modelNode.isValid() && collectionSourceNode.isValid(), return); - - QString sourceId = isDataStoreNode(collectionSourceNode) ? "DataStore" - : collectionSourceNode.id(); - - if (sourceId.isEmpty() || !canAcceptCollectionAsModel(modelNode)) - return; - - VariantProperty sourceProperty = collectionSourceNode.variantProperty(collectionName.toLatin1()); - if (!sourceProperty.exists()) - return; - - BindingProperty modelProperty = modelNode.bindingProperty("model"); - - QString identifier = QString("%1.%2").arg(sourceId, QString::fromLatin1(sourceProperty.name())); - - view->executeInTransaction("CollectionEditor::assignCollectionToNode", - [&modelProperty, &identifier]() { - modelProperty.setExpression(identifier); - }); -} - Utils::FilePath dataStoreJsonFilePath() { return collectionPath("models.json"); diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectioneditorutils.h b/src/plugins/qmldesigner/components/collectioneditor/collectioneditorutils.h index 835960f671e..036304a3819 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/collectioneditorutils.h +++ b/src/plugins/qmldesigner/components/collectioneditor/collectioneditorutils.h @@ -24,11 +24,6 @@ QString getSourceCollectionType(const QmlDesigner::ModelNode &node); QString getSourceCollectionPath(const QmlDesigner::ModelNode &dataStoreNode); -void assignCollectionToNode(AbstractView *view, - const ModelNode &modelNode, - const ModelNode &collectionSourceNode, - const QString &collectionName); - Utils::FilePath dataStoreJsonFilePath(); Utils::FilePath dataStoreQmlFilePath(); diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.cpp b/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.cpp index 45e7127e8a1..5c4de3e4388 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.cpp +++ b/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.cpp @@ -403,8 +403,7 @@ void CollectionSourceModel::onSelectedCollectionChanged(CollectionListModel *col m_previousSelectedList = collectionList; - emit collectionSelected(collectionList->sourceNode(), - collectionList->collectionNameAt(collectionIndex)); + emit collectionSelected(collectionList->collectionNameAt(collectionIndex)); selectSourceIndex(sourceIndex(collectionList->sourceNode())); } @@ -494,6 +493,7 @@ void CollectionSourceModel::onCollectionNameChanged(CollectionListModel *collect return; } + emit collectionRenamed(oldName, newName); updateCollectionList(nodeIndex); } } @@ -547,10 +547,12 @@ void CollectionSourceModel::onCollectionsRemoved(CollectionListModel *collection if (document.isObject()) { QJsonObject rootObject = document.object(); + QStringList collectionsRemovedFromDocument; for (const QString &collectionName : removedCollections) { bool sourceContainsCollection = rootObject.contains(collectionName); if (sourceContainsCollection) { rootObject.remove(collectionName); + collectionsRemovedFromDocument << collectionName; } else { emitDeleteWarning(tr("The model group doesn't contain the model name (%1).") .arg(sourceContainsCollection)); @@ -572,6 +574,9 @@ void CollectionSourceModel::onCollectionsRemoved(CollectionListModel *collection return; } + for (const QString &collectionName : std::as_const(collectionsRemovedFromDocument)) + emit this->collectionRemoved(collectionName); + updateCollectionList(nodeIndex); } } @@ -602,7 +607,7 @@ void CollectionSourceModel::setSelectedIndex(int idx) } else if (m_previousSelectedList) { m_previousSelectedList->selectCollectionIndex(-1); m_previousSelectedList = {}; - emit this->collectionSelected(sourceNodeAt(idx), {}); + emit this->collectionSelected({}); } } } @@ -626,12 +631,12 @@ void CollectionSourceModel::updateCollectionList(QModelIndex index) return; ModelNode sourceNode = sourceNodeAt(index.row()); - QSharedPointer currentList = m_collectionList.at(index.row()); - QSharedPointer newList = loadCollection(sourceNode, currentList); - if (currentList != newList) { + QSharedPointer oldList = m_collectionList.at(index.row()); + QSharedPointer newList = loadCollection(sourceNode, oldList); + if (oldList != newList) { m_collectionList.replace(index.row(), newList); emit dataChanged(index, index, {CollectionsRole}); - emit collectionNamesChanged(sourceNode, newList->stringList()); + registerCollection(newList); } } @@ -656,8 +661,8 @@ void CollectionSourceModel::registerCollection(const QSharedPointersourceNode()) - emit collectionNamesChanged(collection->sourceNode(), collection->stringList()); + if (collectionList->sourceNode().isValid()) + emit collectionNamesInitialized(collection->stringList()); } QModelIndex CollectionSourceModel::indexOfNode(const ModelNode &node) const diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.h b/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.h index e08d426a48b..487b616b97b 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.h +++ b/src/plugins/qmldesigner/components/collectioneditor/collectionsourcemodel.h @@ -70,8 +70,11 @@ public: signals: void selectedIndexChanged(int idx); - void collectionSelected(const ModelNode &sourceNode, const QString &collectionName); - void collectionNamesChanged(const ModelNode &sourceNode, QStringList collections); + void collectionSelected(const QString &collectionName); + void collectionNamesInitialized(const QStringList &initialList); + void collectionRenamed(const QString &oldname, const QString &newName); + void collectionRemoved(const QString &collectionName); + void isEmptyChanged(bool); void warning(const QString &title, const QString &body); diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectionview.cpp b/src/plugins/qmldesigner/components/collectioneditor/collectionview.cpp index 9140f02ec53..f17abf5d9f5 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/collectionview.cpp +++ b/src/plugins/qmldesigner/components/collectioneditor/collectionview.cpp @@ -70,8 +70,8 @@ QmlDesigner::WidgetInfo CollectionView::widgetInfo() connect(sourceModel, &CollectionSourceModel::collectionSelected, this, - [this](const ModelNode &sourceNode, const QString &collection) { - m_widget->collectionDetailsModel()->loadCollection(sourceNode, collection); + [this](const QString &collection) { + m_widget->collectionDetailsModel()->loadCollection(dataStoreNode(), collection); }); connect(sourceModel, &CollectionSourceModel::isEmptyChanged, this, [this](bool isEmpty) { @@ -80,11 +80,24 @@ QmlDesigner::WidgetInfo CollectionView::widgetInfo() }); connect(sourceModel, - &CollectionSourceModel::collectionNamesChanged, + &CollectionSourceModel::collectionNamesInitialized, this, - [this](const ModelNode &sourceNode, const QStringList &collectionNames) { - if (sourceNode == m_dataStore->modelNode()) - m_dataStore->setCollectionNames(collectionNames); + [this](const QStringList &collectionNames) { + m_dataStore->setCollectionNames(collectionNames); + }); + + connect(sourceModel, + &CollectionSourceModel::collectionRenamed, + this, + [this](const QString &oldName, const QString &newName) { + m_dataStore->renameCollection(oldName, newName); + }); + + connect(sourceModel, + &CollectionSourceModel::collectionRemoved, + this, + [this](const QString &collectionName) { + m_dataStore->removeCollection(collectionName); }); } @@ -200,6 +213,12 @@ void CollectionView::addResource(const QUrl &url, const QString &name, const QSt }); } +void CollectionView::assignCollectionToSelectedNode(const QString &collectionName) +{ + QTC_ASSERT(dataStoreNode() && hasSingleSelectedModelNode(), return); + m_dataStore->assignCollectionToNode(this, singleSelectedModelNode(), collectionName); +} + void CollectionView::registerDeclarativeType() { CollectionDetails::registerDeclarativeType(); diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectionview.h b/src/plugins/qmldesigner/components/collectioneditor/collectionview.h index dd946776ed1..c08368b0c35 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/collectionview.h +++ b/src/plugins/qmldesigner/components/collectioneditor/collectionview.h @@ -43,6 +43,8 @@ public: void addResource(const QUrl &url, const QString &name, const QString &type); + void assignCollectionToSelectedNode(const QString &collectionName); + static void registerDeclarativeType(); void resetDataStoreNode(); diff --git a/src/plugins/qmldesigner/components/collectioneditor/collectionwidget.cpp b/src/plugins/qmldesigner/components/collectioneditor/collectionwidget.cpp index 30ae4418ed6..9b14c2cd036 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/collectionwidget.cpp +++ b/src/plugins/qmldesigner/components/collectioneditor/collectionwidget.cpp @@ -337,17 +337,7 @@ bool CollectionWidget::addCollectionToDataStore(const QString &collectionName) void CollectionWidget::assignCollectionToSelectedNode(const QString collectionName) { - ModelNode dsNode = dataStoreNode(); - ModelNode targetNode = m_view->singleSelectedModelNode(); - - QTC_ASSERT(dsNode.isValid() && targetNode.isValid(), return); - - if (dsNode.id().isEmpty()) { - warn(tr("Assigning the model"), tr("The model must have a valid id to be assigned.")); - return; - } - - CollectionEditor::assignCollectionToNode(m_view, targetNode, dsNode, collectionName); + m_view->assignCollectionToSelectedNode(collectionName); } void CollectionWidget::ensureDataStoreExists() diff --git a/src/plugins/qmldesigner/components/collectioneditor/datastoremodelnode.cpp b/src/plugins/qmldesigner/components/collectioneditor/datastoremodelnode.cpp index 446d7ef08fc..2ab1cd420f5 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/datastoremodelnode.cpp +++ b/src/plugins/qmldesigner/components/collectioneditor/datastoremodelnode.cpp @@ -3,6 +3,7 @@ #include "datastoremodelnode.h" +#include "abstractview.h" #include "collectioneditorconstants.h" #include "collectioneditorutils.h" #include "model/qmltextgenerator.h" @@ -42,6 +43,19 @@ QmlDesigner::PropertyNameList createNameList(const QmlDesigner::ModelNode &node) return defaultsNodeProps + dynamicPropertyNames; } +bool isValidCollectionPropertyName(const QString &collectionId) +{ + static const QmlDesigner::PropertyNameList reservedKeywords = { + QmlDesigner::CollectionEditor::SOURCEFILE_PROPERTY, + QmlDesigner::CollectionEditor::JSONBACKEND_TYPENAME, + "backend", + "models", + }; + + return QmlDesigner::ModelNode::isValidId(collectionId) + && !reservedKeywords.contains(collectionId.toLatin1()); +} + } // namespace namespace QmlDesigner { @@ -85,15 +99,13 @@ void DataStoreModelNode::reloadModel() m_dataRelativePath = dataStoreJsonPath.relativePathFrom(dataStoreQmlPath).toFSPathString(); - if (forceUpdate) { - updateDataStoreProperties(); - updateSingletonFile(); - } + if (forceUpdate) + update(); } QStringList DataStoreModelNode::collectionNames() const { - return m_collectionNames; + return m_collectionPropertyNames.keys(); } Model *DataStoreModelNode::model() const @@ -137,23 +149,60 @@ void DataStoreModelNode::updateDataStoreProperties() static TypeName childNodeTypename = "ChildListModel"; + QSet collectionNamesToBeAdded; + const QStringList allCollectionNames = m_collectionPropertyNames.keys(); + for (const QString &collectionName : allCollectionNames) + collectionNamesToBeAdded << collectionName; + const QList formerPropertyNames = rootNode.dynamicProperties(); - for (const AbstractProperty &property : formerPropertyNames) - rootNode.removeProperty(property.name()); + + // Remove invalid collection names from the properties + for (const AbstractProperty &property : formerPropertyNames) { + if (!property.isNodeProperty()) + continue; + + NodeProperty nodeProprty = property.toNodeProperty(); + if (!nodeProprty.hasDynamicTypeName(childNodeTypename)) + continue; + + ModelNode childNode = nodeProprty.modelNode(); + if (childNode.hasProperty(CollectionEditor::JSONCHILDMODELNAME_PROPERTY)) { + QString modelName = childNode.property(CollectionEditor::JSONCHILDMODELNAME_PROPERTY) + .toVariantProperty() + .value() + .toString(); + if (collectionNamesToBeAdded.contains(modelName)) { + m_collectionPropertyNames.insert(modelName, property.name()); + collectionNamesToBeAdded.remove(modelName); + } else { + rootNode.removeProperty(property.name()); + } + } else { + rootNode.removeProperty(property.name()); + } + } rootNode.setIdWithoutRefactoring("models"); - for (const QString &collectionName : std::as_const(m_collectionNames)) { - PropertyName newName = collectionName.toLatin1(); + QStringList collectionNamesLeft = collectionNamesToBeAdded.values(); + Utils::sort(collectionNamesLeft); + for (const QString &collectionName : std::as_const(collectionNamesLeft)) { + PropertyName newPropertyName = getUniquePropertyName(collectionName); + if (newPropertyName.isEmpty()) { + qWarning() << __FUNCTION__ << __LINE__ + << QString("The property name cannot be generated from \"%1\"").arg(collectionName); + continue; + } ModelNode collectionNode = model()->createModelNode(childNodeTypename); - VariantProperty modelNameProperty = collectionNode.variantProperty( CollectionEditor::JSONCHILDMODELNAME_PROPERTY); - modelNameProperty.setValue(newName); + modelNameProperty.setValue(collectionName); - NodeProperty nodeProp = rootNode.nodeProperty(newName); + NodeProperty nodeProp = rootNode.nodeProperty(newPropertyName); nodeProp.setDynamicTypeNameAndsetModelNode(childNodeTypename, collectionNode); + + m_collectionPropertyNames.insert(collectionName, newPropertyName); } // Backend Property @@ -186,13 +235,127 @@ void DataStoreModelNode::updateSingletonFile() file.finalize(); } +void DataStoreModelNode::update() +{ + updateDataStoreProperties(); + updateSingletonFile(); +} + +PropertyName DataStoreModelNode::getUniquePropertyName(const QString &collectionName) +{ + ModelNode dataStoreNode = modelNode(); + QTC_ASSERT(!collectionName.isEmpty() && dataStoreNode.isValid(), return {}); + + QString newProperty; + + // convert to camel case + QStringList nameWords = collectionName.split(' '); + nameWords[0] = nameWords[0].at(0).toLower() + nameWords[0].mid(1); + for (int i = 1; i < nameWords.size(); ++i) + nameWords[i] = nameWords[i].at(0).toUpper() + nameWords[i].mid(1); + newProperty = nameWords.join(""); + + // if id starts with a number prepend an underscore + if (newProperty.at(0).isDigit()) + newProperty.prepend('_'); + + // If the new id is not valid (e.g. qml keyword match), prepend an underscore + if (!isValidCollectionPropertyName(newProperty)) + newProperty.prepend('_'); + + static const QRegularExpression rgx("\\d+$"); // matches a number at the end of a string + while (dataStoreNode.hasProperty(newProperty.toLatin1())) { // id exists + QRegularExpressionMatch match = rgx.match(newProperty); + if (match.hasMatch()) { // ends with a number, increment it + QString numStr = match.captured(); + int num = numStr.toInt() + 1; + newProperty = newProperty.mid(0, match.capturedStart()) + QString::number(num); + } else { + newProperty.append('1'); + } + } + + return newProperty.toLatin1(); +} + void DataStoreModelNode::setCollectionNames(const QStringList &newCollectionNames) { - if (m_collectionNames != newCollectionNames) { - m_collectionNames = newCollectionNames; - updateDataStoreProperties(); - updateSingletonFile(); + m_collectionPropertyNames.clear(); + for (const QString &collectionName : newCollectionNames) + m_collectionPropertyNames.insert(collectionName, {}); + update(); +} + +void DataStoreModelNode::renameCollection(const QString &oldName, const QString &newName) +{ + ModelNode dataStoreNode = modelNode(); + QTC_ASSERT(dataStoreNode.isValid(), return); + + if (m_collectionPropertyNames.contains(oldName)) { + const PropertyName oldPropertyName = m_collectionPropertyNames.value(oldName); + if (!oldPropertyName.isEmpty() && dataStoreNode.hasProperty(oldPropertyName)) { + NodeProperty collectionNode = dataStoreNode.property(oldPropertyName).toNodeProperty(); + if (collectionNode.isValid()) { + VariantProperty modelNameProperty = collectionNode.modelNode().variantProperty( + CollectionEditor::JSONCHILDMODELNAME_PROPERTY); + modelNameProperty.setValue(newName); + m_collectionPropertyNames.remove(oldName); + m_collectionPropertyNames.insert(newName, collectionNode.name()); + update(); + return; + } + qWarning() << __FUNCTION__ << __LINE__ + << "There is no valid node for the old collection name"; + return; + } + qWarning() << __FUNCTION__ << __LINE__ << QString("Invalid old property name") + << oldPropertyName; + return; + } + qWarning() << __FUNCTION__ << __LINE__ + << QString("There is no old collection name registered with this name \"%1\"").arg(oldName); +} + +void DataStoreModelNode::removeCollection(const QString &collectionName) +{ + if (m_collectionPropertyNames.contains(collectionName)) { + m_collectionPropertyNames.remove(collectionName); + update(); } } +void DataStoreModelNode::assignCollectionToNode(AbstractView *view, + const ModelNode &targetNode, + const QString &collectionName) +{ + QTC_ASSERT(targetNode.isValid(), return); + + if (!CollectionEditor::canAcceptCollectionAsModel(targetNode)) + return; + + if (!m_collectionPropertyNames.contains(collectionName)) { + qWarning() << __FUNCTION__ << __LINE__ << "Collection doesn't exist in the DataStore" + << collectionName; + return; + } + + PropertyName propertyName = m_collectionPropertyNames.value(collectionName); + + const ModelNode dataStore = modelNode(); + VariantProperty sourceProperty = dataStore.variantProperty(propertyName); + if (!sourceProperty.exists()) { + qWarning() << __FUNCTION__ << __LINE__ + << "The source property doesn't exist in the DataStore."; + return; + } + + BindingProperty modelProperty = targetNode.bindingProperty("model"); + + QString identifier = QString("DataStore.%1").arg(QString::fromLatin1(sourceProperty.name())); + + view->executeInTransaction("assignCollectionToNode", [&modelProperty, &identifier]() { + modelProperty.setExpression(identifier); + }); +} + } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/collectioneditor/datastoremodelnode.h b/src/plugins/qmldesigner/components/collectioneditor/datastoremodelnode.h index e76d7f50e4a..3048fc4fc9c 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/datastoremodelnode.h +++ b/src/plugins/qmldesigner/components/collectioneditor/datastoremodelnode.h @@ -5,6 +5,8 @@ #include +#include + namespace QmlDesigner { class Model; @@ -21,6 +23,12 @@ public: ModelNode modelNode() const; void setCollectionNames(const QStringList &newCollectionNames); + void renameCollection(const QString &oldName, const QString &newName); + void removeCollection(const QString &collectionName); + + void assignCollectionToNode(AbstractView *view, + const ModelNode &targetNode, + const QString &collectionName); private: QString getModelQmlText(); @@ -28,9 +36,11 @@ private: void reset(); void updateDataStoreProperties(); void updateSingletonFile(); + void update(); + PropertyName getUniquePropertyName(const QString &collectionName); ModelPointer m_model; - QStringList m_collectionNames; + QMap m_collectionPropertyNames; QString m_dataRelativePath; }; From a3b58d910737e954e11598d2417cff3f256d0b78 Mon Sep 17 00:00:00 2001 From: Ali Kianian Date: Mon, 18 Dec 2023 14:48:50 +0200 Subject: [PATCH 12/24] QmlDesigner: Fix the bug for QRegularExpression in dataStoreNode Change-Id: Ibe6dff5d5304ec4e48a4f7239a3811feee455f8c Reviewed-by: Tim Jenssen Reviewed-by: Qt CI Patch Build Bot --- .../components/collectioneditor/datastoremodelnode.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/qmldesigner/components/collectioneditor/datastoremodelnode.cpp b/src/plugins/qmldesigner/components/collectioneditor/datastoremodelnode.cpp index 2ab1cd420f5..bebc60f1de1 100644 --- a/src/plugins/qmldesigner/components/collectioneditor/datastoremodelnode.cpp +++ b/src/plugins/qmldesigner/components/collectioneditor/datastoremodelnode.cpp @@ -23,6 +23,9 @@ #include #include +#include +#include + namespace { QmlDesigner::PropertyNameList createNameList(const QmlDesigner::ModelNode &node) From 1c4a2ade1df85a7e51213469c266cb2289144887 Mon Sep 17 00:00:00 2001 From: Pranta Dastider Date: Thu, 14 Dec 2023 19:03:04 +0100 Subject: [PATCH 13/24] QmlDesigner: Document Jump to the Code feature This patch documents the jump to code features. It allows users to instantly jump to code specific for a component, state or connection. Fixes: QDS-11132 Change-Id: I4483dda8dd6a899ddee017196e697008f4be0fcd Reviewed-by: Qt CI Patch Build Bot Reviewed-by: Thomas Hartmann Reviewed-by: Johanna Vanhatapio --- .../src/editors/creator-code-refactoring.qdoc | 2 +- .../src/editors/creator-finding.qdoc | 8 +++ .../src/editors/creator-jump-to-the-code.qdoc | 66 ++++++++++++++++++ .../src/editors/creator-locator.qdoc | 2 +- .../images/icons/jump-to-code-16px.png | Bin 0 -> 1784 bytes .../images/jump-to-the-code-from-2D-view.webp | Bin 0 -> 7730 bytes ...ump-to-the-code-from-connections-view.webp | Bin 0 -> 13352 bytes .../jump-to-the-code-from-navigator-view.webp | Bin 0 -> 8594 bytes .../jump-to-the-code-from-state-view.webp | Bin 0 -> 13888 bytes .../src/qtdesignstudio-toc.qdoc | 1 + 10 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 doc/qtcreator/src/editors/creator-jump-to-the-code.qdoc create mode 100644 doc/qtdesignstudio/images/icons/jump-to-code-16px.png create mode 100644 doc/qtdesignstudio/images/jump-to-the-code-from-2D-view.webp create mode 100644 doc/qtdesignstudio/images/jump-to-the-code-from-connections-view.webp create mode 100644 doc/qtdesignstudio/images/jump-to-the-code-from-navigator-view.webp create mode 100644 doc/qtdesignstudio/images/jump-to-the-code-from-state-view.webp diff --git a/doc/qtcreator/src/editors/creator-code-refactoring.qdoc b/doc/qtcreator/src/editors/creator-code-refactoring.qdoc index 37f45c5b259..285ab394799 100644 --- a/doc/qtcreator/src/editors/creator-code-refactoring.qdoc +++ b/doc/qtcreator/src/editors/creator-code-refactoring.qdoc @@ -3,7 +3,7 @@ /*! \page creator-editor-refactoring.html - \previouspage creator-editor-locator.html + \previouspage creator-jump-to-the-code.html \nextpage creator-editor-quick-fixes.html \title Refactoring diff --git a/doc/qtcreator/src/editors/creator-finding.qdoc b/doc/qtcreator/src/editors/creator-finding.qdoc index 71bdd340085..d2eda6bd227 100644 --- a/doc/qtcreator/src/editors/creator-finding.qdoc +++ b/doc/qtcreator/src/editors/creator-finding.qdoc @@ -37,6 +37,14 @@ through projects, files, classes, functions, documentation and file systems. + \li \l{Jump to the Code} + + Jump to the code for a specific component directly from + the \uicontrol {2D} view or \uicontrol {Navigator} view. + You can also jump to the code of a particular + \uicontrol {State} or \uicontrol {Connection} from their + corresponding views. + \endlist */ diff --git a/doc/qtcreator/src/editors/creator-jump-to-the-code.qdoc b/doc/qtcreator/src/editors/creator-jump-to-the-code.qdoc new file mode 100644 index 00000000000..d5a83080bfd --- /dev/null +++ b/doc/qtcreator/src/editors/creator-jump-to-the-code.qdoc @@ -0,0 +1,66 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only + +/*! + \previouspage creator-editor-locator.html + \page creator-jump-to-the-code.html + \nextpage creator-editor-refactoring.html + + \title Jump to the Code + + Jump to the code is a feature that gives you instant access to a particular + part of the code. It takes you to the \uicontrol {Code} view location of a particular + component, \uicontrol {State}, or \uicontrol {Connection}. + + You can jump to the code from: + \list + \li \uicontrol {Navigator} view + \li \uicontrol {2D} view + \li \uicontrol {States} view + \li \uicontrol {Connections} view + \endlist + + \section1 Jump to the Code from the Navigator View + + \list 1 + \li Right-click on a component in the \uicontrol {Navigator} view. + \li Select \uicontrol {Jump to the Code}. + \endlist + + \image jump-to-the-code-from-navigator-view.webp + + \section1 Jump to the Code from the 2D View + + \list 1 + \li Right-click on a component in the \uicontrol {2D} view. + \li Select \uicontrol {Jump to the Code}. + \endlist + + \image jump-to-the-code-from-2D-view.webp + + \note Alternatively, you can select the component in the \uicontrol {Navigator} view + or in the \uicontrol {2D} view and press \key {F4}. That takes you to the code + location in the \uicontrol {Code} view. + + \section1 Jump to the Code from the States View + + \list 1 + \li Locate the state you want to check in the \uicontrol {States} view. + \li Select \inlineimage icons/browse-button.png + to open additional options. + \li Select \uicontrol {Jump to the Code}. + \endlist + + \image jump-to-the-code-from-state-view.webp + + \section1 Jump to the Code from the Connections View + + \list 1 + \li Select a connection in the \uicontrol {Connections} view. + \li Select \inlineimage icons/jump-to-code-16px.png + to jump to the code segment related to the connection. + \endlist + + \image jump-to-the-code-from-connections-view.webp + +*/ diff --git a/doc/qtcreator/src/editors/creator-locator.qdoc b/doc/qtcreator/src/editors/creator-locator.qdoc index 49f79876785..18bc1d36027 100644 --- a/doc/qtcreator/src/editors/creator-locator.qdoc +++ b/doc/qtcreator/src/editors/creator-locator.qdoc @@ -4,7 +4,7 @@ /*! \previouspage creator-editor-finding.html \page creator-editor-locator.html - \nextpage creator-editor-refactoring.html + \nextpage creator-jump-to-the-code.html \title Searching with the Locator diff --git a/doc/qtdesignstudio/images/icons/jump-to-code-16px.png b/doc/qtdesignstudio/images/icons/jump-to-code-16px.png new file mode 100644 index 0000000000000000000000000000000000000000..1e9bc31dba7034293fe22db7792ee6123b3f86fd GIT binary patch literal 1784 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 ChQ#Cm literal 0 HcmV?d00001 diff --git a/doc/qtdesignstudio/images/jump-to-the-code-from-connections-view.webp b/doc/qtdesignstudio/images/jump-to-the-code-from-connections-view.webp new file mode 100644 index 0000000000000000000000000000000000000000..18657256793a923cf70e6659074d299d7d437d3a GIT binary patch literal 13352 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 LD8RtV2<8F+abqqW literal 0 HcmV?d00001 diff --git a/doc/qtdesignstudio/images/jump-to-the-code-from-navigator-view.webp b/doc/qtdesignstudio/images/jump-to-the-code-from-navigator-view.webp new file mode 100644 index 0000000000000000000000000000000000000000..3591c4f11eb99043159c86e793d18243ee23f7bb GIT binary patch literal 8594 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 ToWX3~fTYxLMgay^MlcruT`x|e literal 0 HcmV?d00001 diff --git a/doc/qtdesignstudio/images/jump-to-the-code-from-state-view.webp b/doc/qtdesignstudio/images/jump-to-the-code-from-state-view.webp new file mode 100644 index 0000000000000000000000000000000000000000..f396f8eeb156945a6c1bd633d63ecdbce0ff60a9 GIT binary patch literal 13888 zcmWIYbaS&XV_*n(bqWXzu!!JdfB-IL246;oumB66Bc==t`drSz45pcj84|V%?_RZi zOY+XTe5NVO4_((h3$A6^-@67h^vie)P_T9U8@9zD( zRa*Yt@9y2Z!Mn4Uf<)fMy?Xaf_v^IK^78ukUh{tce)V_Wzgb(;D(`%&4}A3h|2t!5 zXMPXvqz@rycpq~v%HH$2KD*Sq@b0_P?>AGs*PU3kB4L3!bxHJ?~_rPHQud)YS~ZZ@tyG+j2D z(L-y8^tMm!-u>*U6QsqqMe*M+dYOEl_x`7*YgN{37&rJZ+jadvJ)Nnlex}aUtgLO9 zW?Q^nEb~~qyjr;Jt=qQyS0_zPXXO67c7D&8U;*H_Dr)$r*rEaL*_u&cqM_u{Tn=~7Fe?QTfJ7vx8TeCluFmo(F1 z(&P4@+WpJEt^M<1yPWd>t4RmHZm++clu`TglDOrq`+2Opcm5Y%p>trb*abIn)u*<* z+xW6-{%(Hqc$#i;)DPX)QzGNHy?JwxW#N8NQ;mpk9P+B$N;x`br=E`5|ARmG(1-rM zyJ4TD%62nNv)ppkD(A+Axx0C7{>}M$J3Q)F%7N#4wVT45-pJYQ@DxvFl(GACRrhz| z$@$F-7Kbn?9DQzo?)iLM?WIDw#iiTNv`YS|)tlz{C44)Nd&R`Xf8XB!_jcn!Y0W^f z6U*N&aXiS+Y*&BNh*x6Tgg-?$H*LP3`Th99@*df;Z0qa$Z}S~bP|1CI|Lmeq4KEhy zY+zsY(Av8CLHVA=^;aggw!8^lz>*+$%li0^Y4`UredDV89o2Wxgy~<>o2eNWTq6~t z^3C^hmA)vP_g6RG^^^HKkY`sUemJ+@VSfGbe&@&9_oF^#MCSjU%Clstev!#6>ykjR z1F}CZ-gqBZ_RW3YuGB-5Jrg~@X-#4|aCh_cPx@BZwtaW7e|>Y$SH3g<_dhNBXu6;C z&-)*9&X;nFo~wCkDMnGoA?ZA&Bi`^gA$X=S`#&my|*F=>iVpcktEe6R9 z3wjK~JQTY4yk7|ED6dZ0sQ&NM%9Lu;QU%8CS{|{2(R~kO7#oU?XxK9LPSDd`7jwYN zQ`^UG@uWMfURE_?7ejV=3+n5xoFHNF!{fl3q9AQg&B^cHuJ#TV-TKkDqrh40^5YFN zPkN<#JZ@vrJ`&g^#MHr{H+Pyq=j*svRsx#JwXO3~4+%I-@7bEV^q`uy;qp_jUPyBu z+G<-{Y*snl6Srq6yWS)%wD^7&2kP; zSKIYhj%%5fEs)Lp^VN4^7jtLC*AGh{Hh1{to-O>T__X%(o-=MCXF}L3t70DiY_D>Y zQdGQDW-&ESMzAeA>+R9+N}}hjF9^*QJyPKP?wGpbx~VDxt0opY-v1e7DsuI@!5z+{ z9ghU0=E~J>*f)*oP~>qdXRb{BAo;oLt!65@x#qSvq-pTlE;013l?&ZrQhrFj1CdA4#Kb*UJiG<3@)}+wr`86dG zGAlK=FV1V_+V|w947XSH-{+ZkRN3Zv)aYZ=eWpJsZ+G9c`t<9%m+NLO zY)P(73dsZIFyJ|J<@mztdO;2U+Z1FwCC>zF6@N(vLd%Lh+p{1`U zEh&z@d~EloytU<_9(xW~eouLHYmN5%H^n(k?>nU|L;fAwD7kz6_Zfb6?3>U3f zJt7LIG0!gyS((kzv2QNS&g zW3fw~RB|rmSh`C~Uc&l9qshZt$0|MV&DY|A|vN}Wovr>gME{t0ou_m15*)$jdk%*JEV z`@GiX{K4WDzU&ausjIb)>a}kF8Z&9Zvw7NKoAZ@abr`bd_jRUPJMlWHB;FloRdCm zeYb4dVIRr0uS)xl^S^qg*6_rsH|au@_t}FCUvd-<%nf&0x$)ei19G01`i*~G|IB(_ z@7eK`+K#y1{BueF1B1eRj;lwRZa(0j&{tTc(wm}^RLIQ2#_%PT!K0;k6Z3uZZRS)^F>~3q)DD$p?q}NpQ(w`zQ{$gNW7#myykD{2z{DCBkSc&_wsL;XI5 zkeiO_edFLlFA?<=`D1^b<=lA?zk3pzbfe6CBuckCdWzl z-r<}3ct>^m-jvUutv~P65mNd(Ve7QEYr-nb)!sacpSP4wYX7ixUh_%M0JX+>yfe%~ zokjm7vs(q65pUPxw^P`uoaE`;bJ8VisnolJ9-fQZW~>Sg%zF~d_Em0zP2`rn+AFl5 z9Go(1j-~mexw|z!d=qc$l>D%9-b97PLNf}hmRD6cE~`$L+vj#CWdGBcq9|wE^FQt+ z8J?K%L1m*`7i`RwUcv-FZV6tQQN6?R(ggQkG{_0nX|LE>=9C6O_=tMby9G^ z<6Q9%IR~}~O?s{xqA*2k^{LjKS&!$|{QJ%GHRxqd@$VHy8IsZSXV1n;h^g21{Zl37`O8YJU{zXwMAgUpXJfNLaz3fdrS{wIM3#l zJ@dtzAP-6Nsg2K<#{9b~cQ*0s-f4552TuL7(|_q_BX-A+5nIa2PIP$%ryhAAywT~o zOs4({X`vM?3^8pT8}z%iicTxpEk9>`QZp<)o9$BDqGjR6r9Df(d@=EoRZXhAmg?v# zmdCiR>pvF7`d|;`X?;ng7I-wEi21atmvnt?zz1jo*R6fkEdi=K{_J zJg+spKQ62fG&`E@GBvn%cI!Vm`(FM^%he*{8Rk!x?!JD#^M0}IMe+3$gDM#>OfzH1 z)!b{d=@GNe*|23>zf`9Le!U^^=`_b`AMGd8FD_nfP&bi%0qcadF|QBB`@V8aYz;48 zU3`Pve09ugw|$TGL&erlTU+z`>XM&)(^8$&)tO~tpC0;j$x<<>Ep?i>U5@bbrSGSE zPD|bIyo%>(^rm0)xWfT^}pph)%N->-jUOF_~x#i^ZG)`yVlh6Ocn7n_su@JDSySJ z171?gK3D5hS1ieSZ5HwEdx((t)GbR({!L7k4|`b^G0nDm>XE=HTNYoateLh~VCn0< zk>B(}gl?ATFuhvV{q2Q$a1K}4m)k4TxNEO3yHW4)^S_z`qry=JE=CcC8-}c}m)T{6 zyMB>P6d4nsL73 zZ@rGQ{}uIm_-i$PP<(9JscNaEkC&DCX70W>lca z-SZ%)|NVO#_w%y4vNSkpQ+d*MTwEx9sN&Kx+k z@2~h5n>&XmdxyLI6;(Xs!l1$yQS^UCH z*Q+o5@K2joQxx;RQtqmuft~iRguAnw!el>w+wHwD{;k~p;8Fwkt2*ijb!53U!ZUKa`m~S-vsu z{oak+RL#D%W?%SR`7v2u`uiQz4@du~+Z}G_ofq+Li%hiOXV*KCJ(Z@@6QU;^WpO{3 zVzKOO*R|3f)fd;dN=?i;(|f>N3-7m5RW*>6bt2`^{zhq-NpzsAA=&6HA+> zD@*^Xk$QRk$1)4wB8HdYmCG!YpDa*0R$FTR{>`5s6LaIQ@+6n;$l0{O+dXS>M`!3X z-x--F4|iMq{d!%{KS%86aZzopwLE1^Jqu52yXQH6+96nf)JXsQ&GvKg!pF5$!t}br z*A!|$Z`*zM|Gt}L1^F+_3x&ONcK6=4ofgOQ`~UiR4-YSTzv8>zIT`g2MIk4ra$mmq z|G%5sFJ=Fme!K7S9+9@}og*e>F~7WJS?j};jcZ=|O=g~TK)*hX)BmIMPs`VR?Qd#+ zPAjwXtq=L0zw?~tLk-cG;^fw77xuYx*S3D~?H5_xyhv`>sa+u&)7#WNm%6@CW1GU zdJhl8l-2c?3nZSn`6=S}??3x0>|d1!oyg9w`~POz!>v(5-S5s#j<`CPYlC|8VaE!_ z?u9)*JX)`=P2aUJ^o6Ucj?^ZR*AeO8Yfc@BU@{Kym|*rbGs^pYOA(7++eMx9H(~)i z$5xk0S3Lf%{mFH@Sg1y^>d{gz&Kh96jwb!6L2u9cIU*!O4c zsdRL?$G7|E)Ej2kPZX~dt(X6#xR>c=&y1?`$7&>c=KY-IJLlbH_wAx}|D!j*cN8d9 zuXvg1dPdy%W6(D1$L8HvtzXrtzJ0;)+^A+*C*%4%*KKE%gy&eW zk!zwaE-`+1$eZiO-bo>C&aR$Kd+z8NOnLNaPU7cznQ#9~KbU{tZCC1zFlEN*;>+cW z9?8eDT>kv``8Ma1KAYD(VK#2{uzmLa--eA}Z&iO*c-6Q1y19K_$gMf&T{ao4*wXiF z-OF4aEAEc1N=fd?Q=INH8|ze7FP2;P_S*-Iqn(MtXE$8o)M?w8a?|LXDyP}qT?I!I z3R?HVV3(rwG+{Rb$I7fEt%ZlLeX-c)op?KO=d5P&nI}}z=WbYTndsnLcjJ2C zW|jse9aoo};_%K|y^0SPb%b^5Oft$Z6h&P-zQECc{r7eIm|phGsyW}4dv4i%j=K^w zwcY0loW61H|Js{r6Wp%1p7?yKqGHbEj!A`vrVm?$w!F7EvGTztQ^xbrf-^%xHu{w= z{dhi)Z+%2zz=4QU=hnUY!gne6$$I6oQtOhVTGzII(Xh6jy<+9HlJ9vFkNnyu|MAP$ z`!-&!A1CJ+h)!kTTe{=To#Mp2U75yp*(ptSh71q(uo>@Se(HCZ=P-YY?Hm^sj@NS{ z%{sleum0q}>WI9>pZ!~HKbyqt*%v)U$~~4J?k&zg{f1x&Gka-RBOe ze}$uepM1Og)P9N5kPwrk==qG&o8qFh1G%S`>0FC@Tf2Mv>fJW?K3Zs{yDSeJudfMS^XwRp{RRIR&jq!4b|0@?n^7XTaN+&7 z-_h5D59EJ;aj%kZMqs(}B(;>ErMpVM!xm~2e)X0adF3wqA{mxVLsyXyJ6m9w{LU;S&+PnOE=F9HW@m>G+qzyg(G9~P<@5{Z7TC&!9(k6p*(dutZOY`>@3qCmOtn~Yv z1jm^TPu})cz2dzqeEH$Aeb$_MsTY-Q?*C~hexoj)b+Y^X?qk!nv!>c zzv^pJ-0$kPHBDgl+e#^Y%~LyUo%8C2_c&O{oa5W~_igFc_(q|`%FOd6U-p_C z35e*vWqMM@@V4+)wB*BUrkgrvZ8{m~ZQ}fM`;+UOo~LFsJ!@PiSLkWK=T$z((`7Sq z689+ISTDg4!X3J!VV{TQ9J6)Om%ivfu4PFzKV0i)IDM`3#&4Wlx2~~U6tPb5n&jZ! z+z`;^xpecq8A3-Gx|CL23po}P>%tMa{MN77EVb(iEK@&a_Dt#j%A@h@t<@us{i|NS zeL2I?e3yAk^Q2wZe5b3(uYb7J-{<4wsoxn*V@N7xmbje5l;BbIl1& zwg3OyR^?0!+OFU|GeBvo(w%+P%Zm89W7a10RPr2Dj_^4dzeUBuSNi0ohigj8W^qf{ zs8l?7@-gSg%Kp<=uRZ5VQ)7Mo_l0`Pg4kT?Ef?+FX1(fGF`k_BccF3jxHf zg&#it=qqDy<+tnm!0l7f?)qHBvC`x~etyS^okyn}y}>*A+>4^Db4M3{ESQn>ZuU%J zzS;cuYVS?{99{W4Mv7PFi?GdspWWXyrFm~}T;1HSyp2U|mXbl@+c25EyZL)P5Ai%O zJIf#{5?g?Rq@#;JlaL(k{*APczq_GwH9SnylWG?C!$SoU;YR21(M>WRo~V48;sv zPiI->e>t1HLi51{Y>F=lJ@t=qN}}rZb6)HDwmF_W;ILmroOQz< zeaE#cJH$h$Cw#fv-K%U>8#*U5T*<=pxz4qab#v^@%~iVwXPFg4$qU? zWY@hZ@^3wSyK$FD@Bx;XJ!^mOD|Fi^rF$-V3-gVgGZND)AI+O=As%%pV0seQ6bF&n zHFmPuT(4r*$oMm-2w3dAySYo<^>=o_^hf8bi|Vu)Rd=j^etDzVf^$dDSTUVg_U)x$ zuXGGEXQ}4DJ?hW5KMH92U1cYmE%z$s%mVFHPf-?)LtLxkZ*1qdQZM8j+qKdgun57NxhJbrF?xjn_9y&Vb)2+7KHmBJ1sxRE1zC&osMWYGZ^pZSH+Ga0EyLli_ zB7R`6A7$SpAsz2`cHbV;4afNY z)t9^yomaWXC$>x3K_ccy!M;gn_BC~RanCq&BDa%ke$s|Sw?rRN4w;PWt~~CigC~Y~ zocN9Jdb~b88 zPvS_v5H|NQ_l*)hg_;kVKDnE-OuIzpWU_z0X57Fn|7?OTr#IXBkIi4$%D#ua*mWde z3d7f5-D&$bGT$l{JbbZh+1tl4n;x#p(RVXaR(y5oxw;C&+TI-r`>MADn+MJ7S(SBs z(gw}%2L9p9SyegJk7fw2{WjH{O}+H;N#nr$SvzfWgti_1RT6!@V=bpv+|P`wg6FJ$ z+_^Jzon>e2cH7wC1fP+q?cv<$c{A?3pLaS~bh>ZW;ab_~P1~0__p{5pzscAheB<&U0ou5b05ZmFEvGPc_m{C3`DuJ!xQ;SlM3@BMm72Dj?f8lFGNe>rKI zn%Gg}(|f|OSqbL5sAhD=;> z?aK*4rDb7Nw#P$4K8r16>ya-!vS{VAAMXzS?_V%?Sw^|Qg+uMErmv5^&d?1#E%38n z?C8vmTNl^5z2VJ!lX`J|_lz#JhmT9nJ3Tzswq@#)NAF7Wv~K)TD{$PwBrLhbMk?du zeuaMrIy2P$#havL_SeN7+3cCs>~zdhbI-vSeqzDZ$?s;*dw%}+_xMk(I_w_prx(sl zx4b=3;LC6EEguq@SQ@ntD_aUA+&dXuZFcQsZc~<;x!lq<-4aXgHkL-rdsA2Y_@kxA zwaUtrImiCzT)5S-dWX&Ajls?Hc;;XH61mks8#>2xq_T1haYm;YR=Gw63 z_@xsk)a>`qoVZCZNn_U3{GxNL8)tUR3vrB{#d29myqUX9PX%pE$pJ*JYk}iF&7n!zzEVs6H@s*qwB%l|Na}`-!uR z_;Z8#imWWkhj(=}K4ywq5#Rjh4;%Z#%E%t~4Hs^8X#c*oYNdRoO_TqESJ9i5MWyGc zwJc;i{(Wuqv(6Jz?adN5*}YVsR#+HY&&^w>&oZSX`0t)w=6p-P>`s5TbhcY`)Uwvb zJCo)rx)mfWJS4fXyUyeD{d1YWzQ%ifp6_*B!Q_JeLEYt9wIQ2#7EN9=m2bNJoA)QJ zpPO#h+VYq24SU17bFqaJ9_#PfbCG-ZvkGBf=^LdCb??7lV_OyyY!Rs~TXyejkKpf0 zx3Ijwch3Kv^Qm+Z1AoaOhG^zF90!;gmpYtyFCO>rjBTAxrE-tqF_sRU%S^&r|L0%o zy;P(Tq3*Ot z<*N8dV=?vP9_FDrlLc9nb3_ti1-Cfg$Z7Bn*Ld=kTfcvs&4b+Tg}DsxUad1*dH>Pu z8S3x17#Z#On78Blm9m82k}txnczpd9Ju^S=vG#wKoY?_8TesaSgYH`zHkjWMOW!rTEj^qNp48a+ zVvEVOgL^zbFx-}{I#%#^)t0&cJJyMuSbp-Oc$^=9a?bm?vnH+e)0`^P<_y-Oea)LI zMl%2Z;{U9LH*3#JG{&!6`F%O#DaGRKM};ee3T801&f7S9liIY)4R<>?UTS7~E4phc z-{HxVXB_yuG9&!q$>!;9$4zqTq>{_s*8GwEm$qtK^RE9tTtA$;;IMdp`1wznk0*#0 z7rYOPyX3U_Qes7skfZe9=nY>pc?=y+%OCz|{B(!T#QCfbPU{{Bv}1c*9MN-LN&Z+- z0n6Hw8F@uQFI!J3OeuXX!>R+BYps zjK|%tW`fY7wU5i*&nyq0l5=*u^UkFCLTcg?v4NYn`NfO7+ti$MJNu2LHqxWUVE@1L z+jjeP+-eNWH`u@a^la&mk3JvbkGXN5tGj%EBfs#Mr#1)}mwfbKP$D-oE2`*3OGcZMH%VN_f%WdGslJ_E7j$2%9;)G!NW9#--FBSd&afewSxculh>ylo9C^x zN6LKbk!#jHQ!IWwc+1&vGix5(5Ap1e=Hf@U&CGguIi_*z<%S@`-QOnFTh|o1=FHZc zZ>4YieY$#o{jy6_9;}uB`>^ZhLV2O(&yJeif3ST9+fvS5-=!U%90|X6^mNz$|6hY{ zKGb)uUgpxsU&k+dFZx^Vn;C4g|G9mmu-x%C({0mA=cHU_7S?p+%XnY&{JM_z zwzFYgENiCy*QtAv9Jw)<>5SNq2kgJ^v_7`4uPiFtyY+X>Nq^4C#sOMwQ*W5PsPr-W z`GT))yA=#OD7O z60rQZHTU18m+$x6SXzHE&F`PG=S}^CZ+6?uv6OH=4Ja6 zZ|bj{@*^ql|K+Kh1>@HqoS&9s6z;Ii@B6;;Q!!S5KR;JbznydMSy#Q+j5)1AhHL&! z&i!|&smH`^ziJg$9Wkq)disCoy^j-Y=f3-2^ZnTG zgL_ls_-6mlUjx}DXJ|IQB8@@7_#Yf!vp@s44m@agRL zaqDAd_U`!VmNPs1-Ja;qnQzU1PD{PH?Dj%iQL)AOdqr+9yYu&XYk%FmpMNKl<0ZI~H_C*b)JmOrabAnZ z+Ih!B-`jqkcP#Gn+UlhiuUGN!+jh=Q#{Tw}cA+&9 zukt>=c^<&A-(Gskf&A~DLd$>41bsh#zUy1af#NGYy!ZY+`>ok|x$O6szaKYGvK5Q$ zy%TZ0{eFK%7V~CRKl{yR@62aVzN+!~X#dgcrBVS}$G#T)*?jUs|GI@9JmH@XVk2zs~I4&5}D`n6$T5w%gD5-Jl!uk(+<7sp!8tvvb={ zFikZu7X5sySaiGni?bO&qVxYucC~PM)6;%R?c{O3I$No4=Y+GPQyO>uUEIF+v#L#G zLZrs+xBNBMm)<`O`g7*Z)dMSMT;cZ&i~YzQAE;&Vu-Q=T)AmdCUn}p-RZY!acqp?W z(=0m1oBjP3&yR#0TR`Idb zuDN`_oj-avb}suAJpXvjCH~#d=Cr-uVz8AVi}9ja>I`Y+S$z4zF%#U5EiDY*{Kezl z2HTVv_wt#K7izqT+1Y6Y2Ea5raTqbdTM&3F(KX$o{ zX>ymsPWxKt@IRQ!FlArgyYt&sPccnwIF;WeIRB`)aZr%ql%9MSgJ+vw#cBV&DEqoa z2xLH>#Q9~m{WF@QGM>F+JbUT!(j{xA&91v4cR`y`BUkorpWJziB=!8+^G>}#ygjzL z%vx1fR5|ms@{Ds&mofM_|FD^L!$-_ypU}~uwug@9J?TB12Qr_%Qk=Q8{dJ#uCd^6w zB`>BjOxe_zcj|25Px-G>TW)7&uAFgl_NVJ!VG0@L8M9C9G~WNOW&hMV2{{=>d8uQ@ z6*JP-$vx1q-C}K^x%#QtjEq}})dC93YE>EL-pQ+wy(<**&wVf3+p-|9Rq4rE{K5)v z_t+Q(*2OH@?Z7aRnn*ZHkyC9q?;Fi@c`BIsE#l<22qT0@h@37QdDZ=mep!MUA zC4V?7SiB!9*vL0?a=4u`u*qou=wlqtzbmrJ1ERknoGIX!)h<=ee}=)*hnMX4YdE8{ z^Z&GkCjWKS+}+&TX89|YeVC?w=DF{z|Cg2>PL1BZOEg>3e|}?HjmiZP&kSbO-CNCX z%$aRy$NORNaf2@{hg>hduAKF8qC>FCLjEatuH8#0&Rce4`?hFF?tQ-mo?p2xVSS?M zxI2^Y#1=JyI|b73cJr1zWQ(q5-n_CdaptVz)r-qQs#rAxHu&F5Io;3tx_-9jn)^>o zH%Vk|=k=Y~VkU5InlC9b@Er`?mpgC_HVm} zo!RBs4br?x8}6FfxC-5J2soUZ!FDx3Ja3h%xykITo3o0Iw{cu>)BnPAZP_lSnj0rJ ztjqq-rYP9-c3Y*JoQbQ@E{7JD1#Wi}?&mgkvX?&GxBhvxUWVCKBa`QLKlE*-lUKW3 zFnn#Yb6H~^Pr?7SMstlq>`J-xt3$q9pL{bl zYu>za+Dc1v38_9d;Fdfy++Ide`#BNOQW^ zyqR*7_4Ub{{3)NhSmKV{7u#OHzvZ6ZlE(+^PO^tSF>w&>d2-96;@;wdt{Mn2izJ%%_=@w&Lu~JoM zrpPko*K#o`Df64(RUGaMXwLX{n>XavGug)d*i{;PdgAAq%zM;$RKgD)_-uDi`_S~LLz8Bvf1kED zGevsl3@LkSt+VqiqCef3_E$1RT5`UWz4@z^4bl(K*uR=k3G&0q-;T`e_U$vIAEZtZ zxUv0x&BF;y`>qJ-1SyATe17s_iNlE>UXlwBJNCZB^G)<)AH@Re4~8a_wr!hfpC>UzwaPPj8gC^_tQ_ZotrHb2`QoxT!#pZ9T^Gt5z^)RQRZO3Nr32P`;JM=`n zOVFi5MNs=%!$jpHI|9s9lSFIhoc|Vj>>De?wS60^=C4zp*pvKAQN?8j2ZN4cn?O>W z#>S{6jp7H+|GlHMVaAPr-mBQArtsh7tF%15>BB$gu+8})lja`1{djrdG+ps&+TpBS zue?N8uzZ*}m0{}POy|IvhaEM$npILK*LZ6=7dVu)b}jnTBo)gP=oKnh6eGFZW2M$_ zUyB15m&QERm-=J;G)N?!D}ifAtm~WjLur0$K_dG6P|iTx_YVJY&{X`_f<#Q$~trQB(3m&GlLHPGCIbRu=KE+dEgXf#~IBY ziIE8`IgWL64=_Am%hmNTq%JICQsbgOQjL#~dL5eN@ce18ME$N6Iu`$%{}S5X&7|AdB>DlDc`%coqv z`1GvOv8+Qc%pdM9KQ3`zE0|OL{FR^PlXC^srv?pP8N^d>qvW(V)W8Sf>Z@8ptt zDtLaokHyL)nRP8*2|gM&8zuaYH5L977Rh4_5H8c%Y80x>YiIF^?So?kuh{1YqFkC< zH!PB3=E^@0)X|$~_#vMaGG+b1F$m@TYztAGUg4J#7 z&EvOf_xqR?MxAPXnpU~+)1Hfg0Y@7)cx&(7kQA88`94YhN_FvztBm`KOAq{g85J1& z@SW{Oi}ihbqjm>uZnp9gIFS1Es&h-b}VzI(#HJvNaY z2f7&M)C)Q==@ow$-y-u!;>xY;r2m|sGq;wv=&n1xJi3Kfbji$5o~={O{2s7O=?Yq~ z;``}qI!D)79#Fp-ma;F$Z2hV_kj?_f)2a(5h&*0#k$>vhqhFI^ZW%28u8<_4!8f&# zapL@3zIB)0RDPZi?>1FeXN9KiVkh;`DGHAEiJx3={yAlJ%~!Ja<(u7?FI-IJO;+>w zv+AGYW$q(U6W|r?_^_$<*(=doi=9MQ=_hN59(yU4_&95lhI@;_GefWbjsrf^1(x=F zndYqcdD`sS;H6Es+MHMHoMZG${C%mk+@T+z;(r}#y7fwO-+}tJM@#Hh8uh>0Bz&v; zy2o|lzwf{PvNC+KGT%uu80a1Q*~)r7$UL1sX8LUYx;tsxV5Dx9;kJ_G+@(QFu}&{oml3o z*3cf!jrDw=9~8y$Sa@>GPkMKECCgG5Bma)S=^A}WOYVuk@Z8tltjxtIA@)eDl;m%-{)oVIf~~&rXir9z6>~B#H&T9gpcbERn3& z{gJVd(K>3H%9F_r{VeS@lWaKl%7}wn6va16) z=f;wc?ych0Arb+>j-GxD3=9@dp1#a)!MnT!7!nv57#JBCVKhjNMFT9y!@$76Wd8xo W2J2yQ2D5nsl2XGN1sGTv!CU|vRQHYm literal 0 HcmV?d00001 diff --git a/doc/qtdesignstudio/src/qtdesignstudio-toc.qdoc b/doc/qtdesignstudio/src/qtdesignstudio-toc.qdoc index de4e993b7f6..c79a576c56f 100644 --- a/doc/qtdesignstudio/src/qtdesignstudio-toc.qdoc +++ b/doc/qtdesignstudio/src/qtdesignstudio-toc.qdoc @@ -214,6 +214,7 @@ \list \li \l{Finding and Replacing} \li \l{Searching with the Locator} + \li \l{Jump to the Code} \endlist \li \l{Refactoring} \li \l{Applying Refactoring Actions} From c6b6a64e24b1751876735d8e428973bbe78e057e Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 15 Dec 2023 12:56:17 +0200 Subject: [PATCH 14/24] Effect Maker: Fix for case sensitive file systems Helper node .qen are all lowercase, so use lowercased node ids as filenames are generated from those. Change-Id: I86ae7b07dbc30b7a68e0ee9214213d83d4e5dbd3 Reviewed-by: Thomas Hartmann Reviewed-by: Qt CI Patch Build Bot --- src/plugins/effectmakernew/compositionnode.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/effectmakernew/compositionnode.cpp b/src/plugins/effectmakernew/compositionnode.cpp index 9520e50d050..9412153ddee 100644 --- a/src/plugins/effectmakernew/compositionnode.cpp +++ b/src/plugins/effectmakernew/compositionnode.cpp @@ -137,9 +137,9 @@ void CompositionNode::parse(const QString &effectName, const QString &qenPath, c QString trimmedLine = codeLine.trimmed(); if (trimmedLine.startsWith("@requires")) { // Get the required node, remove "@requires " - QString nodeName = trimmedLine.sliced(10); - if (!nodeName.isEmpty() && !m_requiredNodes.contains(nodeName)) - m_requiredNodes << nodeName; + QString nodeId = trimmedLine.sliced(10).toLower(); + if (!nodeId.isEmpty() && !m_requiredNodes.contains(nodeId)) + m_requiredNodes << nodeId; } } } From 2d166d083958aa3a83061b465ff75f04e8edc8e0 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 15 Dec 2023 16:43:52 +0200 Subject: [PATCH 15/24] Effect Maker: Notice property changes in helper nodes Property changes in helper nodes are now properly noticed as unsaved changes. Change-Id: I757f519075d2f96be2b84b57b25b916665e26ba7 Reviewed-by: Qt CI Patch Build Bot Reviewed-by: Thomas Hartmann --- src/plugins/effectmakernew/effectmakermodel.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/plugins/effectmakernew/effectmakermodel.cpp b/src/plugins/effectmakernew/effectmakermodel.cpp index fbb439ff17d..c74fcd27cc3 100644 --- a/src/plugins/effectmakernew/effectmakermodel.cpp +++ b/src/plugins/effectmakernew/effectmakermodel.cpp @@ -124,6 +124,10 @@ void EffectMakerModel::addNode(const QString &nodeQenPath) const QString path = EffectUtils::nodesSourcesPath() + "/common/" + requiredId + ".qen"; auto requiredNode = new CompositionNode({}, path); + connect(qobject_cast(requiredNode->uniformsModel()), + &EffectMakerUniformsModel::dataChanged, this, [this] { + setHasUnsavedChanges(true); + }); requiredNode->setRefCount(1); m_nodes.prepend(requiredNode); } From 6bf7ae11a083953247c1948215dbde82277554cd Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 15 Dec 2023 13:21:05 +0200 Subject: [PATCH 16/24] Effect Maker: Change blur helper to match helper on qtquickdesigner When running effect in project, source property for effect doesn't seem to have actual dimensions, so use the root item dimensions. Task-number: QDS-11542 Change-Id: Ibc4053224de8882dead338f1833bf65397f5eac3 Reviewed-by: Qt CI Patch Build Bot Reviewed-by: Thomas Hartmann --- .../qmldesigner/effectMakerQmlSources/BlurHelper.qml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/share/qtcreator/qmldesigner/effectMakerQmlSources/BlurHelper.qml b/share/qtcreator/qmldesigner/effectMakerQmlSources/BlurHelper.qml index e68a0bc8a25..0227d0f54af 100644 --- a/share/qtcreator/qmldesigner/effectMakerQmlSources/BlurHelper.qml +++ b/share/qtcreator/qmldesigner/effectMakerQmlSources/BlurHelper.qml @@ -25,7 +25,6 @@ Item { QtObject { id: priv - property bool useBlurItem1: true property bool useBlurItem2: rootItem.blurMax > 2 property bool useBlurItem3: rootItem.blurMax > 8 property bool useBlurItem4: rootItem.blurMax > 16 @@ -34,12 +33,12 @@ Item { BlurItem { id: blurredItemSource1 - property Item src: priv.useBlurItem1 ? source : null + property Item src: source // Size of the first blurred item is by default half of the source. // Increase for quality and decrease for performance & more blur. readonly property int blurItemSize: 8 - width: src ? Math.ceil(src.width / 16) * blurItemSize : 0 - height: src ? Math.ceil(src.height / 16) * blurItemSize : 0 + width: Math.ceil(rootItem.width / 16) * blurItemSize + height: Math.ceil(rootItem.height / 16) * blurItemSize } BlurItem { id: blurredItemSource2 From e6cc2eeba69d2a647e83b20a3065c0b54188386e Mon Sep 17 00:00:00 2001 From: Henning Gruendl Date: Fri, 15 Dec 2023 13:17:48 +0100 Subject: [PATCH 17/24] QmlDesigner: Fix unfocused TextField selection Change-Id: Idd5438fa77d4aa783f71a6826b3e2234da326c34 Reviewed-by: Qt CI Patch Build Bot Reviewed-by: Reviewed-by: Thomas Hartmann --- .../imports/StudioControls/TextField.qml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/TextField.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/TextField.qml index 0180aa06ad5..58bd9c37d2e 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/TextField.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioControls/TextField.qml @@ -86,6 +86,9 @@ T.TextField { // was closed due to an menu item click. if (control.activeFocus && control.focusReason !== Qt.OtherFocusReason) control.preFocusText = control.text + + if (!control.activeFocus) + control.deselect() } onEditChanged: { From 4eb151197703b5a8fc25c1ceb3cea6690dc6e2e7 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Mon, 18 Dec 2023 11:39:55 +0100 Subject: [PATCH 18/24] QmlDesigner: Add checks against deleting files There were reported cases in which the documents folder was deleted. Adding checks to ensure only temporary files are deleted or single examples. Task-number: QDS-11545 Change-Id: I93257ca6a9898ea6844cbc4125daef28ea57a7e7 Reviewed-by: Miikka Heikkinen Reviewed-by: Tim Jenssen Reviewed-by: Qt CI Patch Build Bot --- .../qmldesigner/utils/fileextractor.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/plugins/qmldesigner/utils/fileextractor.cpp b/src/plugins/qmldesigner/utils/fileextractor.cpp index 40381c5a27a..92b26e6e474 100644 --- a/src/plugins/qmldesigner/utils/fileextractor.cpp +++ b/src/plugins/qmldesigner/utils/fileextractor.cpp @@ -216,14 +216,16 @@ void FileExtractor::extract() m_targetFolder = m_targetPath.toString() + "/" + m_archiveName; // If the target directory already exists, remove it and its content - QDir targetDir(m_targetFolder); - if (targetDir.exists() && m_clearTargetPathContents) - targetDir.removeRecursively(); - if (m_alwaysCreateDir) { - // Create a new directory to generate a proper creation date - targetDir.mkdir(m_targetFolder); - } + QTC_ASSERT(!m_targetPath.isEmpty(), return ); + + FilePath targetFilePath = FilePath::fromUserInput(m_targetFolder); + if (targetFilePath.exists() && m_clearTargetPathContents) + targetFilePath.removeRecursively(); + + // Create a new directory to generate a proper creation date + if (m_alwaysCreateDir) + targetFilePath.createDir(); const auto sourceAndCommand = Unarchiver::sourceAndCommand(m_sourceFile); QTC_ASSERT(sourceAndCommand, return); @@ -261,6 +263,8 @@ void FileExtractor::extract() void QmlDesigner::FileExtractor::removeTempTargetPath() { if (m_isTempTargetPath && m_targetPath.exists()) { + QTC_ASSERT(m_targetPath.toString().startsWith(QDir::tempPath()), qDebug() << m_targetPath; + return ); m_targetPath.removeRecursively(); m_isTempTargetPath = false; } From 24c2cd857d0143d4c1ba66bdbc44e44aeceb53fe Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Tue, 19 Dec 2023 13:09:14 +0200 Subject: [PATCH 19/24] Effect Maker: Store property display names when saving effect Fixes: QDS-11345 Change-Id: Id948bf6474fcc6bfff0d6e2f14241c4e4e916f6a Reviewed-by: Thomas Hartmann Reviewed-by: Qt CI Patch Build Bot --- src/plugins/effectmakernew/effectmakermodel.cpp | 3 +++ src/plugins/effectmakernew/uniform.cpp | 5 +++++ src/plugins/effectmakernew/uniform.h | 1 + 3 files changed, 9 insertions(+) diff --git a/src/plugins/effectmakernew/effectmakermodel.cpp b/src/plugins/effectmakernew/effectmakermodel.cpp index c74fcd27cc3..4fcb6686a76 100644 --- a/src/plugins/effectmakernew/effectmakermodel.cpp +++ b/src/plugins/effectmakernew/effectmakermodel.cpp @@ -494,6 +494,9 @@ QJsonObject nodeToJson(const CompositionNode &node) QString type = Uniform::stringFromType(uniform->type()); uniformObject.insert("type", type); + if (!uniform->displayName().isEmpty()) + uniformObject.insert("displayName", QString(uniform->displayName())); + QString value = variantAsDataString(uniform->type(), uniform->value()); if (uniform->type() == Uniform::Type::Sampler) value = QFileInfo(value).fileName(); diff --git a/src/plugins/effectmakernew/uniform.cpp b/src/plugins/effectmakernew/uniform.cpp index be10cc7f421..e9084f27991 100644 --- a/src/plugins/effectmakernew/uniform.cpp +++ b/src/plugins/effectmakernew/uniform.cpp @@ -114,6 +114,11 @@ QString Uniform::description() const return m_description; } +QString Uniform::displayName() const +{ + return m_displayName; +} + QString Uniform::customValue() const { return m_customValue; diff --git a/src/plugins/effectmakernew/uniform.h b/src/plugins/effectmakernew/uniform.h index 7216c6d9d6b..2aa35d499d9 100644 --- a/src/plugins/effectmakernew/uniform.h +++ b/src/plugins/effectmakernew/uniform.h @@ -59,6 +59,7 @@ public: QString name() const; QString description() const; + QString displayName() const; QString customValue() const; void setCustomValue(const QString &newCustomValue); From c8f35db4835481e54183c4fa8b9659b13908e664 Mon Sep 17 00:00:00 2001 From: Tim Jenssen Date: Tue, 19 Dec 2023 12:40:16 +0100 Subject: [PATCH 20/24] ADS: fix crash on exit None QObjects are not children of something - so they need to get tracked. Task-number: QDS-11555 Change-Id: I866097f9553a6080b30f0c12362bf7ec66321c05 Reviewed-by: Thomas Hartmann --- src/libs/advanceddockingsystem/dockareawidget.cpp | 7 +++---- src/libs/advanceddockingsystem/dockareawidget.h | 4 +++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/libs/advanceddockingsystem/dockareawidget.cpp b/src/libs/advanceddockingsystem/dockareawidget.cpp index 5cf12d70509..89fbbcfb3b6 100644 --- a/src/libs/advanceddockingsystem/dockareawidget.cpp +++ b/src/libs/advanceddockingsystem/dockareawidget.cpp @@ -189,7 +189,8 @@ struct DockAreaWidgetPrivate { DockAreaWidget *q = nullptr; QBoxLayout *m_layout = nullptr; - DockAreaLayout *m_contentsLayout = nullptr; + // DockAreaLayout is not a QObject -> std::unique_ptr manages deletion + std::unique_ptr m_contentsLayout; DockAreaTitleBar *m_titleBar = nullptr; DockManager *m_dockManager = nullptr; AutoHideDockContainer *m_autoHideDockContainer = nullptr; @@ -328,7 +329,7 @@ DockAreaWidget::DockAreaWidget(DockManager *dockManager, DockContainerWidget *pa setLayout(d->m_layout); d->createTitleBar(); - d->m_contentsLayout = new DockAreaLayout(d->m_layout); + d->m_contentsLayout = std::make_unique(d->m_layout); if (d->m_dockManager) emit d->m_dockManager->dockAreaCreated(this); } @@ -336,8 +337,6 @@ DockAreaWidget::DockAreaWidget(DockManager *dockManager, DockContainerWidget *pa DockAreaWidget::~DockAreaWidget() { qCInfo(adsLog) << Q_FUNC_INFO; - delete d->m_contentsLayout; - delete d; } DockManager *DockAreaWidget::dockManager() const diff --git a/src/libs/advanceddockingsystem/dockareawidget.h b/src/libs/advanceddockingsystem/dockareawidget.h index 59f8b9ee207..dae4d942b8c 100644 --- a/src/libs/advanceddockingsystem/dockareawidget.h +++ b/src/libs/advanceddockingsystem/dockareawidget.h @@ -9,6 +9,8 @@ #include +#include + QT_BEGIN_NAMESPACE class QAbstractButton; class QXmlStreamWriter; @@ -33,7 +35,7 @@ class ADS_EXPORT DockAreaWidget : public QFrame { Q_OBJECT private: - DockAreaWidgetPrivate *d; ///< private data (pimpl) + std::unique_ptr d; ///< private data (pimpl) friend struct DockAreaWidgetPrivate; friend class DockContainerWidget; friend class DockContainerWidgetPrivate; From 7969fb2147c1a73fa721531d145c40078b1a9fd6 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 13 Dec 2023 21:15:03 +0100 Subject: [PATCH 21/24] QmlDesignerPlugin: Use Utils::Guard for guarding the recursive call Change-Id: I179d58374fcef4bebce1c3240bf8ba3d956f9c9c Reviewed-by: Tim Jenssen Reviewed-by: Qt CI Patch Build Bot --- src/plugins/qmldesigner/qmldesignerplugin.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp index 4ce600a6a20..de53fc339a7 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.cpp +++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp @@ -62,11 +62,12 @@ #include #include #include -#include #include #include +#include #include +#include #include #include #include @@ -81,9 +82,10 @@ #include #include -#include "nanotrace/nanotrace.h" #include +#include + static Q_LOGGING_CATEGORY(qmldesignerLog, "qtc.qmldesigner", QtWarningMsg) using namespace QmlDesigner::Internal; @@ -161,7 +163,7 @@ public: SettingsPage settingsPage{externalDependencies}; DesignModeWidget mainWidget; QtQuickDesignerFactory m_qtQuickDesignerFactory; - bool blockEditorChange = false; + Utils::Guard m_ignoreChanges; Utils::UniqueObjectPtr toolBar; Utils::UniqueObjectPtr statusBar; QHash m_traceIdentifierDataHash; @@ -496,7 +498,7 @@ void QmlDesignerPlugin::hideDesigner() void QmlDesignerPlugin::changeEditor() { - if (d->blockEditorChange) + if (d->m_ignoreChanges.isLocked()) return; clearDesigner(); @@ -687,9 +689,8 @@ void QmlDesignerPlugin::switchToTextModeDeferred() void QmlDesignerPlugin::emitCurrentTextEditorChanged(Core::IEditor *editor) { - d->blockEditorChange = true; + const std::lock_guard locker(d->m_ignoreChanges); emit Core::EditorManager::instance()->currentEditorChanged(editor); - d->blockEditorChange = false; } double QmlDesignerPlugin::formEditorDevicePixelRatio() From 466856ca79e64df2f62813f372fb660a1f2960f4 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 13 Dec 2023 21:31:37 +0100 Subject: [PATCH 22/24] ShortCutManager: Avoid using sender() Change-Id: Ibe0c2835463e1397b960526383afed73df50b62a Reviewed-by: Qt CI Patch Build Bot Reviewed-by: Tim Jenssen --- src/plugins/qmldesigner/shortcutmanager.cpp | 34 ++++++++------------- src/plugins/qmldesigner/shortcutmanager.h | 2 -- 2 files changed, 12 insertions(+), 24 deletions(-) diff --git a/src/plugins/qmldesigner/shortcutmanager.cpp b/src/plugins/qmldesigner/shortcutmanager.cpp index 157989ed200..e4eeb476225 100644 --- a/src/plugins/qmldesigner/shortcutmanager.cpp +++ b/src/plugins/qmldesigner/shortcutmanager.cpp @@ -330,16 +330,24 @@ void ShortCutManager::selectAll() void ShortCutManager::connectUndoActions(DesignDocument *designDocument) { if (designDocument) { - connect(designDocument, &DesignDocument::undoAvailable, this, &ShortCutManager::undoAvailable); - connect(designDocument, &DesignDocument::redoAvailable, this, &ShortCutManager::redoAvailable); + connect(designDocument, &DesignDocument::undoAvailable, this, + [this, designDocument](bool isAvailable) { + if (currentDesignDocument() == designDocument) + m_undoAction.setEnabled(isAvailable); + }); + connect(designDocument, &DesignDocument::redoAvailable, this, + [this, designDocument](bool isAvailable) { + if (currentDesignDocument() == designDocument) + m_redoAction.setEnabled(isAvailable); + }); } } void ShortCutManager::disconnectUndoActions(DesignDocument *designDocument) { if (designDocument) { - disconnect(designDocument, &DesignDocument::undoAvailable, this, &ShortCutManager::undoAvailable); - disconnect(designDocument, &DesignDocument::redoAvailable, this, &ShortCutManager::redoAvailable); + disconnect(designDocument, &DesignDocument::undoAvailable, this, nullptr); + disconnect(designDocument, &DesignDocument::redoAvailable, this, nullptr); } } @@ -354,24 +362,6 @@ void ShortCutManager::updateUndoActions(DesignDocument *designDocument) } } -void ShortCutManager::undoAvailable(bool isAvailable) -{ - auto documentController = qobject_cast(sender()); - if (currentDesignDocument() && - currentDesignDocument() == documentController) { - m_undoAction.setEnabled(isAvailable); - } -} - -void ShortCutManager::redoAvailable(bool isAvailable) -{ - auto documentController = qobject_cast(sender()); - if (currentDesignDocument() && - currentDesignDocument() == documentController) { - m_redoAction.setEnabled(isAvailable); - } -} - void ShortCutManager::goIntoComponent() { if (currentDesignDocument() diff --git a/src/plugins/qmldesigner/shortcutmanager.h b/src/plugins/qmldesigner/shortcutmanager.h index ee2c12e212a..70b019217ca 100644 --- a/src/plugins/qmldesigner/shortcutmanager.h +++ b/src/plugins/qmldesigner/shortcutmanager.h @@ -41,8 +41,6 @@ private: void duplicateSelected(); void paste(); void selectAll(); - void undoAvailable(bool isAvailable); - void redoAvailable(bool isAvailable); void goIntoComponent(); private: From 77aeba3c881314ff3c800331a1dc76f7e7f23dfa Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 13 Dec 2023 21:36:22 +0100 Subject: [PATCH 23/24] FileDownloader: Avoid using sender() Change-Id: Ifd943b1c827e30fd72320035d1329b6e47aeee96 Reviewed-by: Qt CI Patch Build Bot Reviewed-by: Tim Jenssen --- .../qmldesigner/utils/filedownloader.cpp | 30 ++++++++----------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/src/plugins/qmldesigner/utils/filedownloader.cpp b/src/plugins/qmldesigner/utils/filedownloader.cpp index 38f0caeeb36..8c85b65a18d 100644 --- a/src/plugins/qmldesigner/utils/filedownloader.cpp +++ b/src/plugins/qmldesigner/utils/filedownloader.cpp @@ -74,7 +74,7 @@ void FileDownloader::start() QNetworkReply *reply = Utils::NetworkAccessManager::instance()->get(request); m_reply = reply; - QNetworkReply::connect(reply, &QNetworkReply::readyRead, this, [this, reply]() { + QNetworkReply::connect(reply, &QNetworkReply::readyRead, this, [this, reply] { bool isDownloadingFile = false; QString contentType; if (!reply->hasRawHeader("Content-Type")) { @@ -115,7 +115,7 @@ void FileDownloader::start() emit reply->redirectAllowed(); }); - QNetworkReply::connect(reply, &QNetworkReply::finished, this, [this, reply]() { + QNetworkReply::connect(reply, &QNetworkReply::finished, this, [this, reply] { if (reply->error()) { if (reply->error() != QNetworkReply::OperationCanceledError) { qWarning() << Q_FUNC_INFO << m_url << reply->errorString(); @@ -282,7 +282,7 @@ void FileDownloader::doProbeUrl() emit reply->redirectAllowed(); }); - QNetworkReply::connect(reply, &QNetworkReply::finished, this, [this, reply]() { + QNetworkReply::connect(reply, &QNetworkReply::finished, this, [this, reply] { if (reply->error()) return; @@ -295,22 +295,18 @@ void FileDownloader::doProbeUrl() reply->deleteLater(); }); - QNetworkReply::connect(reply, - &QNetworkReply::errorOccurred, - this, - [this](QNetworkReply::NetworkError code) { + QNetworkReply::connect(reply, &QNetworkReply::errorOccurred, + this, [this, reply](QNetworkReply::NetworkError code) { + if (QQmlData::wasDeleted(this)) { + qDebug() << Q_FUNC_INFO << "FileDownloader was deleted."; + return; + } - if (QQmlData::wasDeleted(this)) { - qDebug() << Q_FUNC_INFO << "FileDownloader was deleted."; - return; - } + qDebug() << Q_FUNC_INFO << "Network error:" << code << reply->errorString(); - qDebug() << Q_FUNC_INFO << "Network error:" << code - << qobject_cast(sender())->errorString(); - - m_available = false; - emit availableChanged(); - }); + m_available = false; + emit availableChanged(); + }); } void FileDownloader::setTargetFilePath(const QString &path) From e436bf47fe3b24979bdca26d6a208b2fea49e5e0 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 13 Dec 2023 23:09:45 +0100 Subject: [PATCH 24/24] EasingCurveDialog: Avoid using sender() Amends a0e551a1e8967d1697df276b289d54b469ada10f Change-Id: I2178d4417214c77a104c0d0840f1de6f460fadb5 Reviewed-by: Qt CI Patch Build Bot Reviewed-by: Tim Jenssen --- .../timelineeditor/easingcurvedialog.cpp | 52 ++++++++----------- .../timelineeditor/easingcurvedialog.h | 16 ++---- 2 files changed, 25 insertions(+), 43 deletions(-) diff --git a/src/plugins/qmldesigner/components/timelineeditor/easingcurvedialog.cpp b/src/plugins/qmldesigner/components/timelineeditor/easingcurvedialog.cpp index b6b49d054d7..a2fb6339f31 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/easingcurvedialog.cpp +++ b/src/plugins/qmldesigner/components/timelineeditor/easingcurvedialog.cpp @@ -41,12 +41,12 @@ EasingCurveDialog::EasingCurveDialog(const QList &frames, QWidget *pa { setWindowFlag(Qt::Tool, true); - auto tw = new QTabWidget; - tw->setTabPosition(QTabWidget::East); - tw->addTab(m_splineEditor, "Curve"); - tw->addTab(m_text, "Text"); + m_tabWidget = new QTabWidget; + m_tabWidget->setTabPosition(QTabWidget::East); + m_tabWidget->addTab(m_splineEditor, "Curve"); + m_tabWidget->addTab(m_text, "Text"); - connect(tw, &QTabWidget::currentChanged, this, &EasingCurveDialog::tabClicked); + connect(m_tabWidget, &QTabWidget::currentChanged, this, &EasingCurveDialog::tabClicked); connect(m_text, &QPlainTextEdit::textChanged, this, &EasingCurveDialog::textChanged); auto labelFont = m_label->font(); @@ -105,7 +105,7 @@ EasingCurveDialog::EasingCurveDialog(const QList &frames, QWidget *pa grid->addLayout(vbox, 0, 0); grid->addWidget(presetBar, 0, 1, Qt::AlignBottom); - grid->addWidget(tw); + grid->addWidget(m_tabWidget); grid->addWidget(m_presets, 1, 1); grid->addLayout(m_durationLayout, 2, 0); grid->addLayout(buttonLayout, 2, 1); @@ -126,7 +126,6 @@ EasingCurveDialog::EasingCurveDialog(const QList &frames, QWidget *pa connect(durationEdit, &QSpinBox::valueChanged, m_splineEditor, &SplineEditor::setDuration); connect(animateButton, &QPushButton::clicked, m_splineEditor, &SplineEditor::animate); - resize(QSize(1421, 918)); } @@ -185,7 +184,7 @@ bool EasingCurveDialog::apply() } AbstractView *view = m_frames.first().view(); - return view->executeInTransaction("EasingCurveDialog::apply", [this](){ + return view->executeInTransaction("EasingCurveDialog::apply", [this] { auto expression = m_splineEditor->easingCurve().toString(); for (const auto &frame : std::as_const(m_frames)) frame.bindingProperty(m_easingCurveProperty).setExpression(expression); @@ -201,29 +200,22 @@ void EasingCurveDialog::textChanged() void EasingCurveDialog::tabClicked(int id) { - if (auto tw = qobject_cast(sender())) { - int seid = tw->indexOf(m_splineEditor); - if (seid == id) { - for (int i = 0; i < m_durationLayout->count(); ++i) { - auto *item = m_durationLayout->itemAt(i); - if (auto *widget = item->widget()) - widget->show(); - } - - auto curve = m_splineEditor->easingCurve(); - curve.fromString(m_text->toPlainText()); - m_splineEditor->setEasingCurve(curve); - - } else { - for (int i = 0; i < m_durationLayout->count(); ++i) { - auto *item = m_durationLayout->itemAt(i); - if (auto *widget = item->widget()) - widget->hide(); - } - - auto curve = m_splineEditor->easingCurve(); - m_text->setPlainText(curve.toString()); + const int seid = m_tabWidget->indexOf(m_splineEditor); + if (seid == id) { + for (int i = 0; i < m_durationLayout->count(); ++i) { + if (auto *widget = m_durationLayout->itemAt(i)->widget()) + widget->show(); } + auto curve = m_splineEditor->easingCurve(); + curve.fromString(m_text->toPlainText()); + m_splineEditor->setEasingCurve(curve); + } else { + for (int i = 0; i < m_durationLayout->count(); ++i) { + if (auto *widget = m_durationLayout->itemAt(i)->widget()) + widget->hide(); + } + auto curve = m_splineEditor->easingCurve(); + m_text->setPlainText(curve.toString()); } } diff --git a/src/plugins/qmldesigner/components/timelineeditor/easingcurvedialog.h b/src/plugins/qmldesigner/components/timelineeditor/easingcurvedialog.h index 06ce53c2305..039697db5a3 100644 --- a/src/plugins/qmldesigner/components/timelineeditor/easingcurvedialog.h +++ b/src/plugins/qmldesigner/components/timelineeditor/easingcurvedialog.h @@ -9,9 +9,10 @@ #include QT_BEGIN_NAMESPACE +class QHBoxLayout; class QLabel; class QPlainTextEdit; -class QHBoxLayout; +class QTabWidget; QT_END_NAMESPACE namespace QmlDesigner { @@ -33,32 +34,21 @@ public: private: bool apply(); - void textChanged(); - void tabClicked(int id); - void presetTabClicked(int id); - void buttonsClicked(QDialogButtonBox::StandardButton button); - void updateEasingCurve(const EasingCurve &curve); private: + QTabWidget *m_tabWidget = nullptr; SplineEditor *m_splineEditor = nullptr; - QPlainTextEdit *m_text = nullptr; - PresetEditor *m_presets = nullptr; - QHBoxLayout *m_durationLayout = nullptr; - QDialogButtonBox *m_buttons = nullptr; - QLabel *m_label = nullptr; - QList m_frames; - PropertyName m_easingCurveProperty; };