forked from qt-creator/qt-creator
QmlDesigner: Insert dragged material into parent model's materials list
When a material is dragged from item library into a Model nodel in navigator, the material is automatically inserted into the model's materials list. Change-Id: I9a9bd10c433a4fead037ddac8238c14cdc91e3c4 Fixes: QDS-1651 Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io> Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
@@ -535,7 +535,24 @@ void NavigatorTreeModel::handleItemLibraryItemDrop(const QMimeData *mimeData, in
|
|||||||
m_view->executeInTransaction("NavigatorTreeModel::handleItemLibraryItemDrop", [&] {
|
m_view->executeInTransaction("NavigatorTreeModel::handleItemLibraryItemDrop", [&] {
|
||||||
newQmlObjectNode = QmlItemNode::createQmlObjectNode(m_view, itemLibraryEntry, QPointF(), targetProperty, false);
|
newQmlObjectNode = QmlItemNode::createQmlObjectNode(m_view, itemLibraryEntry, QPointF(), targetProperty, false);
|
||||||
ModelNode newModelNode = newQmlObjectNode.modelNode();
|
ModelNode newModelNode = newQmlObjectNode.modelNode();
|
||||||
if (newModelNode.isValid() && newModelNode.isSubclassOf("QtQuick3D.Effect")) {
|
auto insertIntoList = [&](const QByteArray &listPropertyName, const ModelNode &targetNode) {
|
||||||
|
if (targetNode.isValid()) {
|
||||||
|
BindingProperty listProp = targetNode.bindingProperty(listPropertyName);
|
||||||
|
if (listProp.isValid()) {
|
||||||
|
QString expression = listProp.expression();
|
||||||
|
int bracketIndex = expression.indexOf(']');
|
||||||
|
if (expression.isEmpty())
|
||||||
|
expression = newModelNode.validId();
|
||||||
|
else if (bracketIndex == -1)
|
||||||
|
expression = QStringLiteral("[%1,%2]").arg(expression).arg(newModelNode.validId());
|
||||||
|
else
|
||||||
|
expression.insert(bracketIndex, QStringLiteral(",%1").arg(newModelNode.validId()));
|
||||||
|
listProp.setExpression(expression);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
if (newModelNode.isValid()) {
|
||||||
|
if (newModelNode.isSubclassOf("QtQuick3D.Effect")) {
|
||||||
// Insert effects dropped to either View3D or SceneEnvironment into the
|
// Insert effects dropped to either View3D or SceneEnvironment into the
|
||||||
// SceneEnvironment's effects list
|
// SceneEnvironment's effects list
|
||||||
ModelNode targetEnv;
|
ModelNode targetEnv;
|
||||||
@@ -550,19 +567,13 @@ void NavigatorTreeModel::handleItemLibraryItemDrop(const QMimeData *mimeData, in
|
|||||||
targetEnv = envNode;
|
targetEnv = envNode;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (targetEnv.isValid()) {
|
insertIntoList("effects", targetEnv);
|
||||||
BindingProperty effectsProp = targetEnv.bindingProperty("effects");
|
} else if (newModelNode.isSubclassOf("QtQuick3D.Material")) {
|
||||||
if (effectsProp.isValid()) {
|
// Insert material dropped to a model node into the materials list of the model
|
||||||
QString expression = effectsProp.expression();
|
ModelNode targetModel;
|
||||||
int bracketIndex = expression.indexOf(']');
|
if (targetProperty.parentModelNode().isSubclassOf("QtQuick3D.Model"))
|
||||||
if (expression.isEmpty())
|
targetModel = targetProperty.parentModelNode();
|
||||||
expression = newModelNode.validId();
|
insertIntoList("materials", targetModel);
|
||||||
else if (bracketIndex == -1)
|
|
||||||
expression = QStringLiteral("[%1,%2]").arg(expression).arg(newModelNode.validId());
|
|
||||||
else
|
|
||||||
expression.insert(bracketIndex, QStringLiteral(",%1").arg(newModelNode.validId()));
|
|
||||||
effectsProp.setExpression(expression);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Reference in New Issue
Block a user