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,25 +535,11 @@ 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) {
|
||||||
// Insert effects dropped to either View3D or SceneEnvironment into the
|
if (targetNode.isValid()) {
|
||||||
// SceneEnvironment's effects list
|
BindingProperty listProp = targetNode.bindingProperty(listPropertyName);
|
||||||
ModelNode targetEnv;
|
if (listProp.isValid()) {
|
||||||
if (targetProperty.parentModelNode().isSubclassOf("QtQuick3D.SceneEnvironment")) {
|
QString expression = listProp.expression();
|
||||||
targetEnv = targetProperty.parentModelNode();
|
|
||||||
} else if (targetProperty.parentModelNode().isSubclassOf("QtQuick3D.View3D")) {
|
|
||||||
// see if View3D has environment set to it
|
|
||||||
BindingProperty envNodeProp = targetProperty.parentModelNode().bindingProperty("environment");
|
|
||||||
if (envNodeProp.isValid()) {
|
|
||||||
ModelNode envNode = envNodeProp.resolveToModelNode();
|
|
||||||
if (envNode.isValid())
|
|
||||||
targetEnv = envNode;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (targetEnv.isValid()) {
|
|
||||||
BindingProperty effectsProp = targetEnv.bindingProperty("effects");
|
|
||||||
if (effectsProp.isValid()) {
|
|
||||||
QString expression = effectsProp.expression();
|
|
||||||
int bracketIndex = expression.indexOf(']');
|
int bracketIndex = expression.indexOf(']');
|
||||||
if (expression.isEmpty())
|
if (expression.isEmpty())
|
||||||
expression = newModelNode.validId();
|
expression = newModelNode.validId();
|
||||||
@@ -561,9 +547,34 @@ void NavigatorTreeModel::handleItemLibraryItemDrop(const QMimeData *mimeData, in
|
|||||||
expression = QStringLiteral("[%1,%2]").arg(expression).arg(newModelNode.validId());
|
expression = QStringLiteral("[%1,%2]").arg(expression).arg(newModelNode.validId());
|
||||||
else
|
else
|
||||||
expression.insert(bracketIndex, QStringLiteral(",%1").arg(newModelNode.validId()));
|
expression.insert(bracketIndex, QStringLiteral(",%1").arg(newModelNode.validId()));
|
||||||
effectsProp.setExpression(expression);
|
listProp.setExpression(expression);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
if (newModelNode.isValid()) {
|
||||||
|
if (newModelNode.isSubclassOf("QtQuick3D.Effect")) {
|
||||||
|
// Insert effects dropped to either View3D or SceneEnvironment into the
|
||||||
|
// SceneEnvironment's effects list
|
||||||
|
ModelNode targetEnv;
|
||||||
|
if (targetProperty.parentModelNode().isSubclassOf("QtQuick3D.SceneEnvironment")) {
|
||||||
|
targetEnv = targetProperty.parentModelNode();
|
||||||
|
} else if (targetProperty.parentModelNode().isSubclassOf("QtQuick3D.View3D")) {
|
||||||
|
// see if View3D has environment set to it
|
||||||
|
BindingProperty envNodeProp = targetProperty.parentModelNode().bindingProperty("environment");
|
||||||
|
if (envNodeProp.isValid()) {
|
||||||
|
ModelNode envNode = envNodeProp.resolveToModelNode();
|
||||||
|
if (envNode.isValid())
|
||||||
|
targetEnv = envNode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
insertIntoList("effects", targetEnv);
|
||||||
|
} else if (newModelNode.isSubclassOf("QtQuick3D.Material")) {
|
||||||
|
// Insert material dropped to a model node into the materials list of the model
|
||||||
|
ModelNode targetModel;
|
||||||
|
if (targetProperty.parentModelNode().isSubclassOf("QtQuick3D.Model"))
|
||||||
|
targetModel = targetProperty.parentModelNode();
|
||||||
|
insertIntoList("materials", targetModel);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user