EffectComposer: Toggle "Assign to.." button based on component selection

Task-number: QDS-12148
Change-Id: I1f44df7c6c027c36c09f7c4d74e4dd609542c5b8
Reviewed-by: Qt CI Patch Build Bot <ci_patchbuild_bot@qt.io>
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
This commit is contained in:
Shrief Gabr
2024-03-14 14:22:46 +02:00
parent 36cdab7f98
commit 1ed3235e84
5 changed files with 39 additions and 1 deletions

View File

@@ -58,7 +58,8 @@ Rectangle {
style: StudioTheme.Values.viewBarButtonStyle style: StudioTheme.Values.viewBarButtonStyle
buttonIcon: StudioTheme.Constants.assignTo_medium buttonIcon: StudioTheme.Constants.assignTo_medium
tooltip: qsTr("Assign current composition to selected item") 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 !== "" && root.backendModel.currentComposition !== ""
: false : false

View File

@@ -1729,6 +1729,19 @@ void EffectComposerModel::setIsEnabled(bool enabled)
emit isEnabledChanged(); 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 EffectComposerModel::getQmlImagesString(bool localFiles)
{ {
QString imagesString; QString imagesString;

View File

@@ -48,6 +48,7 @@ class EffectComposerModel : public QAbstractListModel
Q_PROPERTY(bool hasUnsavedChanges MEMBER m_hasUnsavedChanges WRITE setHasUnsavedChanges NOTIFY hasUnsavedChangesChanged) Q_PROPERTY(bool hasUnsavedChanges MEMBER m_hasUnsavedChanges WRITE setHasUnsavedChanges NOTIFY hasUnsavedChangesChanged)
Q_PROPERTY(bool shadersUpToDate READ shadersUpToDate WRITE setShadersUpToDate NOTIFY shadersUpToDateChanged) Q_PROPERTY(bool shadersUpToDate READ shadersUpToDate WRITE setShadersUpToDate NOTIFY shadersUpToDateChanged)
Q_PROPERTY(bool isEnabled READ isEnabled WRITE setIsEnabled NOTIFY isEnabledChanged) 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) Q_PROPERTY(QString currentComposition READ currentComposition WRITE setCurrentComposition NOTIFY currentCompositionChanged)
public: public:
@@ -77,6 +78,9 @@ public:
bool isEnabled() const; bool isEnabled() const;
void setIsEnabled(bool enabled); void setIsEnabled(bool enabled);
bool hasValidTarget() const;
void setHasValidTarget(bool validTarget);
QString fragmentShader() const; QString fragmentShader() const;
void setFragmentShader(const QString &newFragmentShader); void setFragmentShader(const QString &newFragmentShader);
@@ -110,6 +114,7 @@ signals:
void effectErrorChanged(); void effectErrorChanged();
void shadersUpToDateChanged(); void shadersUpToDateChanged();
void isEnabledChanged(); void isEnabledChanged();
void hasValidTargetChanged();
void shadersBaked(); void shadersBaked();
void currentCompositionChanged(); void currentCompositionChanged();
void nodesChanged(); void nodesChanged();
@@ -210,6 +215,7 @@ private:
QString m_qmlComponentString; QString m_qmlComponentString;
bool m_loadComponentImages = true; bool m_loadComponentImages = true;
bool m_isEnabled = true; bool m_isEnabled = true;
bool m_hasValidTarget = false;
QString m_currentComposition; QString m_currentComposition;
QTimer m_rebakeTimer; QTimer m_rebakeTimer;

View File

@@ -105,4 +105,19 @@ void EffectComposerView::modelAboutToBeDetached(QmlDesigner::Model *model)
AbstractView::modelAboutToBeDetached(model); AbstractView::modelAboutToBeDetached(model);
} }
void EffectComposerView::selectedNodesChanged(const QList<QmlDesigner::ModelNode> & selectedNodeList,
const QList<QmlDesigner::ModelNode> & /*lastSelectedNodeList*/)
{
bool hasValidTarget = false;
for (const QmlDesigner::ModelNode &node : selectedNodeList) {
if (node.metaInfo().isQtQuickItem()) {
hasValidTarget = true;
break;
}
}
m_widget->effectComposerModel()->setHasValidTarget(hasValidTarget);
}
} // namespace EffectComposer } // namespace EffectComposer

View File

@@ -4,6 +4,7 @@
#pragma once #pragma once
#include "abstractview.h" #include "abstractview.h"
#include "modelnode.h"
#include <coreplugin/icontext.h> #include <coreplugin/icontext.h>
@@ -35,6 +36,8 @@ public:
// AbstractView // AbstractView
void modelAttached(QmlDesigner::Model *model) override; void modelAttached(QmlDesigner::Model *model) override;
void modelAboutToBeDetached(QmlDesigner::Model *model) override; void modelAboutToBeDetached(QmlDesigner::Model *model) override;
void selectedNodesChanged(const QList<QmlDesigner::ModelNode> &selectedNodeList,
const QList<QmlDesigner::ModelNode> &lastSelectedNodeList) override;
private: private:
void customNotification(const AbstractView *view, const QString &identifier, void customNotification(const AbstractView *view, const QString &identifier,