QmlDesigner: Disable paste option for the original material

Fixes: QDS-7526
Change-Id: Ifdc220685a4881dc3a397d9148022b9be7b5032a
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
This commit is contained in:
Miikka Heikkinen
2022-09-26 16:52:16 +03:00
parent 4da6686705
commit 07ab73fe7f
4 changed files with 27 additions and 10 deletions

View File

@@ -348,8 +348,8 @@ void MaterialBrowserModel::duplicateMaterial(int idx)
void MaterialBrowserModel::copyMaterialProperties(int idx, const QString &section)
{
ModelNode mat = m_materialList.at(idx);
QString matType = QString::fromLatin1(mat.type());
m_copiedMaterial = m_materialList.at(idx);
QString matType = QString::fromLatin1(m_copiedMaterial.type());
if (matType.startsWith("QtQuick3D."))
matType.remove("QtQuick3D.");
@@ -358,7 +358,7 @@ void MaterialBrowserModel::copyMaterialProperties(int idx, const QString &sectio
m_allPropsCopied = section == "All";
if (m_allPropsCopied || m_propertyGroupsObj.empty()) {
m_copiedMaterialProps = mat.properties();
m_copiedMaterialProps = m_copiedMaterial.properties();
} else {
QJsonObject propsSpecObj = m_propertyGroupsObj.value(m_copiedMaterialType).toObject();
if (propsSpecObj.contains(section)) { // should always be true
@@ -366,14 +366,14 @@ void MaterialBrowserModel::copyMaterialProperties(int idx, const QString &sectio
const QJsonArray propNames = propsSpecObj.value(section).toArray();
// auto == QJsonValueConstRef after 04dc959d49e5e3 / Qt 6.4, QJsonValueRef before
for (const auto &propName : propNames)
m_copiedMaterialProps.append(mat.property(propName.toString().toLatin1()));
m_copiedMaterialProps.append(m_copiedMaterial.property(propName.toString().toLatin1()));
if (section == "Base") { // add QtQuick3D.Material base props as well
QJsonObject propsMatObj = m_propertyGroupsObj.value("Material").toObject();
const QJsonArray propNames = propsMatObj.value("Base").toArray();
// auto == QJsonValueConstRef after 04dc959d49e5e3 / Qt 6.4, QJsonValueRef before
for (const auto &propName : propNames)
m_copiedMaterialProps.append(mat.property(propName.toString().toLatin1()));
m_copiedMaterialProps.append(m_copiedMaterial.property(propName.toString().toLatin1()));
}
}
}
@@ -381,7 +381,9 @@ void MaterialBrowserModel::copyMaterialProperties(int idx, const QString &sectio
void MaterialBrowserModel::pasteMaterialProperties(int idx)
{
emit pasteMaterialPropertiesTriggered(m_materialList.at(idx), m_copiedMaterialProps, m_allPropsCopied);
ModelNode targetMat = m_materialList.at(idx);
if (targetMat.isValid() && m_copiedMaterial.isValid() && targetMat != m_copiedMaterial)
emit pasteMaterialPropertiesTriggered(targetMat, m_copiedMaterialProps, m_allPropsCopied);
}
void MaterialBrowserModel::deleteMaterial(int idx)
@@ -418,4 +420,11 @@ void MaterialBrowserModel::openMaterialEditor()
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("MaterialEditor", true);
}
// This is provided as invokable instead of property, as it is difficult to know when ModelNode
// becomes invalid. Much simpler to evaluate this on demand.
bool MaterialBrowserModel::isCopiedMaterialValid() const
{
return m_copiedMaterial.isValid();
}
} // namespace QmlDesigner