forked from qt-creator/qt-creator
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:
@@ -83,6 +83,10 @@ Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onSaveAsClicked: saveAsDialog.open()
|
onSaveAsClicked: saveAsDialog.open()
|
||||||
|
|
||||||
|
onAssignToSelectedClicked: {
|
||||||
|
EffectMakerBackend.effectMakerModel.assignToSelected()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EffectMakerPreview {
|
EffectMakerPreview {
|
||||||
|
@@ -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()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -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();
|
||||||
|
@@ -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 {
|
||||||
|
@@ -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
|
||||||
|
|
||||||
|
@@ -43,4 +43,3 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
} // namespace EffectMaker
|
} // namespace EffectMaker
|
||||||
|
|
||||||
|
@@ -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,
|
||||||
|
Reference in New Issue
Block a user