From 1ed3235e84a083240bb76bb545331fa27f7c8ae4 Mon Sep 17 00:00:00 2001 From: Shrief Gabr Date: Thu, 14 Mar 2024 14:22:46 +0200 Subject: [PATCH] EffectComposer: Toggle "Assign to.." button based on component selection Task-number: QDS-12148 Change-Id: I1f44df7c6c027c36c09f7c4d74e4dd609542c5b8 Reviewed-by: Qt CI Patch Build Bot Reviewed-by: Mahmoud Badri --- .../EffectComposerTopBar.qml | 3 ++- .../effectcomposer/effectcomposermodel.cpp | 13 +++++++++++++ src/plugins/effectcomposer/effectcomposermodel.h | 6 ++++++ src/plugins/effectcomposer/effectcomposerview.cpp | 15 +++++++++++++++ src/plugins/effectcomposer/effectcomposerview.h | 3 +++ 5 files changed, 39 insertions(+), 1 deletion(-) diff --git a/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposerTopBar.qml b/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposerTopBar.qml index d5ac4461c48..1912592f2fc 100644 --- a/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposerTopBar.qml +++ b/share/qtcreator/qmldesigner/effectComposerQmlSources/EffectComposerTopBar.qml @@ -58,7 +58,8 @@ Rectangle { style: StudioTheme.Values.viewBarButtonStyle buttonIcon: StudioTheme.Constants.assignTo_medium tooltip: qsTr("Assign current composition to selected item") - enabled: root.backendModel ? root.backendModel.isEnabled + enabled: root.backendModel ? root.backendModel.hasValidTarget + && root.backendModel.isEnabled && root.backendModel.currentComposition !== "" : false diff --git a/src/plugins/effectcomposer/effectcomposermodel.cpp b/src/plugins/effectcomposer/effectcomposermodel.cpp index 5a5ad5718c2..092df2b3e4a 100644 --- a/src/plugins/effectcomposer/effectcomposermodel.cpp +++ b/src/plugins/effectcomposer/effectcomposermodel.cpp @@ -1729,6 +1729,19 @@ void EffectComposerModel::setIsEnabled(bool enabled) emit isEnabledChanged(); } +bool EffectComposerModel::hasValidTarget() const +{ + return m_hasValidTarget; +} + +void EffectComposerModel::setHasValidTarget(bool validTarget) +{ + if (m_hasValidTarget == validTarget) + return; + m_hasValidTarget = validTarget; + emit hasValidTargetChanged(); +} + QString EffectComposerModel::getQmlImagesString(bool localFiles) { QString imagesString; diff --git a/src/plugins/effectcomposer/effectcomposermodel.h b/src/plugins/effectcomposer/effectcomposermodel.h index bd4040efc27..3dca41abf9e 100644 --- a/src/plugins/effectcomposer/effectcomposermodel.h +++ b/src/plugins/effectcomposer/effectcomposermodel.h @@ -48,6 +48,7 @@ class EffectComposerModel : public QAbstractListModel Q_PROPERTY(bool hasUnsavedChanges MEMBER m_hasUnsavedChanges WRITE setHasUnsavedChanges NOTIFY hasUnsavedChangesChanged) Q_PROPERTY(bool shadersUpToDate READ shadersUpToDate WRITE setShadersUpToDate NOTIFY shadersUpToDateChanged) Q_PROPERTY(bool isEnabled READ isEnabled WRITE setIsEnabled NOTIFY isEnabledChanged) + Q_PROPERTY(bool hasValidTarget READ hasValidTarget WRITE setHasValidTarget NOTIFY hasValidTargetChanged) Q_PROPERTY(QString currentComposition READ currentComposition WRITE setCurrentComposition NOTIFY currentCompositionChanged) public: @@ -77,6 +78,9 @@ public: bool isEnabled() const; void setIsEnabled(bool enabled); + bool hasValidTarget() const; + void setHasValidTarget(bool validTarget); + QString fragmentShader() const; void setFragmentShader(const QString &newFragmentShader); @@ -110,6 +114,7 @@ signals: void effectErrorChanged(); void shadersUpToDateChanged(); void isEnabledChanged(); + void hasValidTargetChanged(); void shadersBaked(); void currentCompositionChanged(); void nodesChanged(); @@ -210,6 +215,7 @@ private: QString m_qmlComponentString; bool m_loadComponentImages = true; bool m_isEnabled = true; + bool m_hasValidTarget = false; QString m_currentComposition; QTimer m_rebakeTimer; diff --git a/src/plugins/effectcomposer/effectcomposerview.cpp b/src/plugins/effectcomposer/effectcomposerview.cpp index e7a879bd8b0..ed50c389a83 100644 --- a/src/plugins/effectcomposer/effectcomposerview.cpp +++ b/src/plugins/effectcomposer/effectcomposerview.cpp @@ -105,4 +105,19 @@ void EffectComposerView::modelAboutToBeDetached(QmlDesigner::Model *model) AbstractView::modelAboutToBeDetached(model); } +void EffectComposerView::selectedNodesChanged(const QList & selectedNodeList, + const QList & /*lastSelectedNodeList*/) +{ + bool hasValidTarget = false; + + for (const QmlDesigner::ModelNode &node : selectedNodeList) { + if (node.metaInfo().isQtQuickItem()) { + hasValidTarget = true; + break; + } + } + + m_widget->effectComposerModel()->setHasValidTarget(hasValidTarget); +} + } // namespace EffectComposer diff --git a/src/plugins/effectcomposer/effectcomposerview.h b/src/plugins/effectcomposer/effectcomposerview.h index c7a381cb7db..49a7b32621b 100644 --- a/src/plugins/effectcomposer/effectcomposerview.h +++ b/src/plugins/effectcomposer/effectcomposerview.h @@ -4,6 +4,7 @@ #pragma once #include "abstractview.h" +#include "modelnode.h" #include @@ -35,6 +36,8 @@ public: // AbstractView void modelAttached(QmlDesigner::Model *model) override; void modelAboutToBeDetached(QmlDesigner::Model *model) override; + void selectedNodesChanged(const QList &selectedNodeList, + const QList &lastSelectedNodeList) override; private: void customNotification(const AbstractView *view, const QString &identifier,