forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/8.0' into 9.0
Conflicts: doc/qtcreator/src/qtquick/qt-design-viewer.qdoc src/plugins/qmldesigner/components/assetslibrary/assetslibrarywidget.cpp src/plugins/qmldesigner/components/edit3d/edit3dwidget.cpp src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp src/plugins/qmldesigner/components/navigator/choosefrompropertylistdialog.cpp src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp src/plugins/qmldesigner/designercore/model/abstractview.cpp src/plugins/qmldesigner/designercore/model/import.cpp src/plugins/qmldesigner/designercore/model/model_p.h src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp src/plugins/qmlprojectmanager/qmlproject.cpp Change-Id: I4236bf0da9306abf201f4679259e72dd7c1eddbe
This commit is contained in:
@@ -59,9 +59,7 @@ MaterialEditorView::MaterialEditorView()
|
||||
m_ensureMatLibTimer.callOnTimeout([this] {
|
||||
if (model() && model()->rewriterView() && !model()->rewriterView()->hasIncompleteTypeInformation()
|
||||
&& model()->rewriterView()->errors().isEmpty()) {
|
||||
executeInTransaction("MaterialEditorView::MaterialEditorView", [this] {
|
||||
ensureMaterialLibraryNode();
|
||||
});
|
||||
ensureMaterialLibraryNode();
|
||||
m_ensureMatLibTimer.stop();
|
||||
}
|
||||
});
|
||||
@@ -714,8 +712,8 @@ void MaterialEditorView::updatePossibleTypes()
|
||||
return;
|
||||
|
||||
// Ensure basic types are always first
|
||||
static const QStringList basicTypes {"DefaultMaterial", "PrincipledMaterial", "CustomMaterial"};
|
||||
QStringList allTypes = basicTypes;
|
||||
QStringList nonQuick3dTypes;
|
||||
QStringList allTypes;
|
||||
|
||||
const QList<ItemLibraryEntry> itemLibEntries = m_itemLibraryInfo->entries();
|
||||
for (const ItemLibraryEntry &entry : itemLibEntries) {
|
||||
@@ -730,12 +728,22 @@ void MaterialEditorView::updatePossibleTypes()
|
||||
addImport = model()->hasImport(import, true, true);
|
||||
}
|
||||
if (addImport) {
|
||||
QString typeName = QString::fromLatin1(entry.typeName().split('.').last());
|
||||
if (!allTypes.contains(typeName))
|
||||
allTypes.append(typeName);
|
||||
const QList<QByteArray> typeSplit = entry.typeName().split('.');
|
||||
const QString typeName = QString::fromLatin1(typeSplit.last());
|
||||
if (typeSplit.size() == 2 && typeSplit.first() == "QtQuick3D") {
|
||||
if (!allTypes.contains(typeName))
|
||||
allTypes.append(typeName);
|
||||
} else if (!nonQuick3dTypes.contains(typeName)) {
|
||||
nonQuick3dTypes.append(typeName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
allTypes.sort();
|
||||
nonQuick3dTypes.sort();
|
||||
allTypes.append(nonQuick3dTypes);
|
||||
|
||||
m_qmlBackEnd->contextObject()->setPossibleTypes(allTypes);
|
||||
}
|
||||
|
||||
@@ -1006,6 +1014,8 @@ void MaterialEditorView::duplicateMaterial(const ModelNode &material)
|
||||
|
||||
TypeName matType = material.type();
|
||||
QmlObjectNode sourceMat(material);
|
||||
ModelNode duplicateMatNode;
|
||||
QList<AbstractProperty> dynamicProps;
|
||||
|
||||
executeInTransaction(__FUNCTION__, [&] {
|
||||
ModelNode matLib = materialLibraryNode();
|
||||
@@ -1016,25 +1026,57 @@ void MaterialEditorView::duplicateMaterial(const ModelNode &material)
|
||||
NodeMetaInfo metaInfo = model()->metaInfo(matType);
|
||||
QmlObjectNode duplicateMat = createModelNode(matType, metaInfo.majorVersion(), metaInfo.minorVersion());
|
||||
|
||||
duplicateMatNode = duplicateMat.modelNode();
|
||||
|
||||
// set name and id
|
||||
QString newName = sourceMat.modelNode().variantProperty("objectName").value().toString() + " copy";
|
||||
duplicateMat.modelNode().variantProperty("objectName").setValue(newName);
|
||||
duplicateMat.modelNode().setIdWithoutRefactoring(model()->generateIdFromName(newName, "material"));
|
||||
duplicateMatNode.variantProperty("objectName").setValue(newName);
|
||||
duplicateMatNode.setIdWithoutRefactoring(model()->generateIdFromName(newName, "material"));
|
||||
|
||||
// sync properties
|
||||
// sync properties. Only the base state is duplicated.
|
||||
const QList<AbstractProperty> props = material.properties();
|
||||
for (const AbstractProperty &prop : props) {
|
||||
if (prop.name() == "objectName")
|
||||
if (prop.name() == "objectName" || prop.name() == "data")
|
||||
continue;
|
||||
|
||||
if (prop.isVariantProperty())
|
||||
duplicateMat.setVariantProperty(prop.name(), prop.toVariantProperty().value());
|
||||
else if (prop.isBindingProperty())
|
||||
duplicateMat.setBindingProperty(prop.name(), prop.toBindingProperty().expression());
|
||||
if (prop.isVariantProperty()) {
|
||||
if (prop.isDynamic()) {
|
||||
dynamicProps.append(prop);
|
||||
} else {
|
||||
duplicateMatNode.variantProperty(prop.name())
|
||||
.setValue(prop.toVariantProperty().value());
|
||||
}
|
||||
} else if (prop.isBindingProperty()) {
|
||||
if (prop.isDynamic()) {
|
||||
dynamicProps.append(prop);
|
||||
} else {
|
||||
duplicateMatNode.bindingProperty(prop.name())
|
||||
.setExpression(prop.toBindingProperty().expression());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
matLib.defaultNodeListProperty().reparentHere(duplicateMat);
|
||||
});
|
||||
|
||||
// For some reason, creating dynamic properties in the same transaction doesn't work, so
|
||||
// let's do it in separate transaction.
|
||||
// TODO: Fix the issue and merge transactions (QDS-8094)
|
||||
if (!dynamicProps.isEmpty()) {
|
||||
executeInTransaction(__FUNCTION__, [&] {
|
||||
for (const AbstractProperty &prop : std::as_const(dynamicProps)) {
|
||||
if (prop.isVariantProperty()) {
|
||||
duplicateMatNode.variantProperty(prop.name())
|
||||
.setDynamicTypeNameAndValue(prop.dynamicTypeName(),
|
||||
prop.toVariantProperty().value());
|
||||
} else if (prop.isBindingProperty()) {
|
||||
duplicateMatNode.bindingProperty(prop.name())
|
||||
.setDynamicTypeNameAndExpression(prop.dynamicTypeName(),
|
||||
prop.toBindingProperty().expression());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void MaterialEditorView::customNotification([[maybe_unused]] const AbstractView *view,
|
||||
|
||||
Reference in New Issue
Block a user