EffectMaker: Add 'assign to selected' feature

Fixes: QDS-11444
Change-Id: I17b5397b88eeccaae585e84d7ce62f4f80474f87
Reviewed-by: Qt CI Patch Build Bot <ci_patchbuild_bot@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
This commit is contained in:
Mahmoud Badri
2023-12-13 15:54:57 +02:00
parent ff03588f7e
commit 434d0faaa0
7 changed files with 36 additions and 3 deletions

View File

@@ -83,6 +83,10 @@ Item {
} }
onSaveAsClicked: saveAsDialog.open() onSaveAsClicked: saveAsDialog.open()
onAssignToSelectedClicked: {
EffectMakerBackend.effectMakerModel.assignToSelected()
}
} }
EffectMakerPreview { EffectMakerPreview {

View File

@@ -18,6 +18,7 @@ Rectangle {
signal addClicked signal addClicked
signal saveClicked signal saveClicked
signal saveAsClicked signal saveAsClicked
signal assignToSelectedClicked
Row { Row {
spacing: 5 spacing: 5
@@ -49,6 +50,15 @@ Rectangle {
onClicked: root.saveAsClicked() 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()
}
} }

View File

@@ -164,6 +164,13 @@ void EffectMakerModel::clear()
emit nodesChanged(); 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 QString EffectMakerModel::getUniqueEffectName() const
{ {
const QString effectsDir = QmlDesigner::ModelNodeOperations::getEffectsDefaultDirectory(); const QString effectsDir = QmlDesigner::ModelNodeOperations::getEffectsDefaultDirectory();

View File

@@ -65,6 +65,7 @@ public:
Q_INVOKABLE void moveNode(int fromIdx, int toIdx); Q_INVOKABLE void moveNode(int fromIdx, int toIdx);
Q_INVOKABLE void removeNode(int idx); Q_INVOKABLE void removeNode(int idx);
Q_INVOKABLE void clear(); Q_INVOKABLE void clear();
Q_INVOKABLE void assignToSelected();
Q_INVOKABLE QString getUniqueEffectName() const; Q_INVOKABLE QString getUniqueEffectName() const;
bool shadersUpToDate() const; bool shadersUpToDate() const;
@@ -105,6 +106,7 @@ signals:
void nodesChanged(); void nodesChanged();
void resourcesSaved(const QByteArray &type, const Utils::FilePath &path); void resourcesSaved(const QByteArray &type, const Utils::FilePath &path);
void hasUnsavedChangesChanged(); void hasUnsavedChangesChanged();
void assignToSelectedTriggered(const QString &effectPath);
private: private:
enum Roles { enum Roles {

View File

@@ -9,6 +9,8 @@
#include "qmldesignerconstants.h" #include "qmldesignerconstants.h"
#include <modelnodeoperations.h>
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
namespace EffectMaker { namespace EffectMaker {
@@ -44,6 +46,15 @@ QmlDesigner::WidgetInfo EffectMakerView::widgetInfo()
if (m_widget.isNull()) { if (m_widget.isNull()) {
m_widget = new EffectMakerWidget{this}; m_widget = new EffectMakerWidget{this};
connect(m_widget->effectMakerModel(), &EffectMakerModel::assignToSelectedTriggered, this,
[&] (const QString &effectPath) {
executeInTransaction("EffectMakerView::widgetInfo", [&] {
const QList<QmlDesigner::ModelNode> selectedNodes = selectedModelNodes();
for (const QmlDesigner::ModelNode &node : selectedNodes)
QmlDesigner::ModelNodeOperations::handleItemLibraryEffectDrop(effectPath, node);
});
});
auto context = new EffectMakerContext(m_widget.data()); auto context = new EffectMakerContext(m_widget.data());
Core::ICore::addContextObject(context); Core::ICore::addContextObject(context);
} }
@@ -78,4 +89,3 @@ void EffectMakerView::modelAboutToBeDetached(QmlDesigner::Model *model)
} }
} // namespace EffectMaker } // namespace EffectMaker

View File

@@ -43,4 +43,3 @@ private:
}; };
} // namespace EffectMaker } // namespace EffectMaker

View File

@@ -136,7 +136,8 @@ bool isNewEffectMakerActivated();
Utils::FilePath getImagesDefaultDirectory(); Utils::FilePath getImagesDefaultDirectory();
//Item Library and Assets related drop operations //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 handleTextureDrop(const QMimeData *mimeData, const ModelNode &targetModelNode);
void handleMaterialDrop(const QMimeData *mimeData, const ModelNode &targetNode); void handleMaterialDrop(const QMimeData *mimeData, const ModelNode &targetNode);
ModelNode handleItemLibraryImageDrop(const QString &imagePath, ModelNode handleItemLibraryImageDrop(const QString &imagePath,