diff --git a/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp b/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp index 3213792b301..5c6308d15bf 100644 --- a/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp +++ b/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp @@ -3,49 +3,39 @@ #include "materialeditorview.h" +#include "asset.h" +#include "bindingproperty.h" +#include "auxiliarydataproperties.h" +#include "designdocument.h" +#include "designmodewidget.h" +#include "dynamicpropertiesmodel.h" +#include "itemlibraryinfo.h" #include "materialeditorqmlbackend.h" #include "materialeditorcontextobject.h" #include "materialeditordynamicpropertiesproxymodel.h" -#include "propertyeditorvalue.h" #include "materialeditortransaction.h" -#include "assetslibrarywidget.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include +#include "metainfo.h" +#include "nodeinstanceview.h" +#include "nodelistproperty.h" +#include "nodemetainfo.h" +#include "propertyeditorqmlbackend.h" +#include "propertyeditorvalue.h" +#include "qmldesignerconstants.h" +#include "qmldesignerplugin.h" +#include "qmltimeline.h" +#include "variantproperty.h" #include #include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include + #include #include -#include #include -#include #include #include -#include #include namespace QmlDesigner { @@ -74,8 +64,6 @@ MaterialEditorView::MaterialEditorView(ExternalDependenciesInterface &externalDe m_typeUpdateTimer.setInterval(500); connect(&m_typeUpdateTimer, &QTimer::timeout, this, &MaterialEditorView::updatePossibleTypes); - m_stackedWidget->setStyleSheet(Theme::replaceCssColors( - QString::fromUtf8(Utils::FileReader::fetchQrc(":/qmldesigner/stylesheet.css")))); m_stackedWidget->setMinimumWidth(250); QmlDesignerPlugin::trackWidgetFocusTime(m_stackedWidget, Constants::EVENT_MATERIALEDITOR_TIME); @@ -183,7 +171,7 @@ void MaterialEditorView::changeExpression(const QString &propertyName) if (name.isNull() || locked() || noValidSelection()) return; - executeInTransaction("MaterialEditorView::changeExpression", [this, name] { + executeInTransaction(__FUNCTION__, [this, name] { PropertyName underscoreName(name); underscoreName.replace('.', '_'); @@ -257,7 +245,7 @@ void MaterialEditorView::exportPropertyAsAlias(const QString &name) if (name.isNull() || locked() || noValidSelection()) return; - executeInTransaction("MaterialEditorView::exportPopertyAsAlias", [this, name] { + executeInTransaction(__FUNCTION__, [this, name] { const QString id = m_selectedMaterial.validId(); QString upperCasePropertyName = name; upperCasePropertyName.replace(0, 1, upperCasePropertyName.at(0).toUpper()); @@ -279,7 +267,7 @@ void MaterialEditorView::removeAliasExport(const QString &name) if (name.isNull() || locked() || noValidSelection()) return; - executeInTransaction("MaterialEditorView::removeAliasExport", [this, name] { + executeInTransaction(__FUNCTION__, [this, name] { const QString id = m_selectedMaterial.validId(); const QList bindingProps = rootModelNode().bindingProperties(); @@ -392,7 +380,7 @@ void MaterialEditorView::applyMaterialToSelectedModels(const ModelNode &material return QString(); }; - executeInTransaction("MaterialEditorView::applyMaterialToSelectedModels", [&] { + executeInTransaction(__FUNCTION__, [&] { for (const ModelNode &node : std::as_const(m_selectedModels)) { QmlObjectNode qmlObjNode(node); if (add) { @@ -425,7 +413,7 @@ void MaterialEditorView::handleToolBarAction(int action) case MaterialEditorContextObject::AddNewMaterial: { if (!model()) break; - executeInTransaction("MaterialEditorView:handleToolBarAction", [&] { + executeInTransaction(__FUNCTION__, [&] { ModelNode matLib = materialLibraryNode(); if (!matLib.isValid()) return; @@ -455,7 +443,6 @@ void MaterialEditorView::handleToolBarAction(int action) void MaterialEditorView::handlePreviewEnvChanged(const QString &envAndValue) { - Q_UNUSED(envAndValue); if (envAndValue.isEmpty() || m_initializingPreviewData) return; @@ -518,7 +505,6 @@ void MaterialEditorView::handlePreviewEnvChanged(const QString &envAndValue) void MaterialEditorView::handlePreviewModelChanged(const QString &modelStr) { - Q_UNUSED(modelStr); if (modelStr.isEmpty() || m_initializingPreviewData) return; @@ -613,7 +599,7 @@ void MaterialEditorView::setupQmlBackend() void MaterialEditorView::commitVariantValueToModel(const PropertyName &propertyName, const QVariant &value) { m_locked = true; - executeInTransaction("MaterialEditorView:commitVariantValueToModel", [&] { + executeInTransaction(__FUNCTION__, [&] { QmlObjectNode(m_selectedMaterial).setVariantProperty(propertyName, value); }); m_locked = false; @@ -641,7 +627,7 @@ void MaterialEditorView::commitAuxValueToModel(const PropertyName &propertyName, void MaterialEditorView::removePropertyFromModel(const PropertyName &propertyName) { m_locked = true; - executeInTransaction("MaterialEditorView:removePropertyFromModel", [&] { + executeInTransaction(__FUNCTION__, [&] { QmlObjectNode(m_selectedMaterial).removeProperty(propertyName); }); m_locked = false; @@ -696,6 +682,7 @@ static Import entryToImport(const ItemLibraryEntry &entry) { if (entry.majorVersion() == -1 && entry.minorVersion() == -1) return Import::createFileImport(entry.requiredImport()); + return Import::createLibraryImport(entry.requiredImport(), QString::number(entry.majorVersion()) + QLatin1Char('.') + QString::number(entry.minorVersion())); @@ -933,6 +920,7 @@ void MaterialEditorView::currentStateChanged(const ModelNode &node) { QmlModelState newQmlModelState(node); Q_ASSERT(newQmlModelState.isValid()); + resetView(); } @@ -1006,7 +994,7 @@ void MaterialEditorView::renameMaterial(ModelNode &material, const QString &newN if (objName.isValid() && objName.toString() == newName) return; - executeInTransaction("MaterialEditorView:renameMaterial", [&] { + executeInTransaction(__FUNCTION__, [&] { material.setIdWithRefactoring(model()->generateIdFromName(newName, "material")); VariantProperty objNameProp = material.variantProperty("objectName"); @@ -1039,7 +1027,8 @@ void MaterialEditorView::duplicateMaterial(const ModelNode &material) // set name and id QString newName = sourceMat.modelNode().variantProperty("objectName").value().toString() + " copy"; - duplicateMatNode.variantProperty("objectName").setValue(newName); + VariantProperty objNameProp = duplicateMatNode.variantProperty("objectName"); + objNameProp.setValue(newName); duplicateMatNode.setIdWithoutRefactoring(model()->generateIdFromName(newName, "material")); // sync properties. Only the base state is duplicated. @@ -1052,15 +1041,15 @@ void MaterialEditorView::duplicateMaterial(const ModelNode &material) if (prop.isDynamic()) { dynamicProps.append(prop); } else { - duplicateMatNode.variantProperty(prop.name()) - .setValue(prop.toVariantProperty().value()); + VariantProperty variantProp = duplicateMatNode.variantProperty(prop.name()); + variantProp.setValue(prop.toVariantProperty().value()); } } else if (prop.isBindingProperty()) { if (prop.isDynamic()) { dynamicProps.append(prop); } else { - duplicateMatNode.bindingProperty(prop.name()) - .setExpression(prop.toBindingProperty().expression()); + BindingProperty bindingProp = duplicateMatNode.bindingProperty(prop.name()); + bindingProp.setExpression(prop.toBindingProperty().expression()); } } } @@ -1075,13 +1064,13 @@ void MaterialEditorView::duplicateMaterial(const ModelNode &material) executeInTransaction(__FUNCTION__, [&] { for (const AbstractProperty &prop : std::as_const(dynamicProps)) { if (prop.isVariantProperty()) { - duplicateMatNode.variantProperty(prop.name()) - .setDynamicTypeNameAndValue(prop.dynamicTypeName(), - prop.toVariantProperty().value()); + VariantProperty variantProp = duplicateMatNode.variantProperty(prop.name()); + variantProp.setDynamicTypeNameAndValue(prop.dynamicTypeName(), + prop.toVariantProperty().value()); } else if (prop.isBindingProperty()) { - duplicateMatNode.bindingProperty(prop.name()) - .setDynamicTypeNameAndExpression(prop.dynamicTypeName(), - prop.toBindingProperty().expression()); + BindingProperty bindingProp = duplicateMatNode.bindingProperty(prop.name()); + bindingProp.setDynamicTypeNameAndExpression(prop.dynamicTypeName(), + prop.toBindingProperty().expression()); } } }); @@ -1149,9 +1138,9 @@ void MaterialEditorView::dragStarted(QMimeData *mimeData) { if (mimeData->hasFormat(Constants::MIME_TYPE_ASSETS)) { const QString assetPath = QString::fromUtf8(mimeData->data(Constants::MIME_TYPE_ASSETS)).split(',')[0]; - QString assetType = AssetsLibraryWidget::getAssetTypeAndData(assetPath).first; + Asset asset(assetPath); - if (assetType != Constants::MIME_TYPE_ASSET_IMAGE) // currently only image assets have dnd-supported properties + if (!asset.isValidTextureSource()) // currently only image assets have dnd-supported properties return; highlightSupportedProperties(); diff --git a/src/plugins/qmldesigner/components/materialeditor/materialeditorview.h b/src/plugins/qmldesigner/components/materialeditor/materialeditorview.h index c0880c738bc..e0733a34caf 100644 --- a/src/plugins/qmldesigner/components/materialeditor/materialeditorview.h +++ b/src/plugins/qmldesigner/components/materialeditor/materialeditorview.h @@ -3,23 +3,22 @@ #pragma once -#include -#include +#include "abstractview.h" +#include "modelnode.h" #include #include #include QT_BEGIN_NAMESPACE +class QColorDialog; class QShortcut; class QStackedWidget; -class QTimer; -class QColorDialog; QT_END_NAMESPACE namespace QmlDesigner { -class ModelNode; +class ItemLibraryInfo; class MaterialEditorQmlBackend; namespace Internal {