diff --git a/share/qtcreator/qmldesigner/effectMakerQmlSources/EffectMaker.qml b/share/qtcreator/qmldesigner/effectMakerQmlSources/EffectMaker.qml index 800493d5f99..81be29f9ae2 100644 --- a/share/qtcreator/qmldesigner/effectMakerQmlSources/EffectMaker.qml +++ b/share/qtcreator/qmldesigner/effectMakerQmlSources/EffectMaker.qml @@ -83,6 +83,10 @@ Item { } onSaveAsClicked: saveAsDialog.open() + + onAssignToSelectedClicked: { + EffectMakerBackend.effectMakerModel.assignToSelected() + } } EffectMakerPreview { diff --git a/share/qtcreator/qmldesigner/effectMakerQmlSources/EffectMakerTopBar.qml b/share/qtcreator/qmldesigner/effectMakerQmlSources/EffectMakerTopBar.qml index f7816396a24..9c962655e3a 100644 --- a/share/qtcreator/qmldesigner/effectMakerQmlSources/EffectMakerTopBar.qml +++ b/share/qtcreator/qmldesigner/effectMakerQmlSources/EffectMakerTopBar.qml @@ -18,6 +18,7 @@ Rectangle { signal addClicked signal saveClicked signal saveAsClicked + signal assignToSelectedClicked Row { spacing: 5 @@ -49,6 +50,15 @@ Rectangle { onClicked: root.saveAsClicked() } + + HelperWidgets.AbstractButton { + style: StudioTheme.Values.viewBarButtonStyle + buttonIcon: StudioTheme.Constants.assignTo_medium + tooltip: qsTr("Assign current composition to selected item") + enabled: EffectMakerBackend.effectMakerModel.currentComposition !== "" + + onClicked: root.assignToSelectedClicked() + } } diff --git a/src/plugins/effectmakernew/effectmakermodel.cpp b/src/plugins/effectmakernew/effectmakermodel.cpp index 54c556c555a..e13e2e39a9a 100644 --- a/src/plugins/effectmakernew/effectmakermodel.cpp +++ b/src/plugins/effectmakernew/effectmakermodel.cpp @@ -164,6 +164,13 @@ void EffectMakerModel::clear() emit nodesChanged(); } +void EffectMakerModel::assignToSelected() +{ + const QString effectsAssetsDir = QmlDesigner::ModelNodeOperations::getEffectsDefaultDirectory(); + const QString path = effectsAssetsDir + QDir::separator() + m_currentComposition + ".qep"; + emit assignToSelectedTriggered(path); +} + QString EffectMakerModel::getUniqueEffectName() const { const QString effectsDir = QmlDesigner::ModelNodeOperations::getEffectsDefaultDirectory(); diff --git a/src/plugins/effectmakernew/effectmakermodel.h b/src/plugins/effectmakernew/effectmakermodel.h index abcb367ad7a..7f73ed4cdca 100644 --- a/src/plugins/effectmakernew/effectmakermodel.h +++ b/src/plugins/effectmakernew/effectmakermodel.h @@ -65,6 +65,7 @@ public: Q_INVOKABLE void moveNode(int fromIdx, int toIdx); Q_INVOKABLE void removeNode(int idx); Q_INVOKABLE void clear(); + Q_INVOKABLE void assignToSelected(); Q_INVOKABLE QString getUniqueEffectName() const; bool shadersUpToDate() const; @@ -105,6 +106,7 @@ signals: void nodesChanged(); void resourcesSaved(const QByteArray &type, const Utils::FilePath &path); void hasUnsavedChangesChanged(); + void assignToSelectedTriggered(const QString &effectPath); private: enum Roles { diff --git a/src/plugins/effectmakernew/effectmakerview.cpp b/src/plugins/effectmakernew/effectmakerview.cpp index 11624efdeb0..42624826943 100644 --- a/src/plugins/effectmakernew/effectmakerview.cpp +++ b/src/plugins/effectmakernew/effectmakerview.cpp @@ -9,6 +9,8 @@ #include "qmldesignerconstants.h" +#include + #include namespace EffectMaker { @@ -44,6 +46,15 @@ QmlDesigner::WidgetInfo EffectMakerView::widgetInfo() if (m_widget.isNull()) { m_widget = new EffectMakerWidget{this}; + connect(m_widget->effectMakerModel(), &EffectMakerModel::assignToSelectedTriggered, this, + [&] (const QString &effectPath) { + executeInTransaction("EffectMakerView::widgetInfo", [&] { + const QList selectedNodes = selectedModelNodes(); + for (const QmlDesigner::ModelNode &node : selectedNodes) + QmlDesigner::ModelNodeOperations::handleItemLibraryEffectDrop(effectPath, node); + }); + }); + auto context = new EffectMakerContext(m_widget.data()); Core::ICore::addContextObject(context); } @@ -78,4 +89,3 @@ void EffectMakerView::modelAboutToBeDetached(QmlDesigner::Model *model) } } // namespace EffectMaker - diff --git a/src/plugins/effectmakernew/effectmakerview.h b/src/plugins/effectmakernew/effectmakerview.h index 2bed1cfc103..297e5acc776 100644 --- a/src/plugins/effectmakernew/effectmakerview.h +++ b/src/plugins/effectmakernew/effectmakerview.h @@ -43,4 +43,3 @@ private: }; } // namespace EffectMaker - diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h index c8042887e18..dec37f0f9ef 100644 --- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h +++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.h @@ -136,7 +136,8 @@ bool isNewEffectMakerActivated(); Utils::FilePath getImagesDefaultDirectory(); //Item Library and Assets related drop operations -ModelNode handleItemLibraryEffectDrop(const QString &effectPath, const ModelNode &targetNode); +QMLDESIGNERCOMPONENTS_EXPORT ModelNode handleItemLibraryEffectDrop(const QString &effectPath, + const ModelNode &targetNode); void handleTextureDrop(const QMimeData *mimeData, const ModelNode &targetModelNode); void handleMaterialDrop(const QMimeData *mimeData, const ModelNode &targetNode); ModelNode handleItemLibraryImageDrop(const QString &imagePath,